Šachovnice

O čem to je

Galerie fotek ve třech sloupcích. Rozvržení stránky s hlavičkou, bočním panelem, obsahem a patičkou. Obojí jsou řádky i sloupce zároveň. Na to je CSS grid.

Flexbox řadí věci do jedné řady. Grid kreslí celou mřížku, jako šachovnici, a prvky do ní pokládá na políčka.

Nové pojmy

Grid kontejner a položkyElement s display: grid; je kontejner a vytvoří mřížku. Jeho přímí potomci jsou položky, které se do mřížky pokládají..galerie { display: grid; }
Stopa (track)Jeden řádek nebo jeden sloupec mřížky.Mřížka 3 × 2 má tři sloupcové a dvě řádkové stopy.
BuňkaJedno políčko: průnik řádku a sloupce.Na šachovnici je to jedno pole, třeba e4.
Mřížková čáraČára mezi stopami. Čísluje se od 1. Tři sloupce mají čtyři svislé čáry (1 až 4). Číslo −1 je poslední čára.První sloupec leží mezi čarami 1 a 2.

Nakresli mřížku

Jednotka frFraction, podíl. Říká, kolik dílů zbylého místa stopa dostane, když se odečtou pevné stopy a mezery.1fr 2fr – druhý sloupec dostane dvakrát víc zbylého místa než první.
ZápisCo vznikne
grid-template-columns: 200px 1fr;pevný sloupec 200 px a sloupec na zbytek
grid-template-columns: 1fr 1fr 1fr;tři stejné sloupce
grid-template-columns: repeat(3, 1fr);totéž, kratší zápis
grid-template-rows: auto 1fr auto;řádek podle obsahu, řádek na zbytek, řádek podle obsahu
gap: 16px;mezery mezi řádky i sloupci
Galerie: 4 stejné sloupce s mezerou 10 px. Napiš CSS.
.galerie { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }. Fotky se samy rozloží po čtyřech do řádků.

Pokládání na políčka

grid-column a grid-rowŘíkají, mezi kterými čarami položka leží. grid-column: 1 / 3 = od čáry 1 po čáru 3, tedy přes dva sloupce. span 2 = přes dvě stopy.grid-column: 1 / -1 roztáhne položku přes všechny sloupce.
Mřížka má 3 sloupce. První fotka má zabrat celý první řádek. Jak?
.hlavni-foto { grid-column: 1 / -1; } nebo grid-column: 1 / 4; nebo grid-column: span 3;. Čára −1 je poslední, takže zápis funguje i při změně počtu sloupců.
  • grid-column: 2 / 4 – sloupce 2 a 3 (mezi čarami 2 a 4)
  • grid-row: span 2 – přes dva řádky
  • repeat(2, 100px 1fr) – 100px 1fr 100px 1fr
  • Kolik čar mají 4 sloupce? – 5

Zkus si u každé kartičky odpověď nakreslit na papír s mřížkou, pak ji otoč.

✗grid-column: 1 / 3 zabere sloupce 1, 2 a 3.
✓Zabere sloupce 1 a 2. Čísla jsou čáry, ne sloupce.

Od čáry 1 do čáry 3 jsou mezi nimi jen dvě stopy, stejně jako od 1 do 3 cm na pravítku jsou 2 cm.

display: grid vytvoří mřížku. grid-template-columns/rows určí stopy (px, %, fr, repeat()), gap mezery. Položky se umisťují mezi číslované čáry pomocí grid-column a grid-row.

Rozvržení stránky

O čem to je

Typická stránka: hlavička nahoře, vlevo menu, uprostřed obsah, dole patička. Gridem to napíšeš na pár řádků a ještě si můžeš rozvržení „nakreslit“ přímo v CSS.

Nové pojmy

Grid kontejnerElement s display: grid. Určuje řádky a sloupce, do kterých se pokládají jeho přímí potomci.body { display: grid; }
Jednotka frDíl volného místa. Nejdřív se odečtou pevné rozměry a mezery, zbytek se rozdělí podle počtu fr.200px 1fr – 200 px pevně, zbytek pro druhý sloupec.
Pojmenovaná oblastSkupina buněk se jménem. Kontejner je nakreslí vlastností grid-template-areas, položka se do ní pošle vlastností grid-area.header { grid-area: hlavicka; }

Nakreslené rozvržení

Kontejneru dej display: grid.
Urči sloupce: grid-template-columns: 220px 1fr;.
Urči řádky: grid-template-rows: auto 1fr auto;.
Nakresli oblasti, každý řetězec je jeden řádek: grid-template-areas: "hlavicka hlavicka" "menu obsah" "paticka paticka";.
Každé položce přiřaď oblast: header { grid-area: hlavicka; }, nav { grid-area: menu; }, main { grid-area: obsah; }, footer { grid-area: paticka; }.

Stejné jméno vedle sebe znamená, že oblast zabírá víc buněk. Oblast musí být vždy obdélník.

Výpočet s fr

Kontejner 900 px, grid-template-columns: 200px 1fr 2fr; gap: 20px;. Jak široké jsou sloupce?
Mezery: dvě mezi třemi sloupci, 40 px. Volno: 900 − 200 − 40 = 660 px. Dílů 1 + 2 = 3, jeden díl 220 px. Sloupce: 200 px, 220 px, 440 px.
Jak udělat galerii, která má tolik sloupců, kolik se vejde, a každý aspoň 150 px?
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));. minmax říká: nejméně 150 px, nejvíc 1fr. auto-fill vytvoří tolik sloupců, kolik se vejde. Funguje to bez media queries.

Grid, nebo flexbox?

FlexboxGrid
rozměryjedna řada (řádek nebo sloupec)dvě dimenze (řádky i sloupce)
kdo určuje rozloženíhlavně obsah a velikost položekhlavně mřížka kontejneru
typické použitímenu, řada tlačítek, zarovnání ikony a texturozvržení stránky, galerie, dlaždice

Roztřiď úkoly. Pomůže otázka: je to jedna řada, nebo mřížka?

✗grid-template-areas: "a a" "b a"; – oblast a má tvar písmene L.
✓Oblast musí být obdélník, třeba "a a" "b b" nebo "a b" "a b".

Grid neumí oblast tvaru L. Takový zápis je neplatný a prohlížeč celou vlastnost ignoruje.

Grid je dvourozměrné rozvržení. Stopy se určí v px, % nebo fr (díl volného místa po odečtení pevných stop a mezer). grid-template-areas dovolí rozvržení nakreslit jmény oblastí. Flexbox na řady, grid na mřížky.