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 kolejnej lekcji z kursu flexbox od podstaw i przejdziemy
do faktycznego stylowania tego markup'u który przygotowaliśmy w poprzedniej
lekcji zacznijmy może od tego że stworzymy sobie nowy
plik zalinkujemy go od razu w
head'zie ustawimy mu href jako
nav css teraz
ten plik oczywiście musimy tutaj stworzyć i
w nav css będziemy teraz kodowali nasz przykład ja tylko sprawdzę czy site nav
to jest faktycznie odpowiednia nazwa tego pliku tak
to jak widzimy to jest cały nasz side nav on oczywiście będzie
mniejszy możemy w sumie od tego zacząć czyli przejdziemy sobie do
youtuba zobaczymy jaką on to ma wysokość jest to 56 pikseli
ustawimy wysokość na
56 pikseli no i przy okazji może już w tym momencie ustawimy
sobie box-sizing na border-box tak
aby model pudełkowy był troszkę łatwiejszy w obsłudze oczywiście
moglibyśmy to przenieść do odpowiedniego pliku później bądź użyć normalize bądź css
resets generalnie każda metoda jest dobra na ten moment zrobiłem
to w ten sposób i w razie potrzeby też będę ręcznie na pozostałych elementach
resetował style zobaczmy od razu jeszcze jaki tu
jest odstęp pomiędzy tymi elementami to jest 19 tu jest 19 zobaczmy
może faktycznie jeszcze jak to wygląda w przypadku tego selecta
wyszukiwarki jest to 13 na 13 to ustawimy
padding na 13 pikseli czyli
pierwszą rzeczą którą oczywiście trzeba zrobić jest włączenie flexa na naszym kontenerze site nav
diplay flex domyślnie oczywiście elementy będą układane poziomo
ponieważ main axis jest osią poziomą w tym momencie z racji
tego że flex direction jest ustawiony na row natomiast jak widzisz tutaj ta
lista nawigacyjna jest dalej pozycjonowana z góry od dołu ponieważ ona nie jest
flex container'em więc od razu też to zrobimy czyli na site nav
user actions zobaczmy
czy to to to chyba ten element display flex
okej i elementy są już ułożone poziomo super może
pozbądźmy się od razu tego list-style'a czyli ustawiamy
list-style-type na none no i w tym momencie już prawie nie wygląda to jak
lista nawigacyjna natomiast dalej nią jest to jest semantycznie bardziej poprawne testujemy
padding oraz margines no i elementy
są już praktycznie w jednej linii może przenieśmy jednak w domyślny
usuwanie marginesu i paddingu ze wszystkich elementów możemy
też usunąć domyślny border ustawiając go na none background
ustawimy na transparent szukajka
jest na środku natomiast lista z akcjami nawigacyjnymi pokroju
wiadomości aplikacje notyfikacje ona była dociągnięta do prawej więc
my zostaniemy przy justify content flex start
który jest ustawiony domyślnie na site-nav'ie natomiast na user actions ustawimy margin-left
na auto no i tak jak jeśli dobrze pamiętasz w lekcji
dziesiątej element przesunął się do przeciwnej
strony niż tej w której zdefiniowaliśmy margines na auto zobaczmy
co tam dalej się dzieje jak mówiliśmy przez
każdy możliwy breakpoint ta wyszukiwarka ma z lewej i prawej ten sam
margines mojego tutaj zunifikujemy do powiedzmy
55 pikseli więc wracamy tutaj i ustawiamy
na site nav search
wrapper czyli na tym elemencie margin
0 50 pikseli tutaj
ten ostatni element to był user avatar którego my jeszcze
tutaj nie stworzyliśmy za pomocą css'a więc może do tego przejdźmy zobaczmy
tylko jaki ten avatar jest duży 32 piksele na 32 piksele
więc ustawiamy site nav albo po prostu
is user avatar tylko że on jest
pusty więc się nam po prostu nawet nie może podświetlić więc ustawimy na nim
pseudo element after i żeby pseudo się
pokazał musimy ustawić jako content display powiedzmy na inline-block
określamy jego wysokość i szerokość to będą 32
piksele na 32 piksele
background ustawimy mu na szary okej
no i trzeba jeszcze go tylko zaokrąglić jakkolwiek ustawimy border-radius
na połowę wysokości szerokości czyli w tym momencie 16 pikseli
okej mamy css'owe kółeczko no i możemy
tak naprawdę wyrównać te elementy wewnątrz site nav user actions
ustawiając align-items na center
i może powiększymy te ikony żeby faktycznie wyglądały
tak jak te youtubowe kontener ma 24
piksele jako że to są iconic fonty no to niestety musimy
ustawić to poprzez font size on tutaj nam pokazuje że jest to 11 pikseli nie wiem
ile w tym jest prawdy tutaj youtube używa svg więc
ja to zrobię po prostu na oko natomiast my musimy używać font-size'a ponieważ
robiliśmy import font awesome z cdn i
tam nie ma nawet możliwości aby elementy były svg w naszym kodzie
źródłowym dodamy dodatkową klasę do każdej naszej ikonki
chociaż ta klasa już jest więc po prostu wykorzystamy klasę
fas czyli site-nav fas
będzie miał font-size ustawiony na 16 pikseli no
i te elementy już są w miarę podobne może jeszcze jej troszkę powiększe do
18 taki sam font-size ustawię
na site nav search input
i zdefiniujmy
odległości pomiędzy tymi elementami i
y czyli wchodzimy tutaj sprawdzamy jaka odległość jest między tym hamburgerem
a logiem youtube jest to 27 pikseli cali może
zostawimy tutaj 25 pikseli i pomiędzy nimi jest 30 tutaj
również 30 tutaj 33 w zależności
od ikonki to na pewno będzie miało różne wartości i tu jest jeszcze oczywiście padding
więc jeśli by się dało to
może faktycznie zrobimy taki sam padding jak jest tutaj ustawione zobaczmy
jaki tu jest padding okej
google używa custom
properties 8 pikseli wychodzi na każdym buttonie więc
możemy na naszym site nav fas ustawić
padding 8 pikseli
no i wtedy te elementy będą
mogły mieć troszkę mniejszy ten margines zobaczmy
jaki tu jest po prostu margines i go zaplikujemy wszędzie dalej margin-right 16
pikseli no zobaczmy co z tego będzie margin-right
16 pikseli okej
wygląda całkiem nieźle oczywiście ten element
search wrapper nam się już nie mieści w naszym viewporcie więc musimy go
faktycznie zacząć kodować czyli na search wrapperze ustawmy display
flex i
w tym momencie on już się mieści w nim natomiast sam nav bar
jest szerszy niż całe nasze body ustawmy
może max width albo po prostu width na
100 vw czyli viewport
width i
może na każdym bezpośrednim elemencie
wewnątrz site'nav'a ustawimy flex-shrink na zero
generalnie tego rodzaju selektory nie są najlepszą praktyką natomiast nie
chcę już dodawać dodatkowych klas w tym momencie w
naszym markup czyli
każdy element w tym momencie nie będzie się kurczył każdy element który jest
bezpośrednim dzieckiem naszego kontenera site-nav natomiast
my chcemy żeby site-nav search
input mi
się wydaje że już taką klasę napisałem gdzieś wyżej oczywiście
więc tą wyrzucę i napiszę to tam aha ale
to jest klasa połączona więc tak czy siak tworzę nową klasę i
tutaj ustawimy flex-shrink na 1
tylko tutaj będzie problem bo przez ten selector
podbijamy sobie specificity i ten selector nie w ogóle nie wchodzi do gry
więc możemy jako haka zescope'ować to jeszcze na
site-nav i w tym momencie ten element powinien się w
momencie kiedy będziemy kurczyć ekran to
powinien ten search bar również się kurczyć on się nie kurczy zobaczmy
dlaczego on flex-shrink ma już ustawione na pewno
za sprawą tego selektora który pisali podejrzewam
że po prostu ten
element może powiększmy sobie tutaj tylko trochę viewport ten
element który u nas nazywa się user actions on
ma stałą szerokość tutaj z 252 piksele poszerzymy to jeszcze troszkę
i tu dalej są 252 piksele
i myślę że też tak zrobimy w końcu odwzorowujemy
layout youtube więc user actions ustawimy
na sztywną szerokość powiedzmy width 250 pikseli i
będziemy mogli usunąć ten
margines który tutaj ustawiliśmy przynajmniej dla
tych elementów wewnątrz user actions
user actions
kropka fas i
tutaj margin-right ustawimy na 0 dobra i w tym
momencie już elementy nam się mieszczą na ekranie jak będziemy kurczyć viewport
to one dalej nam odjeżdżają ale możemy tutaj od razu justify-content
ustawić na space-between one będą się nam
układać wtedy w porządku może po prostu ustawmy
tego flex-shrink'a również na search wrapperze
dlatego tu nie mamy widocznie search wrapper tutaj ustawimy flex-shrink
na 1 tak naprawdę oprócz flex-shrink możemy również
ustawić flex-grow na 1 bo podejrzewam
że w momencie kiedy mamy większy viewport to ten
element powinien również rosnąć więc analogicznie ustawimy
flex-grow na 1 na
input czyli search input
to jest flex-shrink i flex-grow dobra w tym momencie już faktycznie
widać że ten search bar nam
się rozciąga ale niestety dalej
się nie kurczy dobra za chwilę do tego wrócimy na
ten moment może ostylujmy ten search input oraz
search trigger czyli znajdziemy sobie search
input ustawimy
mu border powiedzmy 2 piksele solid
ddd padding
mu ustawimy na 5 pikseli z
lewej i z prawej i analogiczny
kolor ustawimy na search trigger
nie ma takiego selektora jeszcze więc stworzymy ten selector site-nav
search trigger okej
możemy
usunąć border left żeby
nie było tutaj zduplikowanej tej krawędzi no i moglibyśmy
wyrównać ten element wewnątrz tego
button'a tutaj jest ten padding więc może usuńmy mu ten padding tylko
oczywiście musielibyśmy to zrobić na site-nav
search trigger fas
no i dlatego to jest też problem z tymi genetycznymi
selektorami o których wam powiedziałem wcześniej z gwiazdkami bo teraz
po prostu muszę faktycznie nadpisywać własne selektory
które napisałem dlatego metodologie css'owe są bardzo potrzebne
żeby po prostu wygodnie pracować z css'em
no i wyrównamy go za pomocą flexa display flex
justify-content center nie
zadziałało zobaczmy dlaczego ponieważ fas search ma również
margines więc tutaj zerujemy ten margines no
i może ustawmy żeby szerokość tego buttona to było 60 pikseli
zobaczymy jak to wygląda na youtubie okej
jest podobnie tylko tutaj jest jeszcze oczywiście jakiś hover style ale
sam button ma inny kolor nawet
w tym stanie początkowym więc tutaj ustawimy background
na jakąś pokrewną tego ddd powiedzmy
że troszkę jaśniejszą na
całym search wrapperze też pewnie powinniśmy ustawić
align-items na center albo
zostawić je tutaj na streczu bo faktycznie ona nam wyrównają te
dwa elementy a na samym przycisku
który ma zamykać na mobile naszą nawigację
search back site-nav
search back ustawimy
align-self na center okej i ona
jest teraz faktycznie po środku tego kontenera no a search bar jest
wystretchowany na całą wysokość wrappera tutaj
może jeszcze na site-nav'ie ustawmy align-items na
center to logo
youtube nie jest jeszcze równe zobaczmy dlaczego no
powiedzmy że wypozycjonujemy go również na flexie zobaczymy
jaka to była klasa site-nav
logo link z myślnikiem już się trzymajmy konwencji którą sobie wymyśliliśmy
i zrobimy
display flex no i to wystarczyło żeby to wyrównać no
i pozostał problem tego kurczenia się search bar'a
natomiast ten problem może rozwiążemy już w kolejnej
podlekcji tego kursu gdzie faktycznie będziemy dopisywać media queries
żeby ten nav bar mniej więcej zachowywał się tak jak ten youtubowy