
Horizontální navigace
Různé možnosti, jak vytvořit vodorovné menu s odkazy vedle sebe.
Asi nejjednodušší možnost vytvoření navigace s odkazy vedle sebe je prosté naházení odkazů do <div>u.
To není úplně špatné:
- jednotlivé odkazy můžeme (
text-decoration: none), - nějak hezky (
background: #fff), - přidat (
padding: .3em), - nebo (
text-align: centerpro nadřazený element)
Jakmile ale bude potřeba měnit výšku nebo šířku jednotlivých odkazů, narazíme na problém, protože odkazy jsou řádkové. Naštěstí existují způsoby, jak dostat vedle sebe i bloky.
Inline-block
Přidáním display: inline-block pro získáme výhodu řádkových i blokových elementů najednou.
Vše bude fungovat jako dřív a navíc půjde . Bezproblémové je samozřejmost.
Obtékání
Druhá možnost je položky menu nechat obtékat. Nicméně nevidím důvod pro použití obtékání místo řešení s inline-block. Nenapadá mě žádná výhoda takového postupu.
Snad jen může být problém v mezerách mezi položkami, které vzniknou při inline-block řešení a umístěním každného odkazu v HTML kódu na zvláštní řádek. Řešením je umístit všechny odkazy ihned za sebe nebo odřádkování zakomentovat.
<a href=#>Odkaz</a><!--
--><a href=#>Odkaz</a>
Nebo nakonec opravdu použít ten float.
Kromě nevýhody, že je nutné řešit clearování bude obtíženější obtékané menu vycentrovat.
Sémantika
Někdo by mohl namítat, že menu patří do značky <menu> nebo alespoň seznamu (<ul>) a odkazy do položek <li>. Osobně se domnívám, že takové strukturování prakticky nikdo neocení a je to jen práce navíc. Ale nic neřešitelného to také nepředstavuje.
V podstatě stačí jen vynulovat margin a padding, odstranit odrážky (listy-style: none) a z položek udělat třeba řádkové elementy (display: inline).
Fixní menu
Vodorovné menu není problém na stránce (position: fixed), může být samozřejmě i fixované jen někdy podobně jako boční panel.
Vycentrování fixního menu lze zajistit přes left: 50%; margin-left: -(polovina šířky).
Co si myslíte o tomto článku?
Související články
CSS item-pack: balance – vyvážené rozložení flex položek
Vlastnost item-pack: balance rozděluje flex položky rovnoměrně mezi řádky, podobně jako text-wrap: balance vyvažuje řádky textu.
CSS Container Queries – responsivní komponenty
Jak pomocí @container, container-type a container-name vytvářet komponenty, které se přizpůsobí velikosti svého rodiče místo viewportu.
CSS Anchor Positioning – posicování elementů relativně k jiným
Jak pomocí anchor-name, position-anchor a funkce anchor() posicovat elementy relativně k jiným bez JavaScriptu.
Centrování na webových stránkách
Moderní způsoby vertikálního i horizontálního centrování v CSS. Flexbox, Grid, margin auto a další techniky.