Kódujeme drobečkovou navigaci

Drobečková navigace je stále populárnější a ve webdesignérských a UX kruzích se probírá její správný vzhled, umístění a logika. Méně pozornosti se věnuje jejímu kódování, tedy zápisu v HTML. V článku si ukážeme několik možných způsobů vytvoření HTML kódu pro tento navigační prvek.
Nálepky:
Článek je překladem textu Exploring Markup for Breadcrumbs, jehož autorem je Chris Coyier, autor webu CSS Tricks. Překlad vychází s laskavým autorovým svolením.
V komentářích u článku o stylování trojúhelníkových drobečků v CSS jsem používal HTML kód zhruba takový:
<ul class="breadcrumb">
<li><a href="#">Top Level</a></li>
<li><a href="#">Second Level</a></li>
<li><a href="#">Third Level</a></li>
<li>Current Item</li>
</ul>
K tomuto kódu měl výhrady Geert van der Heide:
… toto HTML není sémantické. Kódovat drobečkovou navigaci pomocí nečíslovaného seznamu vytváří dojem, že prvky jsou na stejné hierarchické úrovni, jako množina prvků v řadě. To ale položky v drobečkové navigaci nejsou, reprezentují cestu, kde každá položka je „potomkem“ položky předchozí.
Myslím, že to je dobrá připomínka. Nečíslovaný seznam (anglické slovo „unordered“, tedy „neseřazený“, vyjadřuje podstatu věci přesněji – pozn. překl.) vytváří sémanticky špatný dojem. Jak píše Geert, klade všechny položky na stejnou úroveň. Pokud by měla být každá položka na odpovídající úrovni, musel by zápis vypadat takto:
<ul class="breadcrumb"> <li> <a href="#">Top Level</a> <ul> <li> <a href="#">Second Level</a> <ul> <li> <a href="#">Third Level</a> <ul> <li> Current Item </li> </ul> </li> </ul> </li> </ul> </li> </ul>
Což je poněkud těžkopádné. Nemyslím, že by to bylo moc použitelné, i když je technicky možné takový seznam vytvořit a nastylovat přesně, jak potřebujete.
Problém spíš spočívá v té „neseřazenosti“ nečíslovaného seznamu. Možná by stačilo místo něj použít číslovaný:
<ol class="breadcrumb"> <li><a href="#">Top Level</a></li> <li><a href="#">Second Level</a></li> <li><a href="#">Third Level</a></li> <li>Current Item</li> </ol>
Rozhodně to působí líp. Drobečky jsou ve velmi důležitém pořadí, tak je použití číslovaného, „seřazeného“ seznamu odpovídající. Ale stále jsem s tímto řešením nebyl spokojen. Jednoduše proto, že seznam 1, 2, 3 atd. neodpovídá úrovním hierarchie.
Někteří lidé zmiňovali v komentářích použití obyčejných odkazů a vizuálního oddělovače:
<p class=„breadcrumb“>
<a href=„#“>Top Level</a> >
<a href=„#“>Second Level</a> >
<a href=„#“>Third Level</a> >
Current Item
</p>
Bez stylování v CSS je to pravděpodobně ta nejlepší varianta. Znak „>“ naznačuje velmi pěkně hierarchii, použití inline elementů zase dává drobečkové navigaci obvyklý horizontální vzhled. Ale zase: není to moc uspokojivé, protože zápis nedává moc srozumitelně najevo, co je jeho obsahem.
Myslel jsem, že se podívám, jestli Google nemá nějakou radu v téhle věci. Ostatně sám drobečkovou navigaci používá ve výsledcích vyhledávání:
Nepřekvapivě je HTML kód výsledků vyhledávání jedním slovem zmatek (HTML kód od Google-čehokoli je zmatek). Ale přesto mají, co se týče drobečkové navigace, radu ohledně kódování. Doporučují použít HTML5 Microdata a nabízejí tento příklad:
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/books" itemprop="url"> <span itemprop="title">Books</span> </a> › <div itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/books/authors" itemprop="url"> <span itemprop="title">Authors</span> </a> › <div itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="http://www.example.com/books/authors/stephenking" itemprop="url"> <span itemprop="title">Stephen King</span> </a> </div> </div> </div>
Na první pohled to vypadá těžkopádně, ale ve skutečnosti jsou Microdata určena právě pro takovéhle účely. Možná bych místo DIVů použil SPAN.
Nejsem si jist tím, jak spolu vycházejí microdata a mikroformáty, ale vypadá to, že podle doporučení mikroformátů stačí dát obalovacímu prvku třídu „breadcrumb“ a hotovo.
HTML5 má také co k tématu dodat. Použití hodnoty „up“ v atributu „rel“ naznačuje, že element je částí hierarchické struktury a také naznačuje vzdálenost od aktuálního dokumentu k tomu, který je odkazován.
<nav> <p> <a href="/" rel="index up up up">Main</a> > <a href="/products/" rel="up up">Products</a> > <a href="/products/dishwashers/" rel="up">Dishwashers</a> > <a>Second hand</a> </p> </nav>
Element nav
je tu obzvlášť vhodný, a pokud do něj zabalíte předchozí příklady, zlepšíte tím jejich sémantiku. Mimoto je tento příklad pravděpodobně ten nejvíc uspokojivý co do sémantického popisu povahy drobečkové navigace. Atribut rel
je určen pro popis vztahů mezi elementy, takže to sedí. Navíc i vizuálně, bez jakéhokoli stylování, je dosaženo obvyklého vzhledu drobečkové navigace.
Ale prosím pozor: HTML5 je ve vývoji a rel/up ještě není definitivní a nemusí nakonec ve specifikaci zůstat. Je tu otevřená připomínka, že použití vícenásobného „up“ není příliš čistá cesta, a ve vzduchu visí návrhy jako „up2“, „great-grandparent“ či úplně nový atribut jako třeba level=„3“.
Tak jak na tom jsme? Řekl bych, že zatím není žádný super jedinečný naprosto nejlepší způsob, jak nakódovat drobečkovou navigaci. Naštěstí to není v praxi zase tak obrovský problém. Vyberte si některý z výše uvedených příkladů a použijte ho. Jen si myslím, že to je zajímavé téma pro diskusi o HTML. Pokud máte nějaký způsob, jak zapisovat drobečkovou navigaci, podělte se!
Kromě hierarchie může drobečková navigace ještě zachycovat historii (odtud i ten název – uživatel za sebou sype drobečky a pak se podle nich může vrátit zpátky). A tahle posloupnost stránek nemusí odpovídat stromové struktuře webu (na současnou pozici se mohl dostat přes něco jako je symbolický odkaz v souborovém systému). Pak hierarchická drobečková navigace nedává moc smysl a lepší by byl obyčejný číslovaný seznam nebo jen odkazy.
Hezké je, když vedle je „drobečku“ ještě šipka a ta rozbaluje nabídku dalších položek na stejné úrovni (na desktopu tohle dělá třeba Dolphin nebo Gwenview). Tohle ale kód drobečkové navigace ještě zesložiťuje a na začátku stránky je spousta „balastu“ než přijde na řadu teprve skutečný obsah (např. text článku nebo popis výrobku). Což by tedy šlo nějak ohackovat nebo třeba generovat javascriptem (přeci jen drobečková navigace je něco navíc).
Taky je otázka, jestli tuhle navigaci vůbec používat – ona je trochu duplicitní s GUI prohlížeče. Pokud se jedná o „historickou“ drobečkovou navigaci, stejnou funkci má tlačítko Zpět v prohlížeči a vedle něj bývá ještě taková šipka, která rozbalí seznam „drobečků“. Výhodou je, že vypadá na všech stránkách stejně (pro uživatele známý ovládací prvek) a autor webu nemusí nic programovat, není to práce navíc. Pokud jde o „hierarchickou“ drobečkovou navigaci, zde se zase (často) duplikuje funkce se strukturou URL – ty drobečky často najdeme v URL oddělené lomítky a některé prohlížeče mají kromě tlačítek Zpět a Vpřed i tlačítko Nahoru, které skočí o jednu úroveň (lomítko) výše (jako by to byla adresářová struktura).
Kromě toho do hlavičky (X)HTML lze umístit takovéto odkazy:
A prohlížeč (např. Opera) pak tyto odkazy zobrazuje v navigační liště. Jde použít hodně druhů odkazů (titulní stránka, obsah, rejstřík, další, předchozí, nahoru, nápověda, copyright, autor atd.). Sémantika je velmi dobrá (v atributu
rel
je uveden význam daného odkazu – vztah k aktuální stránce). A taky to není žádná novinka – používalo se to už dávno před tím, něž někdo přišel s nějakým HTML5 :-) Takhle lze popsat hierarchickou strukturu – stránka odkazuje na nadřízený prvek, na dva své sousedy a případně na další stránky.Ale jo, Franto, všichni známe manuál GNU, kde přesně tyhle šipky dopředu, dozadu a o úroveň vejš byly. :) Spíš mě zaujal tvůj optimismus v tom, že „drobečky vidíme v URL oddělené lomítky“. Když odhlédnu od jejich spartánského vyznění a od zpraSEOných URL, tak stejně: Vidíme je tam my, ale – vidí je tam všichni? Vědí všichni uživatelé, co to tam je napsané? Nechovají se někteří náhodou tak, že napíšou URL, co někde vyčtou, do políčka Seznamu a pak klikají a klikají až „na tu svou oblíbenou“? Ti vůbec netuší co to tam je, a upřímně řečeno, kdyby tenhle prvek z navigace zmizel, tak by to zase takové neštěstí nebylo.
Obecně se mi nejvíc líbí zápis, který doporučuje Google (plus to samé v HTML5). Zajímalo by mě ale, jestli existuje nějaký doporučený zápis pro šipky mezi úrovněmi – mě teda nejvíc sympatická (rozuměj sématická) připadá → , nicméně dle http://kumpunen.com/?p=125 ji Google asi moc nerozumí… Na spousta webech je vidět » (») nebo › (&rsaquo) apod, které mi teda vůbec sématické nepřipadají…
možná kacířská myšlenka, ale podle mě se drobečková navigace většinou jen snaží (neúspěšně) zachránit mizernou strukturu webu.
Těch webů, který by ji skutečně potřebovaly, protože mají mimořádně komplexní strukturu dat je naprosto mizivý procento. Bohužel spousta webařů, a hlavně agentur, berou drobečkovou navigaci jako standardní fíčuru, která tam prostě má být (a která se dá fakturovat).
Takže pokud máte na webu breadcrumbs, tak je zkuste vyhodit. Pokud se tam bez nich nezorientujete, tak máte blbě architekturu webu. Čest výjimkám :-)
Ta kacířská myšlenka (spolu s tím co naznačoval Franta) je zajímavá. Zkusím se podívat, jestli nemáme nějaké výsledky měření pro drobečkovou navigaci. Díky.
Díky, to by mohlo být zajímavý.
Mimochodem pro ukázku nepříliš elegantně fungující drobečkové navigace nemusíme chodit daleko. Stačí se podívat o pár pixelů výše ;-) Neberte to prosím jako kritiku, Zdroják je důkazem že jde hlavně o obsah, a ten když je kvalitní, tak čtenář ledacos odpustí v UI a grafice.
Když píšu tuhle odpověď, tak mám breadcrumbs: Zdroják » Značkovací jazyky » Kódujeme drobečkovou navigaci » Názory » Názor » Odpověď. To už je na první pohled celkem zmatený.
Když čtu samotný článek, tak mám drobky: Zdroják » Značkovací jazyky » Kódujeme drobečkovou navigaci. Budiž. Nicméně tady je zas vidět, že pokud je ta struktura rozumně plytká, tak ty drobky nepotřebuju.
O kousek níž mám „nálepky,“ což je zase koncept, kterej běží tak nějak paralelně a nezávisle a trochu se to s drobkama bije. A když kliknu na nálepku, tak mi to hodí drobky: Zdroják » Nálepky » HTML. To už musí domotat i zkušeného uživatele :-) Navíc ta kategorizace „značkovací jazyky“ vs. „HTML“ taky ukazuje na spíš volnější slovník bez jasného řádu.
Takže můj přístup k drobkům:
1. Snažit se dělat weby co nejplytší. Maximálně 1 až 2 úrovně hloubky. Pro drtivou většinu webů (včetně Zdrojáku) to stačí, zjednodušuje to uživatelovu orientaci a není potřeba „záchranných kruhů“ jako jsou drobky.
2. Nemíchat drobky a tagy. Buď jedno nebo druhý. Dohromady to většinou moc nefunguje.
3. Drobky jen v případě, že mám perfektně strukturovanej strom a že ten strom dává smysl a je k užitku. Napadají mě snad jen některé větší eshopy (Zahradní nářadí > Sekačky > Benzínové)
Otázkou však stále je, proč by se drobečková navigace měla označovat nějak sémanticky. Řekněmě, že obalení do nav má ještě smysl, aby se vědělo co je navigace a nemá se příliš zohledňovat při vyhledávání. Ale ten zbytek je overkill.
Článek je vskutku zajímavý, ale jen nechápu jednu věc. Jak to, že autor ani jednou nezmínil, že by „breadcrumbs“ měli (můžou) obsahovat nějaký titulek/label. Uživatel by měl vědět, kam clická a o co se jedná.
Já osobně používám následující strukturu:
Imho Jelikož drobky, na rozdíl od menu/navigace nejsou seznamem odkazů neměli by ani být v ul ani v ol.
Já bych zase řekl, že nic se nemá přehánět. Jen si nemyslete, jsem zastáncem sémantiky, ale musíte si najít tu správnou rovnováhu. Musíte se sami sebe zeptat co vám přinese například ten zápis
Tak nevím proč mi to tu zprávu ufiklo, tak tady a znovu :))
Já bych zase řekl, že nic se nemá přehánět.
Jen si nemyslete, jsem zastáncem sémantiky, ale musíte si najít tu správnou rovnováhu. Musíte se sami sebe zeptat co vám přinese například ten zápis /ul/ů v /ul/ech… V tomto případě bych neváhal použít klasické /ul/ a možná klidně jak kolega nade mnou jen /a/… Web bude vypadat stejně a kód se bude lépe spravovat a snadněji generovat..
Další věcí je, že, proč by nemohli na hierarchické uspořádání poukazovat samotné značky > <. Protože pokud ty zařadíte do svého sémantického smýšlení, znamenají menší a větší než, a pokud to spojíme spolu s klasickým /ul/ a vnímáme to jako celek tak to JE vyjádření hierarchie. To je ale spíše filosofičtější otázka.
Celé to téma mi přijde:“Nemáme do čeho rejpnout, pojďme řešit hlouposti“. Asi něco takového si řeklo W3 Consortium, když začalo vydávat standardy :P
Celé to téma mi přijde:“Nemáme do čeho rejpnout, pojďme řešit hlouposti“. Asi něco takového si řeklo W3 Consortium, když začalo vydávat standardy :P
Doporučuji si podrobněji nastudovat historii webu, důvody vzniku W3C, kdo je členem W3C a technologie, které byly v rámci W3C standardizovány.
Neříkám,že jsem odborník, ale tyhle věci jsou mi obecně známé. Ten závěrečný odstavec byl především pokus o vtip. Důvody vzniku W3C jsou samozřejmě opodstatněné, někdo by řekl ušlechtilé, ale způsob realizace má do dokonalosti daleko. Ovšem uvidíme jak na tom budeme až se vydá standard pro HTML 5 a CSS 3, které jsou ale ještě na hony daleko :)
Na WebExpo 2009 jsem s panem Pavlíčkem tuto problematiku řešil a bylo mi doporučeno používat OL-LI.
Tento článek měl být pravděpodobně v sekci humor.
Na serveru Interval.cz (hledat např.:
site:interval.cz/clanky/firebug
) interpretuje Google drobečkovou navigaci aniž by byla nějak zvlášť vyznačena – v kódu je jen:<p class="breadcrumb">
<!-- Breadcrumb NavXT 3.4.1 -->
<a title="Přejdi do Interval.cz." href="http://interval.cz">Interval.cz</a> > <a title="Přejdi do kategorie Nástroje" href="http://interval.cz/nastroje/">Nástroje</a> > <a title="Přejdi do kategorie Editory a IDE" href="http://interval.cz/nastroje/editory-ide/">Editory a IDE</a> > Firebug</p>
A ještě doplnění: kromě Mikrodat Google doporučuje RDFa.
Zajímavé, díky. Podrobně o chování Googlu zde: http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=185417