Přejít k navigační liště

Zdroják » Webdesign » Kódujeme drobečkovou navigaci

Kódujeme drobečkovou navigaci

Články Webdesign

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.

Č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í:

googlebreadcrumb

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!

Komentáře

Subscribe
Upozornit na
guest
16 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
František Kučera

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:

<link rel="next" href="ch00.html" title="Předmluva" />

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.

Coltcha

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 » (&raquo) nebo › (&rsaquo) apod, které mi teda vůbec sématické nepřipadají…

Josef Richter

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 :-)

Josef Richter

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é)

Jiří Kosek

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.

Petr Komárek

Č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:

<strong>Nacházíte se:</strong> <a href="/">Úvodní stránka</a> » <a href="/clanky/">Články</a> » Titulek článku

Imho Jelikož drobky, na rozdíl od menu/navigace nejsou seznamem odkazů neměli by ani být v ul ani v ol.

22. 11. 2010 9:46 redakčně upravil Martin Malý, důvod: HTML formátování
Eric Force

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

    Eric Force

    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

    Jiří Kosek

    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.

    Eric Force

    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 :)

    mikiqex

    Na WebExpo 2009 jsem s panem Pavlíčkem tuto problematiku řešil a bylo mi doporučeno používat OL-LI.

    Dvorak

    Tento článek měl být pravděpodobně v sekci humor.

    František Kučera

    Na serveru Interval.cz (hledat např.: site:interval­.cz/clanky/fi­rebug) 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">In­terval.cz</a> &gt; <a title="Přejdi do kategorie Nástroje" href="http://­interval.cz/nas­troje/">Nástro­je</a> &gt; <a title="Přejdi do kategorie Editory a IDE" href="http://­interval.cz/nas­troje/editory-ide/">Editory a IDE</a> &gt; Firebug</p>

    A ještě doplnění: kromě Mikrodat Google doporučuje RDFa.

    PeterKahoun

    Zajímavé, díky. Podrobně o chování Googlu zde: http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=185417

    Enum a statická analýza kódu

    Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.