
Flexboxy
Flexibilní stylování boxů je jednoduší a schopnější alternativa k obtékání (float), ale zatím hudba budoucnosti…
Float
Je-li potřeba umístit nějaké prvky vedle sebe, většinou se k tomu používá obtékání elementů. Přidá se float: left/right, nastaví se šířka (width) a jednotlivé prvky se tak dostanou vedle sebe. (Pod nimi se potom obtékání ukončí – clear: both.)
<p style='float: left; width: 50%; background: #ccc'>
<p style='float: left; width: 50%; background: yellow'>
Flex
Totéž se dá vyřešit vlastnostmi kolem flex. Funguje to ovšem zatím jen od Exploreru 10. Kromě Opery ve všech prohlížečích (ve Firefoxu, Chrome i IE 10) jen s prefixy (-moz- a -webkit-, -ms-) a pomalu v každém prohlížeči pod jiným názvem. Ve Firefoxu funguje jen něco.
Nepoužíváte-li proto zmíněné prohlížeče, můžete si ukázky s klidem vypnout.
<p style='width: 50%; background: #ccc'>
<p style='width: 50%; background: yellow'>
Výhoda je, že se nemusí uvádět šířka, přizpůsobí se obsahu.
<p style='width: 50%; background: #ccc'>
<p style='background: yellow'>
<p style='background: #ccc'>
<p style='background: yellow'>
<p style='background: #ccc; width: 40%'>
<p style='background: yellow'>
<p style='background: #ccc'>
flex-direction: Sloupce nebo řádky
Vlastnost flex-direction se nastavuje pro flex-obal (tj. rodiče (display: flex) flex-položek) a určuje způsob uspořádání.
| Hodnota | Význam |
|---|---|
flex-direction: row | v řádku – výchozí |
flex-direction: row-reverse | v řádku v obráceném pořadí |
flex-direction: column | v sloupci |
flex-direction: column-reverse | v sloupci v obráceném pořadí |
justify-content: Vodorovné zarovnání
Vlastnost justify-content určí způsob rozmístění flex-položek ve flex-obalu, pokud nemají plnou šířku.
Dává smysl jen při zobrazení v řádku – flex-direction: row(-reverse).
| Hodnota | Význam |
|---|---|
justify-content: flex-start | zleva – výchozí
První Druhý Třetí |
justify-content: flex-end | zprava
První Druhý Třetí |
justify-content: center | na střed
První Druhý Třetí |
justify-content: space-between | rozpočítají se flex-položky, aby se stejnoměrně rozprostřely po prostoru
První Druhý Třetí |
justify-content: space-around | podobné jako předchozí, jen se nechá prostor i na krajích.
První Druhý Třetí |
align-items: Zarovnání položek
Vlastnost align-items, nastavovaná pro flex-obal, se chová odlišně při řádkové a sloupcové orientaci boxů (flex-direction).
- Při
flex-direction: row - Určuje svislé zarovnání nebo roztažení elementu v řádce. Projeví se v případě, že nejsou všechny boxy stejně vysoké.
- Při
flex-direction: column - Určuje vodorovné zarovnání nebo roztažení.
| Hodnota | Význam |
|---|---|
align-items: flex-start | zleva/shora (záleží na flex-direction) – výchozí
První Druhý Třetí |
align-items: flex-end | zprava/zdola
První Druhý Třetí |
align-items: center | na střed
První Druhý Třetí |
align-items: baseline | přesně nevím, funguje dost podobně jako flex-start
|
align-items: stretch | roztažení elementu
První Druhý Třetí |
flex-wrap: Zalamování
Pokud je ve flex-obalu tolik flex-položek, že už se nevejdou, je možné je pomocí flex-wrap zalomit.
| Hodnota | Význam |
|---|---|
flex-wrap: nowrap | nic se nezalomí |
flex-wrap: wrap | zalomí se |
flex-wrap: wrap-reverse | zalomí se v obráceném pořadí |
element
element
Pořadí elementů
Hodně elegantní je možnost nastavování řazení. Stačí si je očíslovat vlastností order a mohou být v kódu libovolně uspořádány. Nastavuje se pro flex-položky.
<p style="order: 1">Bude první
<p style="order: 3">Bude třetí
<p style="order: 2">Bude druhý
Úprava zarovnání
Jednotlivé flex-položky dědí zarovnání od flex-obalu. Vlastnost align-self umí nastavení flex-obalu přebít. Hodnoty jsou stejné jako u align-item, jen je navíc výchozí vlastnost auto (tj. řídit se nastavením obalu).
Poměry roztahování
Vlastnostmi flex-grow, flex-shrink a flex-basis nebo zkráceně flex: grow shrink basis lze pro flex-položku nastavit, jak bude růst či ubývat vůči ostatním při přebytku, respektive nedostatku místa.
Hodnota flex-grow a flex-shrink se nastavuje od 0 do 1 a udává ochotu při roztahování a zmenšování se.
Pomocí flex-basis se nastaví výchozí šířka/výška (v závislosti na flex-direction), kterou by element rád měl, když se nebude muset zmenšovat nebo zvětšovat.
Vyzkoušejte
Pro lepší pochopení je ideální si flexibilní boxy vyzkoušet:
Využití
Při dostatečné podpoře v prohlížečích bude možné takto:
- stavět celý layout webu,
- řešit komplikované úlohy jako centrování položek s neznámou šířkou, stejně vysoké sloupce a jiné půjde velmi jednoduše,
- zjednoduší se přizpůsobování stránky šířce okna prohlížeče.
Odkazy jinam
- MDN: Using CSS flexible boxes
- W3C: CSS Flexible Box Layout Module
- The Ultimate Flexbox Cheat Sheet
- Boxes That Fill Height (Or More) (and Don’t Squish) — vyplnění výšky flexboxy
- Řešení různých problémů přes
flex - Flex box navigace
- Flexbox in the real world
- Flexbox in 5 minutes
- SmashingNagazine: The Flexbox Reading List: Techniques and Tools
Související články
Možnosti stylování <iframe>
Co lze a nelze u <iframe> ovlivnit pomocí CSS a jak na změnu textu nebo barev.