Proč sémantika v HTML5 záleží
HTML5 rozšířilo jazyk o sémantické značky, které zpřesňují význam obsahu a zlepšují přístupnost, SEO i udržovatelnost kódu. Správně zvolený element pomáhá čtečkám obrazovky, vyhledávačům, nástrojům pro indexaci a vývojářům porozumět struktuře stránky bez nutnosti heuristik založených na třídách nebo stylech. Tento článek shrnuje moderní sémantické značky, jejich použití, časté anti-patterny a doporučení pro praxi.
Zásady sémantického značkování
- Význam před vzhledem: volbu elementu řídí význam obsahu, ne vizuální prezentace (tu řeší CSS).
- Jeden účel – jeden element: pokud existuje adekvátní sémantický element, použijte jej místo generického
<div>nebo<span>. - Správná hierarchie: hlavičky
<h1–h6>reprezentují logickou strukturu obsahu; nemají být používány k vizuálnímu formátování. - Landmark role: prvky jako
<header>,<nav>,<main>atd. tvoří orientační body pro asistivní technologie. - Progressive enhancement: sémantika funguje i bez JavaScriptu; interaktivitu přidávejte postupně.
Strukturální a „landmark“ elementy
- <header>: úvod části nebo stránky (logo, název, navigační prvky). Může se vyskytovat vícekrát (v rámci
<article>/<section>). - <nav>: hlavní navigace, soubory odkazů mezi sekcemi nebo stránkami. Nepoužívejte pro izolované in-page odkazy typu „zpět na začátek“.
- <main>: jedinečný hlavní obsah dokumentu; na stránce má být přesně jednou.
- <article>: samostatná, na sobě nezávislá část obsahu (zpráva, příspěvek na blogu, karta produktu).
- <section>: tematická sekce s vlastním nadpisem; nepoužívat jako náhradu za
<div>bez nadpisu. - <aside>: doplňkový obsah (postranní panel, poznámky, související odkazy).
- <footer>: patička stránky nebo sekce (autorská práva, kontakty, související navigace).
Textová sémantika a mikro-značky
- <strong> a <em>: sémantické zdůraznění (důležitost vs. intonační důraz); nenahrazujte je
<b>/<i>pro význam. - <mark>: zvýraznění relevantního textu (např. shody vyhledávání).
- <time>: strojově čitelný čas s atributem
datetime(ISO 8601) pro události, datum publikace apod. - <abbr>: zkratky s atributem
titlepro plné znění. - <dfn>: první výskyt definovaného termínu.
- <cite> a <q>: citace děl a krátké citace v textu; pro delší citace použijte
<blockquote>. - <code>, <kbd>, <samp>: fragmenty kódu, vstupy z klávesnice a ukázkové výstupy.
- <data>: párování zobrazované hodnoty s strojovým
value(např. identifikátor).
Obrazový a multimediální obsah
- <figure> a <figcaption>: samostatné vizuální bloky s popisem (obrázky, diagramy, ukázky kódu).
<figcaption>je volitelný, ale doporučený. - <picture>, <source>, <img>: responzivní obrázky a art-direction; vždy uvádějte smysluplný atribut
alt. - <video> a <audio>: nativní přehrávání; používejte
controls, více<source>a pro přístupnost<track kind="captions">.
Interaktivní a „disclosure“ prvky
- <details> a <summary>: rozbalitelné sekce bez JS (FAQ, technické detaily). Přidejte sémantický nadpis uvnitř
<summary>. - <dialog>: modální i nemodální dialogy s atributy
opena metodami skriptování; pro plnou přístupnost řídit fokus aaria-labelledby. - <template> a <slot>: stavební kameny Web Components;
<template>není vykreslován, slouží jako vzor pro klonování.
Formuláře: sémantika a bohaté ovládací prvky
- Typy vstupů:
email,url,tel,number,date,datetime-local,range,coloratd. zajišťují validaci a specializované UI. - <label for> a přidružené názvy: každý ovládací prvek má být spojen s
<label>kvůli přístupnosti. - <fieldset> a <legend>: logické skupiny; zlepšují navigaci a čitelnost formulářů.
- <datalist>: nápověda pro
<input>s možností výběru a volného psaní. - <output>, <meter>, <progress>: výstup výpočtů, míry a průběhu; používejte atributy
min,max,value,low,high,optimum. - Autofill a autocomplete: nastavujte
autocompletes konkrétními hodnotami (např.name,email,address-line1). - Validace: HTML5 poskytuje atributy
required,pattern,min/max,step; pro custom zprávy použijtesetCustomValidity().
Tabulky: data vs. layout
- Sémantika: používejte
<caption>,<thead>,<tbody>,<tfoot>a pro hlavičkové buňky<th scope="col|row">. - Přístupnost: komplexní tabulky označte atributy
headersaidnebo víceúrovňovéscope. - Layout: tabulky nepoužívejte pro rozvržení; responzivitu řešte CSS (např. přetečení, transformace do karet).
Role ARIA a jejich vztah k HTML
Princip „native first“: pokud nativní prvek již odpovídá potřebné roli, nepřidávejte ARIA. Když tvoříte vlastní komponenty, ARIA doplní sémantiku, stavy a vztahy.
| Účel | Preferovaný HTML prvek | Alternativa s ARIA | Poznámka |
|---|---|---|---|
| Navigace | <nav> |
role="navigation" |
Na stránce může být více, označte je názvem (aria-label). |
| Hlavní obsah | <main> |
role="main" |
Jeden na stránce. |
| Tlačítko | <button> |
role="button" + klávesnice |
Pro <div> vyžaduje JS pro Space/Enter a tabindex. |
| Dialog | <dialog> |
role="dialog" |
Spravujte fokus a aria-modal. |
SEO a strukturovaná data
- Významové značky usnadňují pochopení obsahu vyhledávači (správná hierarchie nadpisů,
<article>,<section>,<figure>). - Strukturovaná data: preferujte JSON-LD ve
<script type="application/ld+json">pro schémata Article, BreadcrumbList, Product apod. - Metadata:
<meta name="description">,og:atwitter:karty pro sdílení.
Mezinárodní prostředí a jazyk
- Jazyk dokumentu: nastavte
<html lang="cs">; pro cizojazyčné úseky použijtelangna elementu. - Směr textu: u jazyků RTL použijte
dir="rtl"; vyhýbejte se míchání bez explicitního nastavení. - Formát času a čísel: sémantiku
<time>kombinujte s lokalizovaným zobrazením na klientu.
Anti-patterny a časté chyby
- „Div-soup“: všude
<div>a<span>i tam, kde existují sémantické prvky. - Falešné nadpisy: vizuální nadpisy tvořené jen CSS; používejte skutečné
<h2>…<h6>. - Nesprávné vnoření: např.
<header>bez související sekce, nebo<main>vnořený do<article>. - Přetěžování rolí: zbytečné ARIA role na nativních prvcích, které už sémantiku mají.
- Obsah bez popisů: chybějící
altu<img>a<figcaption>u komplikovaných figure.
Přístupnost: praktické zásady
- Landmarks: využijte
<header>,<nav>,<main>,<aside>,<footer>pro rychlou navigaci čteček. - Fokus a klávesnice: interaktivní prvky musí být dosažitelné klávesnicí; nepřebarvujte outline bez náhrady.
- Kontrast a význam: odlišení nesmí být jen barvou; používejte také sémantické značky a text.
- Stavy a názvy: u vlastních komponent nastavujte
aria-*atributy (např.aria-expanded,aria-controls).
Výkonnost a udržovatelnost
- Konzistentní struktura: opakovatelné komponenty (hlavička, patička, karty) s jasnou sémantikou usnadňují testování.
- Menší závislost na JS: elementy
<details>a<dialog>řeší běžné vzory bez knihoven. - Responzivní obrázky:
<picture>asrcset/sizessnižují datovou zátěž a zlepšují CLS/LCP.
Testování a validace
- HTML validátor: ověřuje správnost značek, atributů a vnoření.
- Lighthouse/axe: kontrola přístupnosti a best practices.
- Čtečky obrazovky: praktické testy s VoiceOver/JAWS/NVDA odhalí problémy s navigací a popisy.
- Outline audit: zkontrolujte logiku nadpisů a navigačních landmarků (jeden
<main>, smysluplné<nav aria-label>).
Mapování scénářů na sémantické prvky
| Scénář | Doporučené značky | Poznámka |
|---|---|---|
| Článek s obrázkem a popiskem | <article>, <header>, <figure>, <figcaption>, <footer> |
<time datetime> pro datum publikace |
| Produktová karta | <article>, <h3>, <figure>, <data value> |
U ceny použijte <data> pro strojové zpracování |
| FAQ oddíl | <section>, <details>, <summary> |
Každá otázka jako samostatné <details> |
| Navigace webu | <nav>, seznam <ul>/<li> |
Více navigací rozlišit aria-label (např. „Hlavní“, „Patička“) |
Verzování a dokumentace sémantiky
- Design systém: pro každou komponentu definujte HTML kostru, ARIA pravidla, varianty stavu a příklady použití.
- Linting: nástroje pro statickou analýzu (HTMLHint, ESLint s pluginy) v CI zajišťují konzistenci.
- Dokumentované kontrakty: popište, které části DOM jsou veřejné (sloty, datové atributy) a které interní.
Budoucí směr a interoperabilita
- Zpřesňování ARIA: nové vzory pro složité komponenty (kombinované seznamy, gridy) a lepší interoperabilita čteček.
- Dialog a form patterns: dokončování standardů kolem modálních interakcí, validace a hlášek.
- Web Components: šíření nativní sémantiky skrz shadow DOM a standardizované role.
Závěr: Praktický check-list sémantiky
- Má dokument jeden
<main>a smysluplné landmarky? - Je hierarchie nadpisů konzistentní a odpovídá obsahu?
- Mají obrázky adekvátní
alta komplexní vizuály<figcaption>? - Jsou formulářové prvky spárované s
<label>a mají správné typy? - Nepoužíváte ARIA tam, kde stačí nativní HTML?
- Prošli jste validací, a11y auditem a testem s čtečkou?