Zmenšování headeru při scrollování — kdy a jak
Technika, kterou používají velké e-shopy. Ušetří místo na obrazovce a vypadá pro…
Na malých obrazovkách potřebujete jiný přístup. Jak udělat menu, které se chová inteligentně na všech zařízeních bez kompromisů.
Senior Frontend Architect
Frontend architect s 14 lety zkušeností v designu responzivních navigačních systémů pro české firmy a globální projekty.
Hamburger menu není věda. Jenže na mobilu se musí chovat úplně jinak než na desktopu, a víc vám možností není. To znamená, že musíte být opatrní. Menu se nesmí otevřít přes obsah, který čte. Ikonka musí být vidět i když scrolluje. A vůbec — co se stane, když uživatel menu otevře a pak změní orientaci telefonu? Detaily rozhodují.
Sem patří i přemýšlení o tom, jak rychle se menu otevírá a zavírá. Uživatel čeká něco konkrétního — nechce čekat na animaci. Je to interakce, která musí být okamžitá. Tady se přesuneme k věcem, které opravdu fungují v praxi.
První věc — hamburger ikonka by měla být vždycky vidět. Na telefonech se to znamená, že stojí v headeru, který se neposunuje mimo obrazovku. Když uživatel scrolluje dolů, header zmizí (pokud chcete úsporu místa), ale menu se musí vrátit, když scrolluje nahoru. To je ten „reveal-on-scroll” pattern, kterým se zabýváme zvlášť.
Na šířce do 768 pixelů by mělo být menu vždycky hamburger. Nemusíte mít tři verze — mobilní, tablet, desktop. Vyzkoušíme přístup, kde menu od 768 pixelů začne být horizontální a hamburger zmizí. Jednodušší na údržbu, a funguje to.
Klíčové rozhodnutí: Pod 768 pixelů = hamburger. Nad 768 pixelů = horizontální menu. Žádné „medium” verze. Tím si zjednodušíte JavaScript i CSS.
Máte dvě možnosti: menu se buď otevře jako vrstva přes obsah (overlay), nebo se stránka posune a menu si vezme místo (push-out). Overlay je lepší volba pro mobil. Uživatel vidí, co má v menu, obsah za ním zesivá, a když menu zavře, vrátí se tam, kde byl. To je zkušenost, kterou znají z ostatních aplikací.
Push-out menu je složitější na implementaci a na dotykových zařízeních se chová divně. Když uživatel scrolluje v menu a menu se pohybuje, celá stránka se pohybuje s ním. To vede k chybám v layoutu a frustraci. Stick s overlay — je to vyzkoušené řešení.
Prakticky: Overlay menu se otevírá s transform: translateX(0) a zavírá se s transform: translateX(-100%). Žádné scrollování stránky, čisté chování.
Když je menu otevřené, obsah za ním by neměl scrollovat. To se zdá zřejmé, ale víc lidí na tom selhává. Uživatel otevře menu, a pak v něm scrolluje. Při tom se náhodou posunuje i obsah na pozadí. Je to matoucí. Řešení je jednoduché: když se menu otevře, přidejte `overflow: hidden` na `body` nebo `html` element.
A když menu zavřete, overflow se vrátí na `auto`. Tím zajistíte, že se obsah nepohybuje. Je to věc jedné řádky CSS, ale dělá obrovský rozdíl v tom, jak se web chová. Uživatelé si ani neuvědomí, že jste to udělali — to je znamení dobrého designu.
Při implementaci hamburger menu pamatujte na uživatele, kteří se na web dostávají přes klávesnici nebo čtečku obrazovky. Menu musí být ovladatelné šipkami, tab klávesou se musí dostat na všechny položky, a když je menu zavřené, mělo by být skryté i pro asistivní technologie. Atribut `aria-hidden=”true”` vám s tím pomůže. Nejde jen o to, aby web fungoval — jde o to, aby ho používat mohli všichni.
Pod touto šířkou vždycky hamburger. Nad touto šířkou horizontální menu. Jednoduché, účinné, bez výjimek.
Menu se otevírá jako vrstva. Uživatel vidí menu, obsah se zatmavý, a když menu zavře, vrátí se na stejné místo.
Když je menu otevřené, obsah za ním by neměl scrollovat. `overflow: hidden` na body řeší problém.
Menu musí být ovladatelné bez myši a viditelné pro čtečky obrazovky. Atributy `aria-hidden`, `aria-expanded` a pořádné focus stavy jsou povinné.
Hamburger menu na mobilu a tabletu není věda, ale vyžaduje si péči. Když se o něj postaráte pořádně — když ho otestujete na různých zařízeních, různých orientacích a s různými způsoby interakce — výsledek je uživatel, který se naviguje přirozeně. To je cíl.
Technika, kterou používají velké e-shopy. Ušetří místo na obrazovce a vypadá pro…
Návštěvník scrolluje dolů — navigace zmizí. Scrolluje nahoru — vrátí se. Elegant…
Nejčastější chyba: fixní menu přikryje nadpis nebo důležitý formulář. Návod, jak…