3. diel - Responzívne menu
V minulej lekcii, Responzívny webdesign pomocou Media Queries v CSS3, sme sa naučili používať media queries a vysvetlili si, prečo ísť smerom k mobile-first prístupu.
Responzívne menu je v podstate najdôležitejší prvok našej stránky,
hneď po obsahu, pretože vďaka menu sa používateľ môže pohybovať po
vašej stránke Ak sa nám
rozsype menu, sme jednoducho nahraní a používateľ bude prinajlepšom
namrzený.
HTML skeleton
Vytvoríme si jednoduchú HTML stránku podľa kostry nižšie:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Responsive menu</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="description" content="Page description" /> <meta name="author" content="Author's name" /> <link rel="stylesheet" href="css/style.css" type="text/css"/> <!--[if lt IE 9]> <script src="js/vendor/html5shiv.js"></script> <![endif]--> </head> <body> ... code ... <script src="js/script.js"></script> </body> </html>
Idea
Najprv je dobré si určiť, ako má naše menu vyzerať, čo má vedieť a ako sa má správať. Naším cieľom bude vytvorenie klasického horizontálneho menu, ktoré sa bude dobre zobrazovať ako na desktopoch, tak aj na mobiloch či tabletoch. Využívať budeme responzívnu metódu mobile-first - ak neviete, o čo sa jedná, odporúčam sa pozrieť na článok o mobile-first, kde je všetko vysvetlené a sú uvedené jej výhody.
Technológie
Využívať budeme klasicky HTML a CSS, v ktorom urobíme v podstate celé menu. Menu nám musí fungovať bez Javascriptu, ktorý sa využíva iba ako doplnok, ktorý nám poskytne rôzne efekty a manipuláciu s menu.
Je teda dobré dbať na to, že JS (Javascript) by mal prichádzať na rad vždy ako posledný, pretože je to niečo navyše a nemusí byť všade prítomný či podporovaný.
Príprava HTML
Naše HTML bude vyzerať zhruba nejako takto. Využijeme element
<nav>
, ktorý bude obaľovať celé menu, zoznam (element
<ul>
), ktorý bude obsahovať jednotlivé položky (elementy
<li>
) a potom tiež odkazy (elementy <a>
),
ktoré budú obsahovať text položky a budeme s nimi môcť odkazovať na
webové stránky:
<nav class="menu"> <ul> <li><a href="#1">First</a></li> <li><a href="#2">Second</a></li> ... </ul> </nav>
V HTML budeme využívať sémantické HTML5 elementy - to sú tie elementy,
ktoré nie sú obyčajné ako napr. <div>
, ale majú nejaký
väčší význam. Stroj, respektíve napr. vyhľadávače, môžu postupovať
nejako takto:
<!-- browser: okay, this structure looks like it could be a navigation element? --> <div class="some-meaningless-class"><ul><li><a href="internal_link">...</div> <!-- browser: ah, the navigation element! --> <nav class="some-meaningless-class"><ul><li><a>...</nav>
Keďže budeme využívať spomínané HTML5 elementy, ktoré sa vo
všetkých obľúbených starších verziách IE nedajú zobraziť (keďže IE8
a staršie vykresľujú len elementy, ktoré poznajú), budeme potrebovať
nejaký menší trik, ako na to. Využijeme html5shiv, kde si stiahneme
súbor html5shiv-printshiv.js
(v priečinku src/
) a
importujeme si ho tak, ako je ukázané na kóde nižšie a to do hlavičky
webu. HTML5 elementy by sa nám potom mali vykresľovať správne:
<!--[if lt IE 9]>
<script src="js/html5shiv-printshiv.js"></script>
<![endif]-->
Mobilná verzia
Vytvoríme si teda menu s 5 položkami. Vyplníme ho časťami Lorem ipsum textu - v praxi sa potom obvykle využívajú napr. položky ako domov, kontakt, referencie, o mne atď.:
<nav class="menu"> <ul> <li><a href="#1">Lorem</a></li> <li><a href="#2">Accusantium</a></li> <li><a href="#3">Adipisci</a></li> <li><a href="#4">Aut</a></li> <li><a href="#5">Eos</a></li> </ul> </nav>
Spustíme webovú stránku a uvidíme niečo podobné ako na nasledujúcom obrázku:

Defaultný zoznam, ktorý budeme chcieť pretvoriť na nádherné responzívne menu.
Navigácia
Predchádzajúci vzhľad menu pre väčšinu z vás nebude určite stačiť,
a preto si napíšeme nejaké štýly Ako prvé si naštýlujeme element
nav.menu
, ktorý obsahuje celé menu:
nav.menu { display: block; width: 100%; background: blue; }

Menu sme zafarbili a nechali automaticky nastavovať výšku.
Ako ste si určite všimli, na kraji obrazovky je medzera. Tá je spôsobená
defaultným nastavením body, čo na naše účely ukážky responzívneho menu
ničomu nebráni. Ak chcete medzeru odstrániť, vynulujte
padding
a margin
na
body
Všimnite si tiež, že nenastavujeme výšku menu. To z toho dôvodu, že chceme mať vždy celý zoznam zabalený nezávisle od jeho výšky.
Zoznam
Potrebujeme upraviť zoznam, ktorý je sám o sebe pre menu nevyhovujúci -
odstránime teda odrážky, margin
a padding
a
položky nastavíme na 100 %
šírku - tá by mala byť síce
štandardne nastavená, ale istota je istota:
nav.menu ul { list-style-type: none; margin: 0; padding: 0; } nav.menu ul li { width: 100%; }
V ďalšom kroku upravíme odkazy, ktorým dáme biele
písmo, odstránime podčiarknutie a rovno nastavíme
font na sans-serif
:
nav.menu a { display: block; color: white; text-decoration: none; font-family: sans-serif; }
Teraz si trochu naštýlujeme jednotlivé položky a odkazy tak, aby mali
nejaký pekný dizajn. Nastavíme výšku riadku napr. na
2em
a padding
. Pri hover
si nastavíme
stmavenie pozadia, čo docielime pomocou čiernej farby v rgba
s
priehľadnosťou 0.1
, teda 10 %. Volím použitie
rgba
, či obdobných metód práve preto, že nie sme závislí na
farbe, ale len stmavujeme. Ak by sme napr. zvolili farbu červenú, farba hoveru
sa nám prispôsobí:
nav.menu a { line-height: 2em; padding: 0 15px; } nav.menu a:hover { background: rgba(0, 0, 0, 0.1); }
Výsledok v prehliadači:

Aktuálne menu s hoverom na druhej položke.
Máme teda hotové menu pre mobily a menu sa vie flexibilne zobrazovať.
Samozrejme by sa nám hodilo pre mobilné verzie nejaké tlačidlo, ktorým by
sme menu zobrazili, ale nezabúdajte - vždy musíme urobiť všetko v
HTML a CSS tak, aby to fungovalo, a až potom sa môžeme hrať so
skrývaním, či inými JS efektmi
Také menu je síce super, ale my by sme skôr potrebovali vedieť, ako na tie desktopové verzie. To si ale ukážeme až nabudúce.
V ďalšej lekcii, Dokončenie responzívneho menu, si vytvoríme jednoduché responzívne menu
metódou mobile-first pre desktopy a tablety s využitím
@media
.
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é 6x (6.87 kB)
Aplikácia je vrátane zdrojových kódov v jazyku HTML a CSS