Lekce 1.1

CSS Grid do hloubky

Linie a souřadnice v mřížce, rozvržení nakreslené jmény oblastí, řádky, které dokreslí prohlížeč, a galerie, jež se přizpůsobí sama.

Pojmenované oblasti

Rozvržení celé stránky se čísly linií zapsat dá, ale čte se mizerně – kdo se k takovému kódu vrátí za půl roku, počítá sloupce na prstech. Vlastnost grid-template-areas proto nabízí druhý zápis: rozvržení se nakreslí jmény a jeden řádek textu je jeden řádek mřížky.

css
.page {
  display: grid;
  grid-template-areas:
    "header header"
    "nav    main"
    "footer footer";
  grid-template-columns: 200px 1fr;
  gap: 16px;
}

Vlevo tři řádky mustru zapsané v uvozovkách, vpravo rozvržení, které z nich vznikne: hlavička přes celou šířku, pod ní úzká navigace vlevo a široký obsah vpravo, dole patička přes celou šířku.

Mezery mezi jmény nemají žádný význam kromě toho, že se v nich dá zarovnávat – a vyplatí se to, protože zarovnaný mustr je vidět na první pohled.

Rozměry grid-template-areas neurčuje. Řádky mřížky sice založí, ale jak mají být sloupce široké a řádky vysoké, se pořád píše v grid-template-columns a grid-template-rows. Bez nich si prohlížeč rozměry odvodí od obsahu.

Prvky do oblastí jménem

Mustr sám o sobě nic nepřesune. Kontejneru říká, jak vypadá mřížka; každý potomek si pak řekne o svou oblast:

html
<body class="page">
  <header>Studentský web</header>
  <nav>Domů · Články · Kontakt</nav>
  <main>Sem přijde obsah stránky.</main>
  <footer>© 2026</footer>
</body>
css
.page > header { grid-area: header; }
.page > nav    { grid-area: nav; }
.page > main   { grid-area: main; }
.page > footer { grid-area: footer; }

Je to tentýž grid-area jako v minulé kapitole, jen místo čtyř čísel dostal jméno. Všimněte si, že se v něm píše bez uvozovek – ty patří jen do grid-template-areas, kde ohraničují celý řádek mřížky.

Prázdná buňka a pravidla mustru

Buňku, která má zůstat prázdná, zapíšeme tečkou:

css
.page {
  grid-template-areas:
    "header header"
    "nav    main"
    ".      footer";
}

Mustr musí dávat smysl jako obrázek, jinak ho prohlížeč zahodí celý:

  • Každý řádek má stejný počet sloupců. Jinak je zápis neplatný.
  • Každá oblast musí být obdélník. Oblast ve tvaru písmene L neexistuje.
  • Stejné jméno vedle sebe znamená jednu oblast přes víc buněk. Přesně tak se hlavička roztáhne přes celou šířku.
  • Jméno se nesmí opakovat na dvou místech, která spolu nesousedí. Dvě oddělené oblasti téhož jména by nebyly obdélník.
Pozor

Neplatný mustr se nikde nehlásí – prohlížeč tiše použije obyčejnou mřížku a rozvržení se rozsype. Když se stránka „nechytla“, spočítejte nejdřív sloupce na každém řádku.

Proč je to lepší než čísla linií

Rozvržení pro úzké okno se pak dá napsat tak, že se přepíše jediná vlastnost:

css
@media (max-width: 700px) {
  .page {
    grid-template-areas:
      "header"
      "nav"
      "main"
      "footer";
    grid-template-columns: 1fr;
  }
}

Prvky v HTML zůstaly na svém místě a grid-area u nich se nezměnilo. Změnila se jen kresba rozvržení. To je celý smysl mustru: rozvržení stojí na jednom místě a dá se přečíst i po půl roce.

Kdybychom totéž psali čísly linií, museli bychom v úzkém okně přepsat grid-column i grid-row u všech čtyř prvků – a u páté oblasti u pěti. Chyba by se přitom schovala do kteréhokoli z nich.

Poznámka

Pořadí prvků v HTML zůstává tím, v jakém stránku čte odečítač obrazovky a v jakém se po ní chodí tabulátorem. Mřížka mění jen to, kde jsou prvky vidět. K přístupnosti se dostaneme v modulu 02.

Bonus

Mustr, šířky sloupců i výšky řádků se dají zapsat jedinou vlastností grid-template. Najděte si ji v dokumentaci MDN a zkuste do ní přepsat příklad výše.