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ść witaj w kolejnej lekcji kursu o flexboxie po tym krótkim wprowadzeniu
które zrobiliśmy w poprzednich lekcjach możemy przejść do faktycznej pracy
z flexboxem jeszcze raz zobaczmy na ten markup na podstawie którego
będziemy poznawać właściwości flexboxa zobacz że bezpośrednio
w body mamy 6 kart 6 div'ów o klasie card każdy
z tych div'ów ma spana o klasie card number i tutaj każda
z tych kart ma swoją konkretną numerację natomiast
w markup'ie jej nie posiadamy ponieważ jest ona zrealizowana przez css counters więc
odpowiednikiem karty czerwonej będzie ten
oto div odpowiednikiem karty pomarańczowej będzie ten odpowiednikiem
trzeciej karty będzie następny i tak dalej i tak dalej to
bardzo ważne aby zauważyć że w naszym body mamy bezpośrednio
umieszczone właśnie te znaczniki kart ponieważ flexbox operuje bardzo
mocno na zależnościach rodzic-dziecko więc przejdźmy
do przykładu i zobaczymy o co konkretnie tutaj chodzi przechodzimy do nowo utworzonego
pliku flex kropka css i domyślnie jak widzisz te div'y
te karty są ustawione w taki sposób że każda z nich pomimo tego że ma określone
wymiary czyli swoją szerokość i wysokość to zajmuje
jednak całą linię ponieważ są to div'y są to elementy blokowe i tak domyślnie
zachowuje się div w przeglądarkach aby
zaaplikować flexboxa do tego przykładu i manipulować tymi sześcioma
kartami przy jego pomocy musielibyśmy na rodzicu
na rodzicu tych kart ustawić właściwość display flex no i
w tym wypadku rodzicami wszystkich tych kart jest znacznik body więc my po prostu
sobie tutaj stworzymy selektor na body i aktywujemy flexboxa za pomocą właściwości
display ustawionej na flex i zobacz że samo wpisanie display flex
zmieniło nam kompletnie layout tych kart widoczny po prawej stronie jeśli
wyłączymy chwilowo ten display flex no to oczywiście te karty wrócą do swojej normalnej wartości
i sama ta jedna właściwość całkowicie zmienia nam sposób
renderowania naszej strony to że te karty ułożyły się w ten sposób to znaczy
są ułożone jedna obok drugiej a w dodatku są
skurczone to znaczy mają mniejszą wartość swojej szerokości niż my to
wpisaliśmy w css poprzez właściwość width odpowiadają
za to poszczególne właściwości css które są
uruchamiane przez to że rodzic posiada właśnie
display flex a ich domyślne wartości definiują że wygląda to w ten sposób
i domyślnymi wartościami dla kontenera
jest na przykład flex-direction o którym będziemy mówili
dokładniej następnych lekcjach ustawiony na row czyli
zobacz że zmiana tej konkretnej reguły jej obecność
zupełnie nie wpływa na layout ponieważ to jest wartość domyślna tak samo
analogicznie wartością domyślną którą kontener otrzymuje jest
flex-wrap o wartości nowrap flex-direction
operuje na ustawieniu
kierunku w jakim elementy będą się domyślnie ustawiać
możemy na przykład wpisać tutaj column i zobacz teraz że przełączanie
tej właściwości zmienia faktycznie layout naszej strony właściwości
flex-wrap odpowiada za to że w momencie kiedy w kontenerze elementy
nie będą się już mieścić to ustawienie nowrap w sprawi że one będą się ściskać
aby zmieścić się w jednej linii w danym kontenerze jeżeli
zmienimy to na właściwość wrap to jak
widzisz te karty zostają rozstrzelone na dwie linie i
mają swoje naturalne rozmiary ustawione przez właściwość
width w css jeśli przełączymy teraz tą wartość to zobacz że widać że
wartością domyślną dla flex-wrap jest nowrap
trzecią właściwością której efekt już w tym momencie widzimy
a która jest automatycznie uruchamiana w momencie pozycjonowania na flexboxie jest
właściwość flex-shrink tylko że uwaga flex-shrink nie jest już ustawiony na
kontenerze flexboxa tylko na dzieciach na
każdym dziecku flexboxa to znaczy że my moglibyśmy
to zaadresować za pomocą selektora kart ponieważ wszystkie nasze karty posiadają
tą oto klasę i są bezpośrednimi dziećmi tego kontenera
body natomiast to co flexbox robi to nie
zwraca uwagi na to jakie mamy klasy ustawione na danych znacznikach tylko
można to uprościć do stwierdzenia że na znaczniku body który posiada właśnie
właściwość flex jest zrobione taki selector który nadaje
wszystkim bezpośrednim dzieciom wszystkim znacznikom właściwość
flex-shrink na 1 oczywiście takiego selektora w źródłach
nie będzie ale chciałem to jasno zobrazować wszystkie
te karty pojedynczo nie body nie rodzic mają właściwości flex-shrink
ustawione na 1 jest to automatycznie robione przez
flexboxa jeżeli zmienimy sobie teraz tą własność flex-shrink na 0
to zobacz że karty już się nie zwężają za to odpowiada właśnie flex-shrink
za kurczenie się kart w przypadku gdy nie
ma już na nie miejsca oczywiście każda z tych kart każdy znacznik kart
również mógłby posiadać właściwość display flex i wtedy pomimo tego
że byłby dzieckiem kontenera i byłby sam wypozycjonowany na flexie
ale również jego dzieci mogłyby
być pozycjonowane za pomocą flexa znając już takie konkretne podstawy
tego jak działa flexbox możemy przejść do następnych lekcji
i zacząć poznawać poszczególne jego właściwości