Layoutování v CSS
Layoutování je kritický krok, kdy žák přestává skládat prvky pod sebe a začíná tvořit skutečný design webu. Je to bod, kde se nejčastěji "bojuje" s CSS. Aby žák pochopil layout, musí přestat vnímat web jako textový dokument a začít ho vidět jako systém pružných kontejnerů.
Zde jsou základní kompetence pro layoutování:
1. Koncepce toku dokumentu (Document Flow)
Dříve než začne prvky posouvat, musí rozumět jejich přirozenému chování:
- Block vs. Inline: Rozdíl mezi prvky, které zabírají celou šířku (
div,h1,p), a těmi, které se řadí vedle sebe (span,a,img). - Box-sizing (Klíčová dovednost): Pochopení, proč by měl vždy nastavit
box-sizing: border-box;, abypaddingabordernezvětšovaly definovanou šířku prvku.
2. Flexbox (Standard pro moderní layout)
Dnes naprostý základ. Žák by měl umět pracovat s osami:
Flex kontejner vs. položka: Rozlišení, které vlastnosti patří rodiči (
display: flex) a které potomkům.Hlavní a příčná osa: Pochopení směrů
row(řádek) acolumn(sloupec).Zarovnávání: *
justify-content: Rozmístění prvků na hlavní ose (start, center, space-between).align-items: Centrování na příčné ose.Flex-wrap: Schopnost nechat prvky spadnout na další řádek, pokud se nevejdou.
3. CSS Grid (Pro komplexní mřížky)
Zatímco Flexbox je na řádky, Grid je na celé plochy:
- Definice mřížky:
grid-template-columnsagrid-template-rows. - Jednotka
fr: Práce s flexibilním zlomkem volného prostoru. - Mezery: Používání vlastnosti
gap(která dnes funguje i ve Flexboxu).
4. Pozicování (Positioning)
Vědět, jak prvek "vytrhnout" z běžného toku:
- Relative: Posun prvku vzhledem k jeho původnímu místu.
- Absolute: Umístění prvku přesně na souřadnice vzhledem k nejbližšímu
relativerodiči. - Fixed: Přichycení prvku k oknu prohlížeče (např. fixní menu).
- Z-index: Pochopení vrstev (co je "nad" čím).
5. Responzivita (Responsive Design)
Web musí fungovat na mobilu i desktopu:
- Viewport meta tag: Vědět, že v HTML musí být
<meta name="viewport" ...>, jinak CSS na mobilu nebude fungovat správně. - Media Queries: Schopnost napsat pravidlo
@media, které změní layout při určité šířce obrazovky (např. pod 768px). - Mobile First přístup: Koncepce, kdy se nejprve styluje pro mobil a pak se přidávají pravidla pro větší obrazovky.
Cvičení: Layout a Flexbox
Část 1: Flexbox v teorii
Máš kontejner se třemi tlačítky. Chceš, aby byla vodorovně, uprostřed kontejneru a s rovnoměrnými mezerami mezi nimi. Doplň chybějící hodnoty:
.container {
display: __________;
flex-direction: __________;
justify-content: __________;
}Část 2: Pozicování
Máš obrázek v kartě a chceš do pravého horního rohu obrázku umístit ikonku "Srdíčko". Jaké pozicování použiješ?
- Pro kartu (obal):
position: __________; - Pro ikonku (srdíčko):
position: __________;a vlastnostitop: 0; right: 0;
Část 3: Media Queries
Napiš základní strukturu Media Query, která skryje prvek s třídou .sidebar, pokud je šířka obrazovky menší než 600px:
@media (__________: __________) {
.sidebar {
display: __________;
}
}Klíč k řešení
Část 1: Flexbox
display: flex;flex-direction: row;(výchozí hodnota, ale pro jistotu)justify-content: space-around;(nebospace-between/space-evenly)
Část 2: Pozicování
- Karta:
position: relative;(vytvoří kotevní bod) - Ikonka:
position: absolute;(vztahuje se k té relativní kartě)
Část 3: Media Queries
@media (max-width: 600px) {
.sidebar {
display: none;
}
}