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ę kolejnej lekcji z kursu flexbox od podstaw i
dalej kodujemy nasz layout który jest kopią youtube tutaj
może zanim przejdziemy do stylowania tej części naszego headera
poprawmy ten avatar to znaczy na
avatarze ustawmy odpowiednie rozmiary jeszcze nie wiem jakie to są
rozmiary zobaczmy 80 na 80 my tutaj mamy po prostu 100 na 100 więc
robimy width 80
pikseli height 80 pikseli bardzo
by nam się tutaj przydał sass do różnych automatyzacji
czy robienia zmiennych aby wartości były ze sobą powiązane natomiast
na potrzeby tego kursu robimy to w czystym
css no i ustawimy tutaj na
details samych znajdźmy ten selektor padding
top ustawiamy tutaj na
tutaj jest 16 pikseli okej
więc powiedzmy że mamy w jakimś stopniu tą część
z informacjami o kanale skończoną no i
przejdziemy do faktycznego stylowania tego menu nawigacyjnego czyli
channel header nav robimy margin
0 padding 0 albo
od razu padding sto pikseli tak jak wcześniej ustalaliśmy czyli tutaj
zero tutaj 100 no i list-style-type
none okej to tutaj nie
działa bo musimy to ustawić na faktycznej liście a tu jest cały kontener
czyli channel header tabs tutaj
ustawiamy list-style-type none i tutaj też chcemy ustawić
ten margin i padding tutaj padding
w sumie na zero a tutaj padding mam
już ustawiony na 100 wcześniej dla
każdego taba tym razem ustawimy
kolor na powiedzmy na razie na czarny już to zaraz naprawiamy żeby on
się tylko nam pokazał nie pokazał się a to dlatego bo
link ma faktyczny kolor jeszcze osobny
ustawiony no i moglibyśmy już w sumie tak naprawdę
tutaj ustawić tego fleksa czyli display flex i
zobaczymy co tutaj dalej trzeba zrobić no oczywiście musimy ustawić jakąś jakieś
rozmiary dla tych elementów więc ustawmy tutaj jest
to padding 32 pikseli z lewej i z prawej na
każdym tab'ie czyli albo
w sumie od razu na każdym linku padding 0 32 piksele
wysokość te linki mają 47 i kolor
też 60 60 60 czyli kolor 606060
tego usuwamy height
ustawiamy na 47 pikseli no i tutaj ta szerokość
to była całego elementu to
było około 107 to jest oczywiście dostosowane do rozmiaru
tekstu ale to ustawmy jeszcze chociaż font-size na
te 14 pikseli i też text-transform uppercase
zobaczmy jak to wygląda dobra
jest już na pewno podobniej font-weight'a też zwiększymy oczywiście
moglibyśmy to style jakoś lepiej wydzielić żeby nie musieć tego pisać
kilkukrotnie bo widać że te style się powtarzają może dodamy na jednym
elemencie na jednym tab'ie klasę
channel header link active
moglibyśmy zrobić klasę is active powiedzmy że zostaniemy przy tym i
teraz jeśli dany element ma taką klasę no to stworzymy mu border-bottom
odpowiedni zobaczymy ile on
tutaj może mieć tego bordera 3 piksele
a kolor
w
computed border-bottom
color rgba no
weźmy jakieś tam po prostu jakąś pochodną tego czarnego rgba
101010 i tutaj
na 0 a zobaczmy okej
element jest ale on tego bordera jakby nie ma a
no tak bo musi być jedynka nie 0 bo 0 to jest przezroczyste dobra
i zobaczmy teraz jak duże są te elementy więc header
ma jakąś tam określoną wysokość tutaj są te buttony wydaje
mi się że to jest za małe 47
pikseli niby nie mamy tu żadnego
zoom'a ostatnio może background tutaj jakiś na razie
na malutkie to jest acha bo linki mają
domyślnie oczywiście display inline no i musimy zmienić im display
inline-block jeśli chcemy im nadać jakąś
konkretną wysokość natomiast my możemy nawet tutaj zrobić
display flex po prostu i
ustawić align-items na center no w tym
momencie te linki faktycznie będą zajmowały
taki obszar no i będziemy mogli im ustawić wysokość więc jest
tutaj wskaźnik że możemy kliknąć dane
elementy widzimy że tam channel już nam odjechał może
ustawmy to jednak na jakimś wcześniejszym elemencie
byśmy to po prostu widzieli dobra
no
i tutaj już nam wychodzą treści poza ten element co jest czego
moglibyśmy się spodziewać skoro youtube też tutaj zaimplementował
te strzałki więc
co my zrobimy to wykorzystamy sobie te buttony czyli channel header
button jeśli
dobrze pamiętam nazwę slide
button button okej slide baton te elementy są
tu background red dalej
go nie widzę dobra ustawmy po prostu wysokość i szerokość możliwe
że przez to że nie mają treści ale treść powinny mieć bo chyba
ustalaliśmy im a a nie ustalaliśmy im
ikonek faktycznych no dobrze to oczywiście to ma sens ustawimy tutaj jeszcze
fas chevron left jeśli
dobrze pamiętam nazwę fas spacja
fa chevron left i tutaj jest ten malutki
chevron tylko że to jest element
następny więc tutaj zrobimy chevron right i
tutaj chevron left
okej no i teraz możemy wrócić tutaj
anulować te kolorowanie wstawić
odpowiedni rozmiar tych przycisków bo to też jest istotne oraz to żeby one
były tak naprawdę zaokrąglone one mają 14 pixeli
font-size tak font-size 14
pikseli kolor 60 60 60 teraz
jak tu wracamy to okej no i
zrobimy im oczywiście border-radius 50%
i te elementy powinny być wypozycjonowanie tutaj no i w momencie przy krawędzi od
strony prawej być nad tą listą która
dalej tam się będzie ciągnąć ale będzie już ukryta czyli musimy
im ustawić pozycjonowanie absolutne tylko względem czego zobaczmy
względem czego możemy je ustawić prawdopodobnie w prawdopodobnie
względem channel header nav czyli channel header nav nie
ma pojedynczej tutaj klasy to ustawimy mu tylko na nim position
relative no i na buttonie ustawiłem
position absolute już
ten przycisk tutaj się nam pokazał ustawiłem mu background
i z-index na jedynkę żeby faktycznie był warstwę wyżej niż
ta lista nawigacyjna może zmieńmy rozmiary
tej strzałki żeby faktycznie pasowała 48 na 48
no byłem blisko 48 na 48 tutaj
pewnie jest powiązane z tą wartością zróbmy tutaj że to będzie 50 pikseli to będzie 48
też mogłoby być 50 ale zostaniemy przy tym okej
i ustawimy kolor jednak nie na biały tylko
na taki jak ma ustawiony ten
nav przepraszam cały header czyli fafafa
jest
fafafa no i teraz musimy tylko sprawić żeby
oba te elementy były wypozycjonowane od góry do swojego rodzica
czyli pojedynczo na każdym elemencie ustawimy
tutaj prev będzie pozycjonowany one
oba mają być wypozycjonowane od góry przy zerze więc teraz ten
nam zniknął który kierował w lewo natomiast
on się po prostu znajduje pod tym po prawej czy jeśli
następny przeniesiemy
na 0 od prawej strony a
poprzedni na lewo to
mamy już tą nawigację zrobioną tylko nie jestem pewien czy ona
powinna być wypozycjonowana trochę mniej niż ten padding ciężko
mi tutaj oszacować jak bardzo podejrzewam że po prostu 100
minus 100 z tego paddingu który
ustawialiśmy tam wcześniej czyli tej odległości czyli 100 pikseli
minus faktyczny rozmiar tej strzałki czyli 48
no i zobaczymy no
jest mniej więcej tak jak w tym design'ie no i oczywiście powiedzmy
że na youtubie nie widać tego na hoverze nie ma jakichś
styli my możemy na active zrobić po prostu ten
kolor szary czyli na obu
channel button active
ustawiony background na 60 60 60 i
możemy jeszcze ustawić transition na background
0.3 sekundy
liniowo no i teraz w momencie gdy będziemy klikać ten element
to to nam się troszkę zbyt ściemni a
może jakieś eee albo ddd
nawet no i teraz mamy ddd może
zrobimy tutaj na jedną sekundę żeby to było bardziej widoczne no
i ten element jeszcze nie jest wycentrowany
konkretnie względem tego koła
jak widać to nie jest do końca na środku chociaż pewnie pod
z punktu widzenia css jest ustawmy dla pewności display
flex justify-content na center
i
zobaczymy no niestety nie jest to równe to jest złudzenie optyczne ponieważ
z punktu widzenia matematycznego w css ten element jest na środku
tylko z racji tego że ta strzałka kieruje w lewo to ona powinna być
troszkę przesunięta w tą stronę żeby się wizualnie wydawała wycentrowana
my to zostawimy w ten sposób no i w tym momencie pozostaje
nam tylko może jeszcze zrobić tą lupę i przyciąć elementy
za pomocą overflow hidden nie
będziemy robić różne inne mniejsze szlify w kolejnej części tego
kursu jeszcze poświęconemu header'owi aby go trochę dopracować
do pracy