4. diel - Dokončenie responzívneho menu
V minulej lekcii, Responzívne menu, sme si vytvorili jednoduché responzívne menu metódou mobile-first. Povedali sme si, na čo si dávať pozor a akým spôsobom zaistiť čo najlepší chod.
Ako vytvoriť web pre telefóny, tablety a desktopy? Je to úplne jednoduché a poslúžia nám na to media queries.
Media queries
Media queries nám zaistia spustenie špecifických štýlov pre určité šírky zariadenia.
Na naše účely budeme odchytávať šírku s hranicou 600px
.
Príslušný kód budeme písať do @media
bloku, ktorý pre nás
vyzerá nasledovne:
@media (min-width: 600px) { /* ... code ... */ }
Takže premýšľajme, čo všetko budeme musieť upraviť. Pravdepodobne
budeme chcieť mať položky pekne vedľa seba a najlepšie
ešte vycentrované. Budeme tiež chcieť vylepšiť
:hover
efekt, pri ktorom môžeme napr. pridať nejaký
dolný rámček, ale to nie je otázka rozloženia.
Aby sme jasne rozpoznali, že sme vo verzii tabletu/desktopu, zmeníme farbu na zelenú. Súčasne si tiež nastavíme farbu položiek na červenú:
@media (min-width: 600px) { nav.menu { background: #5cba40; } nav.menu ul li { width: auto; background: red; display: inline-block; } }
Na obrázku nižšie vidíme, ako aktuálne menu vyzerá:

Prečo sú tam tie medzery? Medzery sa nám môžu pridať medzi položky, pretože formátovaním nášho HTML vznikla jedna medzera. V HTML je možné urobiť medzeru odsadzovaním, entermi atď., viac v HTML klasicky neurobíte. Medzera má šírku podľa veľkosti fontu.
Globálne v celom menu nav.menu
mimo blok
@media
vynulujeme veľkosť fontu a medzery sa nám robiť nebudú.
Nesmieme zabudnúť pridať veľkosť fontu 16px
na
nav.menu a
, taktiež mimo blok
@media
:
/* code outside of the @media block */ nav.menu { font-size: 0; } nav.menu a { font-size: 16px; }
Ladíme desktop verziu
Na desktopoch obvykle požadujeme nejaké väčšie výšky menu, napr.
50px
. Nastavme teda výšku riadku na odkazy, teraz už zase
všetko do bloku @media
:
nav.menu a { line-height: 50px; }
Menu budeme chcieť vycentrovať. To je obvykle dosť zložité a
pracné, ale v našom prípade môžeme využiť centrovanie pomocou
vlastnosti text-align
na zozname. Uistite sa, že máte šírku
zoznamu nav.menu ul
na 100%
:
nav.menu ul { width: 100%; text-align: center; }
Naše červené pozadie položiek už potrebovať nebudeme, takže riadok môžeme zmazať (alebo zakomentovať):
/* code in the @media block */ nav.menu ul li { width: auto; /* background: red; */ display: inline-block; }
Podčiarknutie
Ako ďalšie vylepšenie sme chceli "podčiarknutie" položky pri nabehnutí
myšou (:hover
). Na to, aby sme nemuseli meniť štruktúru,
nastavovať väčšiu veľkosť zoznamu ako položiek a podobné nezmysly,
môžeme využiť pseudoelement ::after
, ktorý
vhodne naštýlujeme. Tento pseudoelement budeme chcieť zobraziť
len pri hoveri na odkaz:
nav.menu a:hover::after { /* ... styles ... */ }
Aby sa nám vôbec niečo zobrazilo, musíme najprv nastaviť vlastnosť
content
. Následne chceme pseudoelement štýlovať a meniť jeho
rozmery. Nastavíme vlastnosť display
a hodnotu
block
, šírku na 100%
a
výšku na 3px
. Farbu nastavíme ako pri pozadí
na 15%
priehľadnú čiernu. Pozor, tu budeme mať
15%
čiernu na 10%
čiernej, čo nám urobí farbu
tmavšou. Následne nastavíme pozíciu bottom
a left
na 0
a využívať budeme absolútne
pozíciovanie, aby sme nepridávali ďalšie miesto (resp. nezvyšovali
menu):
nav.menu a:hover::after { content: ""; display: block; width: 100%; height: 3px; background: rgba(0, 0, 0, 0.15); bottom: 0; left: 0; position: absolute; }
Keďže je u nav.menu a:hover::after
nastavená
position: absolute
, musí sa niekde stanoviť "zarážka", čo sa
vykoná práve nastavením position: relative
na niektorý z
rodičovských prvkov (defaultne sa zastavuje až na
<body>
).
A pretože nám ::after
pridá spodnú linku tlačidla, chceme
túto "zarážku" mať relatívne k tlačidlu:
nav.menu a { line-height: 50px; position: relative; }
A takto by teda mal vyzerať náš výsledok:

Naše výsledné menu s hover efektom na druhej položke.
Menu je responzívne, využívame metódu
mobile-first
, v ktorej napíšeme menej kódu a celkovo je taká
prehľadnejšia. Myslím, že výsledné menu vyzerá celkom dobre a nemusel by
sa za neho nikto hanbiť
Čo ďalej?
Ďalšími pomerne jednoduchými krokmi môžeme menu vylepšiť tak, aby sa
zobrazovalo vo viacerých variantoch. Teda pridať viac @media
blokov, ktoré ale bude vhodné ohraničiť z oboch strán
(max-width
aj min-width
). Môžeme tiež nastaviť,
aby sa na malých zariadeniach zobrazovala ikonka na otvorenie/zatvorenie, to
už je JavaScript.
Záver
Dúfam, že ste pochopili princípy tvorby responzívneho menu. Majte ale
stále na pamäti, že je veľmi dôležité, aby sa menu spustilo
vždy v HTML a CSS bez problémov. Až potom riešte nejaké
JavaScripty
Ak stránku spustíte v starých prehliadačoch IE, zobrazí sa nám menu
tak, ako sme si ho naštýlovali v predchádzajúcom článku. Čo je super,
pretože sa nám rozloženie nerozpadne
V budúcej lekcii, Responzívne obrázky - Resolution switching a Art redirection, si ukážeme niekoľko spôsobov, ako prispôsobiť obrázky na našom webe.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 9x (7.13 kB)
Aplikácia je vrátane zdrojových kódov v jazyku HTML a CSS