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
będzie to już ostatnia lekcja gdzie będziemy
zajmowali się faktycznie headerem i po prostu dopracujemy ten
kod troszkę żeby wyglądał zarówno lepiej wizualnie
jaki był bardziej poprawny semantycznie bądź funkcjonalnie
więc pierwszą rzeczą którą zrobimy w tym momencie jest ostylowanie tego search'a
czyli robimy channel header
search i
ustawimy mu display na flex i align
items na center jeśli
dobrze trafiłem z klasą jest okej tylko on z jakiegoś powodu nie ma search
każdy etap powinien
być acha bo on nie ma tej samej wysokości co pozostałe elementy
gdybyśmy chcieli wykorzystać tutaj funkcjonalność flexa mianowicie
stretch'a align-items stretch żeby faktycznie ten te
elementy się z tym wyrównały do jednej linii no to tutaj struktura
ul li nam troszkę to utrudnia ponieważ każdy li jest
osobnym flex item'em i tak naprawdę elementy wewnątrz
tego flex item'u nie wiedzą jaką wysokość mają elementy wewnątrz
innego flex item'a to moglibyśmy rozwiązać na przykład sassem
ustawiając zmienną która będzie aplikowana do obu tych elementów albo
spłaszczyć tą strukturę natomiast tego nie polecam robić bo semantyka po prostu
na tym straci więc my na sztywno dodamy
w tym momencie odpowiednią wysokość ustawiliśmy że powinno
być 50 pikseli z tego co pamiętam ustalmy
jeszcze konkretny rozmiar tej lupy 24 piksele kolor
taki jaki ustaliliśmy na innych elementach ponownie moglibyśmy
tutaj reużyć tego kodu powyżej font
size 24 piksele bardzo duża się ta
lupa zrobiła aż się zastanawiam czy to jest faktycznie ten font-size jest taki chcemy
ustawić nie font jest 11 24 jest cały kontener
więc 11 pikseli wstawiamy no
już tak dofiksujmy to ręcznie na 15 pikseli kolor
jest ustawiony okej więc teraz musimy faktycznie ukryć
te elementy które nie są nam w tym momencie potrzebne czyli wszystko co wychodzi poza
ten channel header tabs możemy ukryć więc bierzemy
channel header tabs znaleźliśmy ustalamy
overflow hidden i w tym momencie już tych
elementów nie widać moglibyśmy tutaj a nawet powinniśmy zrobić overflow
scroll tylko że w tym momencie będziemy mieć tutaj tego
scrollbar'a którego musielibyśmy w jakiś sposób ukryć da się to też zrobić css'em
korzystając z odpowiedniego wrappera i przycinając po prostu ten wrapper ten
scrollbar co też jest ux'owo nie do końca dobre ponieważ
użytkownik nie do końca musi być pewien że ta sekcja jest scrollowalna
natomiast na potrzeby przykładu robimy tutaj overflow hidden jeśli
byśmy chcieli to musimy oczywiście pozycję tego elementu jego
scroll left w tym momencie ustawić na odpowiednią w momencie kliknięcia któregoś
przycisku na makiecie domyślnie
previous button jest ukryty więc dałem mu display
na none okej coś
tu jest nie tak prawdopodobnie specificity działa w ten sposób
że ten element nie jest tutaj nie
aplikuje mu się ten display więc przenieśmy to może na koniec zobaczymy
co to się stało display none nie
działa opacity zero działa jaki ten
element ma computed style zobaczmy href
to jest ten element cały button więc computed display
display ma block'a zobaczmy czy on ma blocka
display inline-block z all
css czyli font awesome chyba
coś tutaj nam psuje no
nic możemy zrobić dwie rzeczy możemy
podbić to specificity jeśli to zadziała nie zadziała
albo dodać tutaj important i wtedy ten element na pewno
zniknie to nie jest dobra praktyka natomiast nie chcę już też tego przedłużać zwłaszcza
że ten element i tak będzie pokazywany i chowany przez javascript
więc na odpowiedniej klasie można stworzyć odpowiednio mocny selektor
który te font awesome'owe style domyślne no
ale w tym momencie możemy to tak zostawić i ten heading wygląda już całkiem
okej no na pewno nie jest to jeden do jednego youtube
trochę mu pewnie brakuje jeszcze
tylko czy znajdziemy jakieś acha no oczywiście jeszcze musimy zrobić tutaj rwd
czyli z tego co pamiętam na około 700
pikseli to ten avatar nam znika i widzę
że te elementy mają tutaj jakąś dodatkową przestrzeń
na czym to jest zrobione no dobra załóżmy że
wyrównamy to do końca tej linii ja też widzę
że chyba jak to zmniejszymy jeszcze bardziej no to
tutaj ta główna też ma ten odstęp z zachowaniem strzałki
co nie wiem czy ma sens bo ten element mógłby być spokojnie dociągnięty do tego do
tej krawędzi no po prostu zrobimy że że na
mobilce ten avatar będzie znikał i font-size też
w sumie mógłby się troszkę zmienić no zmniejszymy też font-size więc
teraz tak tworzymy sobie media query
media min max
width powiedzmy 700 pikseli
channel
header avatar ustawiamy na display
none zobaczmy nie ma naszego avatara
elementy są dociągnięte padding
moglibyśmy troszkę zmienić i to zrobimy channel header
details zrobimy na padding
0 80 pikseli tutaj
było 16 pikseli to zostaniemy przy tych 16 pikselach od
dołu 0 i tak samo dla channel header
nav no i pozostaje nam zmniejszyć
channel header name font size
na adekwatny taki jak nam tutaj youtube podpowiada czyli 18
pikseli nie wiem jakie tam było wcześniej chyba 24 18 pikseli
font-weight zostawimy taki sam i tutaj 14
pikseli na subskrypcjach
ale to jest takie samo więc zostawimy tylko na channel header name
mniejsze font-size i w tym momencie rozszerzając
ten heading
faktycznie nam się zwija no i widać że też te elementy które tutaj
są domyślnie widoczne to na mniejszych rozdzielczościach znikają
tam chociaż ten element nie jest wypozycjonowany
poprawnie bo tutaj ustawiłem
temu nav 16 pikseli
paddingu z góry to może z tego zrezygnujemy zrobimy dwa osobne selektory
i dla nav'a ustawimy po prostu padding
0 80 pikseli no
i teraz ten element jest faktycznie równy po kliknięciu mamy animacje
kółeczka no
i na desktopie jest normalny pełny
widok youtuba tutaj jest dużo rzeczy które można jeszcze zrobić oczywiście poza
jakimiś dodatkowymi tranzycjamidycjami animacjami tutaj jest jeszcze na youtubie
efekt paralaksy czyli i zobacz
że ten hero section zwija się w taki konkretny sposób
jakby heading szedł do góry a obrazek
do dołu no oczywiście u nas tego efektu nie ma tak
naprawdę nawet nie możemy w tym momencie przescrollować w dół ponieważ nie mamy treści żadnej
na naszej stronie więc tak strona nie jest scrollowalna natomiast
to zostawiam też do dalszej zabawy tobie
jeśli będziesz chciał bądź chciała poćwiczyć css'a
i flexa oczywiście