od Podstaw
4 godz. 7 min · HTML i CSS · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerFlexbox nie jest trudny - pod warunkiem, że rozumiemy dlaczego elementy renderują się w konkretny sposób. Do tego potrzebna jest szczegółowa wiedza o osiach flexboxa, o tym jak ustalane są ich kierunki i jak elementy będą układać się wzdłuż nich.Dopiero wtedy dobrze można zrozumieć jak działa rozszerzanie i kurczenie elementów, jak elementy będą zachowywać się przy zmianie rozmiaru okna przeglądarki czy przy przełączaniu wyświetlania z układu wierszy na kolumnowy. To wszystko oraz kilka innych mechanizmów ukrytych we Flexboxie znajdziesz dokładnie wyjaśnione w tym kursie - podgląd przykładów czy dodatkowe quizy po zakończeniu kursu pomogą w utrwaleniu zdobytej wiedzy.
Wielu developerów nie jest świadomych, że korzystanie z niektórych właściwości Flexboxa wpływa na dostępność naszych stron WWW - dostosowywanie naszych witryn pod czytniki ekranowe oraz użytkowników korzystających z witryn w sposób niestandardowy to temat który zyskuje na coraz większej popularności (zwłaszcza, jeśli planujesz kiedyś tworzyć strony rządowe - te są zobligowane do tworzenia stron dostępnych dla osób niepełnosprawnych).W tym kursie, dowiesz się jakie problemy może nieść za sobą używanie flexboxa i jak ich unikać.
Kurs ten jest dla wszystkich osób, które dobrze czują się z CSS - wystarczy podstawowa umiejętność pisania selektorów. Nie ma żadnych wymagań dotyczących JavaScript, czy znajomości konkretnych frameworków. Natomiast jeśli do tej pory korzystałeś/aś z innych, starszych technologii do pozycjonowania elementów i chcesz nauczyć się prostszej, dobrze wspieranej współczesnej technologii - nie trać czasu! Flexbox to idealne wprowadzenie do kolejnych sposobów pozycjonowania jak np. CSS Grid.
Cześć witam cię w podsumowaniu ćwiczenia w którym tworzyliśmy
naszą własną kopie youtube i teraz
poruszę kilka rzeczy na które wcześniej mieliśmy czasu bądź które
wyszły przy okazji tworzenia tego przykładu jak
widać tu pierwszą rzeczą którą moglibyśmy tutaj naprawić
jest to żeby wideo konkretnie jego tytuł
miał zawsze 100% szerokości danej karty ponieważ jeśli
tak nie jest no to oczywiście przy krótszych tytułach ten button będzie doklejony do końca
tego ciągu znaków a nie do końca kontenera
więc wchodząc do main css znajdźmy
video name i ustawmy width na 100%
po zapisaniu oczywiście jak już widać ten
element będzie dobrze pozycjonował się danej karcie oczywiście
ten layout ma dużo różnic względem
oryginalnego youtuba na przykład ta
lista nawigacyjna jest zawsze wycentrowana względem
tej listy wideo oczywiście moglibyśmy to
zrobić tworząc jakiś wrapper który będzie zamykał
nam to w jednym rodzicu i ustawiając na przykład
odpowiedni padding z tej strony bądź po prostu ustawiając
max width na tym wrapperze i
centrując całą treść przy pomocy na przykład margin 0 auto
oczywiście drobne rzeczy pokroju różnice
w wielkości fonta i tego typu rzeczy też można byłoby poprawić
natomiast to nad czym ja się chciałem skupić jest
przedstawienie problemów które wynikają częściowo być
może z korzystania z flexa ale bardziej ze struktury markup'u którą
sobie tutaj ustaliliśmy jeden feature którego na pewno brakuje to jest
sticky scroll czyli szybsze scrollowanie naszej
strony tak bardzo że element wyjeżdżałby
już poza jej viewport to on przykleja się do
danego elementu interfejsu i tam już
zostaje ten efekt możemy uzyskać za
pomocą position sticky tutaj swoją drogą znajdziecie wideo
na ten temat natomiast jeśli chcielibyśmy po prostu na
naszym channel
header nav czyli musimy wrócić do pliku header css i wziąć
channel header nav gdybyśmy ustawili
tutaj position sticky i
ustawili top powiedzmy na 0 no to to niestety
nie zadziała a nie zadziała z tego powodu ponieważ mamy nie
płaską strukturę w naszym markup'ie tutaj
jest struktura następująca że bezpośrednio w body mamy nav'a
header i main'a i dopiero w tym headerze jest kolejna
lista nawigacyjna i przez to właśnie zagnieżdżenie że wewnątrz headera mamy tą listę
no to natywne position sticky nie zadziała moglibyśmy je oczywiście
emulować za pomocą javascriptu co nie byłoby też takie trudne natomiast nie jest to
tematem tego kursu moglibyśmy przenieść
sobie tego nav'a poza ten header oczywiście
tutaj musielibyśmy troszkę naprawić te stylowanie chociażby
zmienić tutaj background-color na taki
jak tutaj ustawiśmy na całym headerze bo on backgroundu nie ma
ten channel header nav więc musimy go dodać jawnie i teraz to wygląda
oczywiście okej i sticky już też zadziała czyli w momencie gdy element
wyjeżdżałby poza viewport to on będzie
przyklejał się do góry ekranu musielibyśmy oczywiście tutaj jeszcze z-index
ustawić na 1 i wtedy element faktycznie będzie
się przyklejał tam gdzie chcemy tylko problem jest tutaj taki
że semantycznie jest tutaj troszkę niepoprawny ponieważ wynikałoby
że jest to nawigacja dla całej naszej witryny co niekoniecznie musi być prawdą
ponieważ mimo wszystko ta nawigacja dotyczy tych
wideo a nie całego youtube czyli nawigacji po
profilu użytkownika i tak dalej i tak dalej więc ja bym
proponował zostawić markup tak jak jest i
za pomocą javascriptu na odpowiedniej pozycji scrolla oczywiście
z odpowiednimi debounce'm i throttle'm ustawiać position fixed aby
osiągnąć ten efekt drugim problemem jest oczywiście overflow
w osi x i to co powinniśmy
zrobić jest przelecenie każdego elementu w naszym
markup'ie i sprawdzenie który element faktycznie spowodował ten overflow
czyli moglibyśmy zacząć od usunięcia tego nav'a
widzimy że overflow dalej jest możemy usunąć sobie tego
nav'a okej usunęliśmy całą listę
i widać że teraz tego overflow'a nie ma więc możemy
oczywiście metodą redukcji
tego co działa znaleźć sobie który element robi tego overflow x
natomiast aby już w tym momencie tylko to uprościć możemy
do base'a dopisać na body overflow x
hidden i w tym momencie tylko oś x
będzie miała ukryty scrollbar nie jest to rozwiązanie idealne i
nie jest to też rozwiązanie produkcyjne natomiast jeśli będziecie mieli naprawdę ciężkie
case'y gdzie nie wiadomo który element powoduje
ten overflow a macie bug'a na produkcji i musicie fixnąć to na teraz
no to to jest jakiś tam fix chwilowy
który załagodzi po prostu ten konkretny pożar natomiast
na youtubie jeszcze ta nawigacja główna ma również position
sticky więc my możemy zaaplikować to na naszej stronie ponieważ ten
navbar jest navbarem wewnątrz body czyli tutaj scrollable
area czyli możemy na pliku
nav css ustawić sobie w site nav'ie
position sticky i
ustawić mu top na 0 czyli w momencie kiedy element już będzie wyjeżdżał
on się nam przyklei tylko tak jak poprzednio musimy ustawić mu
z-index żeby był na wierzchu warstw ces'a
i został tutaj no i oczywiście w momencie doscrollowania do tego
menu jeśli zmienilibyśmy strukturę bądź dopisali js'a to to menu też
również mogłoby się tutaj przykleić
w kontekście wd tutaj na jeszcze mniejszej rozdzielczości te
elementy wewnątrz site-nav'a również znikają więc zaadaptujmy to
w ten sposób aby faktycznie było tutaj troszkę więcej miejsca czyli
patrzymy jakie elementy zostały lupa dodaj wideo i aplikacje
więc usuwamy wszystkie pozostałe elementy bierzemy
sobie media max width powiedzmy jaka
tutaj jest szerokość tego okna no powiedzmy
400 pikseli i
ukrywamy wszystkie elementy poza tym tym oraz
tym czyli comment
i bell ukrywamy czyli
fa comment display
none sprawdźmy
jeszcze raz jaki
tutaj jest display ustawione przez font-awesome jest
ustawiony inline-block my możemy zrobić site
nav fa comment display
none tutaj jest jakaś przestrzeń więc prawdopodobnie w naszym markup'ie jeszcze
zostawiliśmy acha
oczywiście tutaj jest user action powinniśmy
tak naprawdę ukryć całego li więc jedną
rzeczą którą na przykład robi się w bootstrapie jest ustawienie flag za pomocą klas
w css na przykład moglibyśmy zrobić tutaj is mobile hidden
i wtedy na mobilce każdy element który będzie miał ten konkretny
komentarz będzie ukryty na mobilce nie jest to do końca najlepsze
ponieważ deklarujemy w markup'ie w html jak
element powinien się zachowywać w rwd co jest tak naprawdę warstwą prezentacji ale
też oczywiście możemy takie rozwiązanie wykorzystać
i tutaj tą listę nawigacyjną być
może też skrócić na mobilce do
powiedzmy 100 pikseli trochę przegięliśmy
powiedzmy 200 pikseli i
teraz faktycznie gdy będziemy rozszerzali te elementy no to
one się już ułożą w inny sposób na większej rozdzielczości więc
to co mógłbyś bądź mogłabyś zrobić na własną rękę aby
jeszcze ten markup ulepszyć to oczywiście zaaplikowanie sticky do
pozostałych elementów na tej stronie obsługę javascriptu
czyli to rozsuwane menu te
scrollowalne sekcje dla
main video i playlist i tak dalej oczywiście selectbox'y
czy właśnie sticky
dla tego elementu bez zmiany markup'u podsumowując
to ćwiczenie staraliśmy się korzystać z flexboxa
wszędzie gdzie było to aplikowalne były
sytuacje że używanie flexboxa prowadziło do pewnych problemów i lepiej
było go nie używać ale poza samym flexboxem oczywiście też trzeba
być obytym z css'em żeby móc tworzyć efektywne
layouty to wszystko w tym ćwiczeniu bardzo się cieszę
że dotrwałeś do końca zachęcam cię do obejrzenia tej serii wideo jeszcze
raz i kodowania powiedzmy równolegle do tego
co ja robię na ekranie a w kolejnej iteracji już zupełnie zakodowania
takiej strony bądź podobnej zupełnie samodzielnie po
tych ćwiczeniach na pewno będziesz już swobodnie korzystać z
flexboxa