{%hackmd anYwyN--TziyASUWcqP-Gw %} # Tvořím web A–Z 2: lekce 03 <span>7. 4. 2021 | 18:00 - 20:00 | Praha</span> Lekce 03 - CSS Grid Jan Čuma --- # Co to je - CSS Grid je sada vlastností pro tvorbu layoutu vsazeného do pravidelné mřížky. - síla gridu je v tom, že můžeme mřížku definovat v obou směrech – v řádcích i sloupcích ![](https://i.imgur.com/ejjetAY.png) --- # Proč když existuje flexbox - **Grid - dvourozměrné layouty – svislá i vodorovná osa** - **Flexbox - jednosměrný lazout - svislá nebo vodorovná osa** - na rozdíl od flexboxu je vhodnější pro celostránkové a komplexnější layouty - grid se používá pro layout celé stránky, flexbox pro menší komponenty - grid je silnější v responzivním zobrazení = méně media queries --- # Co je to vlastně grid (mřížka)? - do mřížky se už dlouho sází knihy a většina tiskovin - původně se používal tabulkový layout, který trpěl nedostatky - pokud znáte Bootstrap, jedná se nástroj zabudovaný přímo v prohlížeči - můžete si to představit jako buňky v excelu --- # Co si dneska ukážeme - <code>grid</code> - <code>grid-template-columns</code> - <code>grid-template-rows</code> - <code>grid-area</code> - <code>grid-template-areas</code> - <code>grid-auto-flow</code> - <code>gap</code> --- # <code>display: grid</code> je základ - samo o sobě nic nedělá - potřebujeme další pravidla gridu ```css= .container { display: grid; } ``` --- # grid-template-columns - ovlivňuje množství a šířku sloupců - množství hodnot = množství sloupců - možné jednotky: fr, px, auto, procenta, ... - nejčastěji používanou dynamickou jednotkou je <code>fr</code> - 1fr = jedna volná jednotka/buňka - auto = užitečné pro vyplnění prázdého zbývajícího místa ```css= .container { grid-template-columns: 1fr 2fr 1fr; } ``` --- # grid-template-rows - ovlivňuje množství výšku řádku - množství hodnot = množství řádků - jendotky stejné jako u <code>grid-template-columns</code> ```css= .container { grid-template-rows: 2fr 2fr 1fr; } ``` --- # grid-column-start - určuje v jakém sloupci v rámci gridu bude umístěn začátek elementu ```css= .element { grid-column-start: 2; } ``` --- # grid-column-end - určuje v kolika sloupcích bude element umístěn - jako hodnotu můžeme použít číslo sloupce, nebo klíčové slovo <code>span</code> ```css= .element { grid-column-end: 2; } ``` ```css= .element { /* roztáhni se přes dva sloupce */ grid-column-end: span 2; } ``` --- # grid-row-start - určuje v jakém řádku v rámci gridu bude umístěn začátek elementu ```css= .element { grid-row-start: 2; } ``` --- # grid-row-end - určuje v kolika řádcích bude element umístěn ```css= .element { grid-row-end: 2; } ``` --- # repeat() - funkce pro definici opakujících se zápisů v gridu - <code>grid-template-columns: repeat(4, 1fr);</code> - vygeneruje grid se čtyřmi sloupci velikosti <code>1fr</code> - rovná se zápisu <code>grid-template-columns: 1fr 1fr 1fr 1fr;</code> - <code>grid-template-columns: repeat(2, minmax(100px, 1fr))</code> - vygeneruje grid s dvěma sloupci minimální šířkou <code>100px</code> a maximální šířkou <code>1fr</code> - rovná se zápisu <code>grid-template-columns: minmax(100px, 1fr) minmax(100px, 1fr);</code> - zápisů existuje ještě mnoho méně uživaných a složitějších a pro doplnění přidávám odkaz na dokumentaci [MND](https://developer.mozilla.org/en-US/docs/Web/CSS/repeat()) --- # minmax() - funkce pro dynamickou definici šířky nebo výšky - <code>minmax(100px, 200px)</code> - minimální velikost buňky je <code>100px</code> a maximální <code>200px</code> - <code>minmax(100px, 1fr)</code> - minimální velikost buňky je <code>100px</code>, jinak zabírá 1 díl v gridu - <code>minmax(100px, max-content)</code> - minimální velikost buňky je <code>100px</code>, ale nikdy nepřesáhne šířku obsahu - <code>minmax(min-content, 100px)</code> - nikdy nesmí být menší než obsah a zároveň maximálně <code>100px</code> velká - lze uvést i parametr <code>auto</code>, ale nedoporučuje se top pro zmatečnost implementace v prohlížečích --- # Negativní hodnoty - pokud chceme, aby element zabíral celou šířku / výšku kontejneru, můžeme použít negativní hodnoty ```css= .element { grid-column-start: 1; grid-column-end: -1; } ``` --- # Zkratky 1/2 - <code>grid-column</code> - kombinuje <code>grid-column-start</code> a <code>grid-column-end</code> ```css= .element { grid-column: 1 / -1; /* eq */ grid-column-start: 1; grid-column-end: -1; } ``` - <code>grid-area</code> - kombinuje předchozí 4 vlastnosti ```css= .element { grid-area: 2 / 1 / span 2 / span 3; /* eq */ grid-row-start: 2; grid-column-start: 1; grid-row-end: span 2; grid-column-end: span 3; } ``` --- # Zkratky 2/2 - <code>grid-area</code> - kombinuje předchozí 4 vlastnosti ```css= .element { grid-area: 2 / 1 / span 2 / span 3; /* eq */ grid-row-start: 2; grid-column-start: 1; grid-row-end: span 2; grid-column-end: span 3; } ``` --- # gap - používá se pro mezery mezi řádky a sloupci - uvádí se vždy dvě hodnoty ```css= .container { row-gap: 20%; column-gap: 20px; /* eq */ gap: 20% 20px; } ``` --- # grid-template-areas - slouží k vyplnění mřížky pojmenovanými elementy - zapisuje se jako text do uvozovek po řádcích a sloupcích ```css= .container { grid-template-areas: "nav nav nav" "content content ." "footer footer footer"; } ``` --- # grid-area - zkratka pro více hodnot - záměrně se učíme rovnou zkratku - používá se u elementu uvnitř gridu - nějčastěji se používá pro pojmenování elementu ```css= nav { grid-area: nav; } .content { grid-area: content; } footer { grid-area: footer; } ``` --- # Hřiště pro grid [[Hřiště pro grid | https://grid.layoutit.com/]](https://grid.layoutit.com/) [[Grid garden | https://cssgridgarden.com//]](https://cssgridgarden.com//) --- # Konec <span>7. 4. 2021 | 18:00 - 20:00 | Praha</span> Lekce 03 - CSS Grid Jan Čuma
{"metaMigratedAt":"2023-06-15T22:17:46.242Z","metaMigratedFrom":"YAML","title":"Lekce 03 | Tvořím web A–Z 2","breaks":false,"lang":"cs","slideOptions":"{\"transition\":\"none\",\"theme\":\"night\",\"margin\":0.05,\"minScale\":0.1,\"maxScale\":5,\"width\":2560,\"height\":1600}","contributors":"[{\"id\":\"0770b77c-5054-4cf7-a577-a646d73ab89a\",\"add\":10108,\"del\":3955}]"}
    392 views