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ę bardzo serdecznie w kolejnej lekcji z kursu flexbox
od podstaw poprzednim odcinku dowiedziałeś się że ustawiając właściwość display
flex na dowolnym znaczniku html tak naprawdę ustawiane są
różne inne właściwości css'owe jedną z nich było flex-direction
flex-direction przyjmuje domyślnie wartość row jak
widzisz obecność tej reguły nie wpłynęła zupełnie na renderowanie naszej strony natomiast
przyjmuje też wartości takie jak column i na pierwszy rzut oka widzimy
że elementy są renderowane od góry do dołu natomiast obie
te właściwości mają też swój wariant reverse i na pierwszy
rzut oka widzimy że te elementy są renderowane w przeciwnej kolejności czyli
tak jak były renderowane od lewej do prawej to dla row-reverse
są renderowane od prawej do lewej i analogicznie sytuacja ma się
do column-reverse gdzie elementy są renderowane
od dołu do góry w przeciwieństwie do kolumn gdzie jest to od
góry do dołu tak to wygląda na pierwszy rzut oka a ja teraz przedstawię ci
jak działa mechanika pod spodem która definiuje że elementy są ustawiane
w ten sposób więc wrócimy do początkowej wartości flex-drirection row
i zobaczmy tutaj w podglądzie wedle jakich
osi renderowane są te flex item'y wewnątrz kontenera który ma
na sobie display flex jak widzisz mamy tutaj oś main axis
i cross axis naszą main axis w tym momencie jest oś x i
naszą cross axis jest oś y czyli tutaj elementy są
układane od lewej do prawej ponieważ zwrot tej osi jest skierowany
w prawą stronę ekranu i tutaj oś cross axis
czyli oś y w tym momencie jest skierowana w dół moglibyśmy to zaobserwować
gdybyśmy ustawili na flex-wrap na wrap i
wtedy faktycznie widzimy że elementy kiedy nie mieszczą się już w szerokości
naszego z view portu to są przerzucone w dół wzdłuż osi
cross axis noa teraz co stanie się w
momencie kiedy zmienimy właściwość flex-direction z row
na właściwości flex-direction row-reverse oczywiście
wygląda to tak jakby elementy zostały numerowane od
największej do najmniejszej natomiast tak naprawdę elementy zostały po prostu
renderowane od prawej do lewej zobacz że zwrot osi main axis
jest skierowany w tym momencie ku lewej stronie ekranu a
sama oś cross axis nie uległa żadnej zmianie
co w przypadku kiedy ustawimy flex-direction na column zobacz
że w tym momencie nasza oś główna main axis zmieniła
się i nie jest to już oś x tylko jest to w tym momencie oś y
i tak samo analogicznie osią przeciwstawną osią cross axis
została oś x czyli w tym momencie jeżeli ustawimy
flex-wrap na wrap to elementy
w momencie nie będą się mieścić w wysokości viewport'u ponieważ
oś główna to w tym momencie oś y to
gdy będziemy zmniejszać rozmiar tego viewpor'u to zobacz
że więcej i więcej elementów będzie układane wzdłuż osi x
jeśli zmniejszymy to jeszcze troszkę to widzimy że flexbox ustawił
to już nam na 3 kolumny ponieważ ustawiliśmy flex-direction na column
natomiast jeśli wrócimy do wysokiego viewport'u to
elementy znów układają się w mniejszą ilość linii pozbędziemy
się tego flex-wrap jeszcze w tym momencie i zobaczymy jak wygląda
sytuacja z column-reverse i analogicznie
do sytuacji z flex-direction row elementy są układane w tym momencie wzdłuż
osi main axis i podążają zgodnie z kierunkiem danej
osi czyli innymi słowy flex-direction definiuje która z osi
x czy y jest osią main axis i na tej podstawie również
decyduje którą osią jest oś cross axis ponieważ
jeśli ustawiliśmy flex-direction column bądź column-reverse automatycznie
oś x stała się osią cross axis no jeśli wrócimy do sytuacji
z row to osią przeciwstawną
jest oś pionowa ponieważ main axis jest osią x w
takim razie możemy dojść do wniosku że ustawienie pierwszego członu wartości
flex-direction definiuje nam czy osią main axis będzie
oś pozioma czy oś pionowa
natomiast obecność sufiksu reverse bądź
jego brak definiuje kierunek głównej osi to znaczy domyślnie column ma
kierunek ustawiony z góry na dół natomiast jeśli ustawimy column-reverse
to kierunek jest odwrotny czyli z dołu do góry i analogicznie
dla row-reverse jest to od prawej do lewej czyli za
pomocą jednej właściwości i tylko czterech wartości którymi flex-direction
dysponuje możemy całkowicie zmienić sposób renderowania
naszej witryny przejdźmy więc w tym do flex-wrap
flex-wrap domyślnie
posiada wartość nowrap i dlatego w tym momencie elementy
kurczą się aby mogły się zmieścić w jednej linii flexa
dzieje się to też za sprawą właściwości flex-shrink o której
opowiem później następnych rozdziałach natomiast to że ustawiliśmy
nowrap nie pozwala flexowi ustawiać elementów
wzdłuż osi cross axis zwykłe ustawienie flex-wrap na
wartość wrap już umożliwia nam zawijanie się elementów do
następnego wiersza wzdłuż cross axis czyli jeżeli teraz zmienimy
sobie row-reverse na column no
to od razu zawijanie wierszy również zmienia kierunek ale
zauważ że używając flex-direction nie mamy pełnej kontroli nad osią cross
axis to znaczy oczywiście definiujemy która oś powinna
być osią główną a która osią przeciwstawną natomiast nie mamy kontroli nad kierunkiem
osi przeciwstawnej i analogicznie do wartości flex-direction flex-wrap
posiada właściwość wrap-reverse tak jak
właściwość flex-wrap ustawiona na wartość wrap umożliwia
zawijanie elementów do następnego wiersza tak flex-wrap reverse
robi dokładnie to samo tylko że jednocześnie odwraca kierunek
osi przeciwstawnej to znaczy elementy zaczynają
się renderować w tym momencie od prawej do lewej ponieważ naszą
osią main axis jest teraz oś y za sprawą flex-direction
column i gdy będziemy zmniejszać wysokość viewportu
to elementy będą zawijać się w lewo zamiast w prawo jak to wyglądało
w sytuacji gdy ustawiliśmy flex-wrap na wrap i
analogicznie w przypadku flex-direction row elementy są zawijane
domyślnie od góry do dołu natomiast wstawienie wartości wrap-reverse
odwraca ten proces i elementy są renderowane od
dołu do góry warto też zauważyć że operujemy
tylko w samym css'ie nie dotknęliśmy ani na chwilę naszego markup'u te
elementy dalej są w tej samej pozycji są numerowane za pomocą css
counters ale sam css zmienia sposób w którym
miejscu dany element będzie widoczny na stronie może prowadzić to
do różnych problemów z accessibility o tym na pewno jeszcze wspomnę w kolejnych
lekcjach z tego kursu natomiast to co musisz zapamiętać z tej konkretnej lekcji
to to że mamy dwie osie oś główną i
oś przeciwstawną flex-direction definiuje czy to oś x czy oś y powinna
być główną osią i automatycznie definiuje też która z tych osi jest
osią przeciwstawną za pomocą sufiksów reverse na
flex-direction możemy kontrolować kierunek osi
main axis a za pomocą sufiksu reverse na flex-wrap kontrolujemy
kierunek osi cross axis dobre zrozumienie tego
jak działają osie we flexboxie jest kluczem do tego aby korzystać z niego
w sposób efektywny dlatego polecam ci spędzić troszkę czasu nad
tym aby to dobrze zrozumieć i dopiero wtedy przejść do następnych lekcji kursu
ponieważ więcej i więcej właściwości powiązanych z flexboxem
będzie opierało się właśnie na tych dwóch osiach to
wszystko w tym momencie na temat osi we flexboxie natomiast w kolejnej lekcji dowiesz
się jak pozycjonować dzieci flexboxa względem
main axis bądź cross axis