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 kolejnym odcinku kursu flexbox
od podstaw w poprzednim odcinku przybliżyłem jak działają osie
we flexboxie to znaczy że mamy oś główną i oś przeciwstawną
i w zależności od tego jakie wartości nadamy na flex-direction i flex-wrap
to albo oś pionowa albo oś pozioma będzie
osią main axis i osią przeciwną do niej jest oś
cross axis i teraz jak mamy już to podstawowe pojęcie o osiach
możemy zacząć układać elementy wzdłuż nich na
elemencie który ma ustawione display flex możemy używać takiej właściwości jak justify-content
i justify-content przyjmuje domyślnie
wartość flex-start dlatego przełączanie
tej reguły nie wpływa zupełnie na renderowanie naszej witryny i
co znaczy to flex-start otórz domyślnie flex-direction jest
ustawione na wartość row dlatego osią główną osią main
axis jest w tym momencie oś pozioma i domyślnie
elementy układane są w kierunku prawym ponieważ nie mamy tutaj sufiksu
reverse na flex-direction i justify-content o
wartości flex-start mówi nam tyle że wszystkie
elementy wszystkie karty powinny zostać ustawione na
początku osi main axis to znaczy jeśli teraz
przełączymy flex-direction na row-reverse to
zobacz że elementy faktycznie układają się na początku osi main axis
ponieważ tu jest koniec tej osi ona zamierza w tym kierunku a
elementy układane są na jej początku czyli analogicznie jeśli
zmienimy wartość tej właściwości na flex-end to sytuacja
się odwróci w tym momencie jeśli na flex-direction row
ustawimy również justify content flex-end
to elementy będą układane na końcu osi main axis
jeśli odwrócimy kierunek osi z prawej na lewo to
elementy będą układały się od lewej do prawej ponieważ w tym momencie oś
skierowana jest w lewo jak to będzie wyglądało w przypadku column
i column-reverse otóż domyślnie jeśli ustawimy flex-direction
na column i ustawimy wartość domyślną justify-content na flex-start to
elementy układane są od góry do dołu ponieważ kierunek osi main axis
jest skierowany w dół jeśli zmienimy
to na flex-end to elementy będą
dociągnięte do końca osi to znaczy elementy dalej są numerowane od
góry do dołu natomiast w tym momencie są dociągnięte do końca
osi no i oczywiście jeśli odwrócimy flex-direction na
column-reverse no to w tym momencie elementy będą układane od
dołu do góry natomiast będą dociągnięte do końca tej
osi pionowej wróćmy do flex-direction row i zobaczmy
jakie jeszcze mamy możliwości przy justify-content otóż możemy
dociągnąć elementy do początku osi możemy je dociągnąć do
końca osi no i oczywiście możemy je też wycentrować i do tego służy wartość
center i w tym momencie elementy są wyśrodkowane
względem osi main axis i teraz jeśli faktycznie odwrócimy
sobie flex-direction na row-reverse to
zobacz że elementy są numerowane od prawej do lewej natomiast one dalej zostały
w tym samym miejscu w kontekście wizualnym ponieważ one są dociągnięte
do środka naszego viewport'u no i oczywiście to wycentrowanie w
tym momencie odbywa się wzdłuż osi poziomej ponieważ mamy ustawioną wartość
pochodną do row natomiast jeśli zmienimy to na column no
to elementy będą wycentrowane w pionie więc zauważ że we flexboxie nie
można patrzeć parę właściwość i wartość tych
właściwości w kontekście że justify-content wycentruje mi moje
elementy pionowo bądź poziomo to w jaki sposób właściwości
flexboxa będą się zachowywać zależy właśnie w dużej mierze od
flex-direction od flex-wrap i od innych właściwości które jeszcze poznamy w
kontekście justify-content mamy jeszcze trzy ciekawe właściwości
które przydają się codziennym tworzeniu stron internetowych pierwszą
o której opowiem jest space-between i działa
ona w ten sposób że przestrzeń która jest dostępna w danej
linii flexa jest rozdystrybuowana w ten sposób aby
elementy nie miał żadnego odstępu od krawędzi swojego kontenera
czyli to jest całe nasze cały nasz viewport jest
zajęty przez to body dlatego elementy są dociągnięte od lewej i od prawej
do krawędzi i dopiero później elementy układane
są wewnątrz tak aby miały między sobą równe odstępy natomiast
teraz co w sytuacji jeśli w którejś z linii flexa nie będzie dwóch elementów otwórz
flexbox wyrówna wtedy tą konkretną linię do lewej i dopiero
jeśli są przynajmniej dwa elementy to widać
to space-between w tej konkretnej linii jeśli zmienimy sobie tutaj flex-direction na
row-reverse to nie będzie widać tutaj za dużej różnicy ponieważ elementy tak czy siak są
ustawiane w ten sposób aby nadmiarowa przestrzeń była dystrybuowana
pomiędzy nimi i aby elementy były dociągnięte do krawędzi kontenera
w którym się znajdują natomiast jeśli zmienimy to na column
bądź column reverse to widzimy że elementy w tym momencie są układane wzdłuż
osi pionowej do góry i dołu w przeciwieństwie do sytuacji
flex-direction row ponieważ układamy elementy wzdłuż
osi pionowej tym razem analogicznie do space-between
mamy również space-around to znaczy że elementy będą
układane w ten sposób aby każde z dzieci flexboxa miało
równy odstęp między sobą i teraz zobacz powiedziałem
równy odstęp między sobą natomiast widać tutaj na pierwszy rzut oka że
odstęp pomiędzy jedynką a dwójką jest większy niż
między krawędzią kontenera a samą jedynką dzieje
się tak dlatego że ta jedynka ma tutaj odstęp
z lewej strony powiedzmy 20 pikseli z prawej strony odstęp 20 pikseli
i tak samo ta dwójka ma z lewej strony odstęp 20 pikseli
i z prawej strony odstęp 20 pikseli dlatego odstęp
między jedynką i dwójką jest większy niż między elementami które
są na krawędzi danej linii flexboxa i do tego space-around
nie gwarantuje nam równego odstępu między elementami
przynajmniej nie w kontekście wizualnym aby otrzymać
równe odstępy pomiędzy krawędziami kontenera i kartami
flexboxa możemy użyć właściwości space-evenly i w
tym momencie jeśli troszkę to rozszerzymy to zobacz
że w tym momencie te karty widać że mają równy odstęp i między
krawędziami kontenera i między sobą dla porównania możemy ustawić
równolegle space-around i space-evenly i teraz zobacz że w momencie
kiedy wyłączam space-around to elementy
wyglądają równo natomiast kiedy uruchomię space-around to elementy
mają więcej przestrzeni między sobą i to są tak naprawdę najważniejsze
właściwości powiązane z wyrównywaniem wzdłuż danej osi flexboxa
justify-content wyrównuje je tylko wzdłuż osi main axis
o tym jak ustawiać elementy wzdłuż osi cross axis
dowiesz się w następnym odcinku i
tak tylko w ramach powtórki justify-content przyjmuje jako wartość
domyślnie flex-start i tego nie musimy ustawiać to jest
domyślna wartość flexboxa natomiast my mamy jeszcze do dyspozycji właściwości
takie jak flex-end jak center jak
space-around jak space-between
oraz space-evenly
i zapamiętaj proszę że justify-content
nie wyrównuje elementów w poziomie bądź w pionie tylko wzdłuż
osi main axis a main axis ustawiamy za pomocą flex-direction
i dla wartości pochodnych od row jest to oś pozioma
a dla wartości pochodnych od column jest to oś pionowa
to wszystko w tej lekcji śmiało eksperymentuj z różnymi
właściwościami flexboxa tak długo aż będziesz czuć się z nimi komfortowo
i wtedy zapraszam cię do następnej lekcji