// htmltahak/ · 04 z 09

Nadpisy & Odstavce

h1–h6, p, br, hr, pre, blockquote, q — základní textové elementy. Správná hierarchie nadpisů je klíčová pro SEO i přístupnost.

<h1> – <h6>

Nadpisy

Hierarchie nadpisů dokumentu. h1 = hlavní titulek (jeden na stránku), h2–h6 = podnadpisy.

BLOCK

Nadpisy tvoří outline dokumentu. h1 je nejdůležitější — Google mu přikládá největší SEO váhu. Hierarchie musí být logická: nepoužívejte h4 bez předchozího h3. Nikdy nepoužívejte nadpisy jen pro vizuální velikost — k tomu slouží CSS.

// Proč hierarchie záležíScreen readery umožňují navigaci po nadpisech — uživatel přeskakuje z h2 na h2 jako po kapitolách. Google buduje "outline" stránky ze struktury nadpisů. Přeskočené úrovně (h1 → h4) matou přístupnost.
Vizuální přehled nadpisů (default velikosti)
h12remHlavní nadpis
h21.5remNadpis sekce
h31.17remPodnadpis
h41remDetail sekce
h50.83remDrobný nadpis
h60.67remNejmenší nadpis
Správná vs špatná hierarchie
❌ Špatně — přeskakuje
<h1> Titulek stránky
<h4> Podsekce ← přeskočeno!
<h6> Detail ← přeskočeno!
✅ Správně — postupně
<h1> Titulek stránky
<h2> Sekce A
<h3> Podsekce A1
<h2> Sekce B
  • Pouze jeden h1 na stránku
  • Nepřeskakujte úrovně (h1 → h4 je chyba)
  • Velikost textu nastavte CSS, ne výběrem h1–h6
  • h1 obsahuje hlavní klíčové slovo stránky
  • V React/Next.js: h1 na každé "stránce" (route)
Příklad — správná hierarchie
HTML
<!-- Jeden h1 na stránku -->
<h1>Kapesní nože Victorinox</h1>

<section>
  <h2>Nejprodávanější modely</h2>

  <article>
    <h3>Victorinox Classic</h3>
    <h4>Technické parametry</h4>
    <p>Délka: 58 mm...</p>
  </article>

  <article>
    <h3>Victorinox Spartan</h3>
    <h4>Technické parametry</h4>
  </article>
</section>

<section>
  <h2>Péče o nůž</h2>
  <h3>Čištění</h3>
  <h3>Broušení</h3>
</section>
CSS pro vlastní velikosti
CSS
/* Velikost nastavte CSS, ne výběrem tagu */
h1 { font-size: clamp(2rem, 5vw, 3.5rem); }
h2 { font-size: clamp(1.5rem, 3vw, 2rem); }
h3 { font-size: 1.25rem; }
h4 { font-size: 1rem; }

/* Všechny nadpisy — společné styly */
h1, h2, h3, h4, h5, h6 {
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.02em;
  margin-bottom: 0.5em;
}
<h2> jako podnadpis po h1
<h3 class="big"> pro velký text
Víc než jeden h1 na stránce
<p>

Odstavec

Základní blok textu. Prohlížeč přidá mezery před/za automaticky přes CSS margin.

BLOCK

p (paragraph) je základní textový blok. Prohlížeč automaticky přidává margin. Nikdy nevkládejte blokové elementy (div, h1, ul) do p! Zavírací tag pište vždy — i když je technicky volitelný.

// Proč ne prázdné p pro mezeryPrázdný <p></p> pro vizuální mezeru = špatně. Screen reader ho ohlásí jako prázdný odstavec. Použijte CSS margin nebo padding. HTML je pro obsah, CSS pro prezentaci.
Co do p patří (inline elementy)
strong, em, a, span code, abbr, time mark, del, ins sub, sup, br img (inline)
Co do p NEPATŘÍ (blokové elementy)
div h1–h6 ul, ol, table section, article blockquote
  • Nikdy prázdné p pro mezery — použijte CSS margin
  • Nikdy blokový element uvnitř p
  • Dlouhý text: dělte na více p pro čitelnost
  • Řádkování: CSS line-height: 1.6–1.8
Příklady
HTML
<!-- Základní odstavec -->
<p>
  Toto je odstavec s
  <strong>tučným textem</strong>,
  <em>kurzívou</em> a
  <a href="/link">odkazem</a>.
</p>

<p>Druhý odstavec má automatickou
  mezeru nahoře.</p>

<!-- ❌ Prázdný p pro mezeru -->
<p></p>
<!-- ✅ Použijte CSS -->
<style>
  p { margin-bottom: 1rem; }
</style>

<!-- ❌ Blok uvnitř p = chyba -->
<!-- <p><div>...</div></p> -->

<!-- ✅ Správně -->
<p>Text před blokem.</p>
<div>Blokový obsah</div>
<p>Text za blokem.</p>
<br>

Zalomení řádku

Void element. Zalomí řádek uvnitř textu. Jen když je zalomení součástí obsahu — adresa, báseň.

VOIDINLINE

br (break) vloží zalomení řádku uvnitř bloku textu. Používejte jen když je zalomení součástí obsahu — adresy, básně, text písně, lyriku. Nepoužívejte pro vizuální mezery mezi odstavci — k tomu slouží CSS margin.

// br vs nový odstavecDva odstavce oddělte <p> tagy, ne <br><br>. Screen reader čte <p> jako nový odstavec (pauza). <br> je jen vizuální zalomení. Více <br> za sebou = design problém, řešte CSS.
Alternativy
<p> pro nový odstavec CSS margin-bottom pro mezery white-space: pre-wrap pro zachování zalomení
  • <br> nebo <br/> — obojí validní HTML5
  • Více br za sebou = design problém, řešte CSS
  • Adresy a básně = správné použití br
  • white-space: pre-line v CSS = zachová nové řádky z textu
Správné vs špatné použití
HTML
<!-- ✅ Adresa — zalomení je obsah -->
<address>
  Jana Nováková<br>
  Novákova 1<br>
  Praha 1, 110 00
</address>

<!-- ✅ Báseň / lyrika -->
<p>
  Byl pozdní večer — první máj —<br>
  večerní máj — byl lásky čas.
</p>

<!-- ❌ Mezery mezi odstavci -->
<p>Odstavec 1</p>
<br><br>
<p>Odstavec 2</p>

<!-- ✅ Správně — CSS margin -->
<style>
  p + p { margin-top: 2rem; }
</style>
Adresa, báseň, lyrika
<br><br> pro mezery mezi odstavci
10× <br> pro velkou mezeru
<hr>

Tematický předěl

Void element. Vodorovná čára — sémantický tematický zlom. Lze plně stylovat CSS.

VOIDBLOCK

hr (horizontal rule) v HTML5 značí tematický zlom — přechod na jiné téma, podobně jako nová kapitola. Vizuálně se zobrazí jako vodorovná čára, ale tato čára má sémantiku. Pro čistě vizuální oddělení bez sémantiky použijte CSS border.

// Sémantika vs vizuální čárahr = "téma se mění, jde o nový tematický celek". Screen readery ho ohlásí jako oddělovač. Pro čistě vizuální čáru (dekorace bez sémantiky) použijte div nebo CSS border-top — hr má sémantický význam.
Alternativy
CSS border-top na sekci <div class="divider"> pro dekoraci
  • hr lze plně stylovat CSS
  • V článcích = přechod tématu, ne jen vizuální čára
  • Screen reader ohlásí jako oddělovač
  • Pro dekoraci bez sémantiky: CSS border-top
Příklady
HTML + CSS
<!-- Tematický předěl v článku -->
<section>
  <h2>O firmě</h2>
  <p>Jsme firma...</p>

  <hr>

  <h3>Naše hodnoty</h3>
  <p>Věříme v...</p>
</section>

<!-- Stylování hr -->
<style>
hr {
  border: none;
  border-top: 1px solid #eee;
  margin: 2rem 0;
}

/* Dekorativní hr s gradientem */
hr.fancy {
  border: none;
  height: 2px;
  background: linear-gradient(
    to right,
    transparent, #F7A25B, transparent
  );
  margin: 2rem auto;
  width: 60%;
}

/* Pro čistě vizuální čáru bez sémantiky */
.divider {
  border-top: 1px solid #eee;
  margin: 2rem 0;
}
</style>
<pre>

Předformátovaný text

Zachovává mezery, tabulátory a nové řádky. Monospace font. Skoro vždy s <code> uvnitř.

BLOCK

pre (preformatted) zachovává veškerý whitespace — mezery, tabulátory, nové řádky — přesně jak je v HTML kódu. Zobrazuje monospace fontem. Kombinujte s <code> uvnitř pro sémanticky správné kódové bloky.

// Proč pre+code, ne jen pre?pre = blokové formátování, code = sémantika "toto je kód". Syntax highlightery (Prism.js, highlight.js) hledají <code> elementy a přidají barevné zvýraznění. Bez code nemají kde hledat.
Kombinace s dalšími tagy
<pre><code> pro kód (doporučeno) <pre><samp> pro výstup programu CSS white-space: pre-wrap pro inline
  • Vždy pre+code pro kódové bloky
  • pre způsobuje horizontální scroll pro dlouhé řádky
  • overflow-x: auto na pre pro lepší UX
  • Prism.js / highlight.js pro syntax highlighting
  • class="language-js" na code pro Prism.js
Příklady
HTML
<!-- Kódový blok (správně) -->
<pre><code class="language-js">
function greet(name) {
  return `Ahoj, ${name}!`;
}
console.log(greet('Jana'));
</code></pre>

<!-- Výstup terminálu -->
<pre><samp>
$ npm install
added 142 packages in 3.2s
</samp></pre>

<!-- ASCII art -->
<pre>
  /\_/\
 ( o.o )
  > ^ <
</pre>

<!-- CSS pro kódové bloky -->
<style>
pre {
  background: #0d0d0d;
  color: #e8e8e8;
  border-radius: 6px;
  padding: 1rem;
  overflow-x: auto;
  font-size: 0.875rem;
  line-height: 1.65;
}
code { font-family: 'Fira Code', monospace; }
</style>
<blockquote>

Blokový citát

Delší citát od jiného zdroje. cite atribut = URL zdroje. Kombinujte s figure a figcaption.

BLOCK

blockquote označuje blok textu citovaný z jiného zdroje. cite atribut obsahuje URL zdroje pro strojové čtení. Pro zobrazení zdroje viditelně uživateli použijte <figcaption> s <cite>.

// cite atribut vs cite elementcite atribut na blockquote = URL pro stroje (Google, screen readery), není viditelný. cite element uvnitř figcaption = viditelný zdroj pro uživatele. Ideálně obojí najednou.
Atributy
citeURL zdroje citace (pro stroje)URL
Alternativy
<q> pro krátkou inline citaci <p> s uvozovkami — bez sémantiky
  • figure + blockquote + figcaption = kompletní citace
  • cite atribut = URL pro stroje, figcaption = pro lidi
  • CSS: border-left + padding-left = typický styl
  • Screen readery ohlásí jako citaci
Příklady
HTML + CSS
<!-- Kompletní citace -->
<figure>
  <blockquote cite="https://zdroj.cz">
    <p>"Nejlepší investice je
    do vzdělání."</p>
  </blockquote>
  <figcaption>
    — Benjamin Franklin,
    <cite>
      <a href="https://zdroj.cz">
        Zdroj
      </a>
    </cite>
  </figcaption>
</figure>

<!-- Pull-quote uvnitř article -->
<article>
  <p>Úvod článku...</p>
  <aside>
    <blockquote>
      "Klíčová myšlenka článku."
    </blockquote>
  </aside>
  <p>Pokračování...</p>
</article>

<!-- CSS -->
<style>
blockquote {
  border-left: 4px solid #F7A25B;
  margin: 0;
  padding: 0.5rem 1rem;
  color: #666;
  font-style: italic;
}
figcaption {
  margin-top: 0.5rem;
  font-size: 0.875rem;
  color: #999;
}
</style>
<q>

Inline citace

Krátká inline citace. Prohlížeč automaticky přidá uvozovky podle jazyka dokumentu.

INLINE

q je inline verze blockquote pro krátké citace uvnitř textu. Prohlížeč automaticky přidá uvozovky odpovídající jazyku dokumentu (české: „...", anglické: "..."). cite atribut = URL zdroje.

// Automatické uvozovkyProhlížeč přidá uvozovky dle lang atributu na html elementu. Česky: „citace". Anglicky: "citace". Japonsky: 「citace」. Žádné manuální uvozovky v textu!
Atributy
citeURL zdroje citaceURL
Alternativy
<blockquote> pro delší blokový citát Manuální uvozovky v textu (bez sémantiky)
  • Prohlížeč přidá uvozovky automaticky dle lang
  • Vlastní uvozovky: CSS q { quotes: "»" "«"; }
  • Citace ve větě = q, delší blok = blockquote
Příklady
HTML
<!-- Inline citace (auto uvozovky) -->
<p>
  Einstein řekl:
  <q cite="https://zdroj.cz">
    Bůh nehraje kostky.
  </q>
</p>

<!-- html lang="cs" → „Bůh nehraje kostky." -->
<!-- html lang="en" → "Bůh nehraje kostky." -->

<!-- Vnořená citace -->
<p>
  Řekl: <q>Slyšel jsem ho říct
  <q>to je skvělé</q>.</q>
</p>

<!-- CSS: vlastní uvozovky -->
<style>
/* Guillemets místo uvozovek */
q {
  quotes: "«\00A0" "\00A0»";
}
q::before { content: open-quote; }
q::after  { content: close-quote; }
</style>
<q>citace</q> — auto uvozovky
"citace" — manuální uvozovky v textu
← 03 Sémantika 04 / 09 — Nadpisy & Odstavce 05 Inline →