Cookies

Na naší webové stránce používáme soubory cookies pro její správné fungování, přizpůsobení analytických dat a dynamiky obsahu pro uživatele. Více informací o cookies.

Potvrzením zároveň ukládáte souhlas se zpracováním osobních údajů v rámci nařízení GDPR.

CSS flexbox

Typ chování prvku
Předchozí Následující

#1 Flexbox

Flexbox je nejpoužívanějším druhem rozložení na webových stránkách; jeho hlavní myšlenkou je poskytovat jednoduché rozložení, které je předvídatelné a má jasné vlastnosti. Umožňuje vytvářet plně responzivní struktury, které se přizpůsobují okolí podle nastavení, ovlivňuje jak se prvky chovají a další.

Flexbox se rozděluje na dvě části – kontejner a položky, kde kontejner je obal položek, jemuž je přidělena vlastnost display: flex; a položky jsou prvky, na které se flexbox aplikuje a které se mu přizpůsobují.

#kontejner {
 display: flex;
}
Tip: Jestliže potřebujete flexbox, který má být inline, lze použít hodnotu inline-flex.

#2 Flex kontejner

Flex kontejner nebo-li obal flexboxu, je prvek, který seskupuje prvky, na které chceme flexbox aplikovat. Jeho základní vlastností je display: flex;, která aplikuje flexbox. Dále se kontejneru přidělují následující vlastnosti, které určují jeho chování:

Poznámka: Všechny následující příklady budeme vztahovat k tomuto HTML kódu:
<div id="kontejner">
 <div class="polozka prvni">1. položka</div>
 <div class="polozka druha">2. položka</div>
 <div class="polozka treti">3. položka</div>
</div>

flex-direction

Vlastnost flex-direction usměrňuje tok prvků v kontejneru – určuje, zda se budou prvky řadit vedle sebe nebo pod sebe, a určuje hlavní a vedlejší osu (o osách níže). Vlastnost může nabývat následujících hodnot:

Hodnota Popis Výsledek
row základní hodnota, prvky se řadí vedle sebe První prvek vlevo, poslední vpravo, ostatní mezi nimi
column prvky se řadí pod sebe První prvek nahoře, poslední dole, ostatní mezi nimi
row-reverse prvky se řadí jako u hodnoty row, s rozdílem, že jsou v opačném pořadí První prvek vpravo, poslední vlevo, ostatní mezi nimi
column-reverse prvky se řadí jako u hodnoty column, s rozdílem, že jsou v opačném pořadí První prvek dole, poslední nahoře, ostatní mezi nimi

justify-content a align-items

Jmény zdánlivě nesouvisející položky, určují chování vnořených prvků v kontejneru na jeho osách. V konceptu flexbox neexistují osy X a Y, ale hlavní osa a vedlejší osa. Vlastnost justify-content vždy ovlivňuje hlavní osu, zatímco vlastnost align-items ovlivňuje osu vedlejší.

Dělení hlavní a vedlejší osy záleží na vlastnosti flex-direction – hlavní osa je vždy ve směru toku prvků. V základu (hodnoty row a row-reverse) je hlavní osa vodorovná a vedlejší vertikální, ale pokud má vlastnost flex-direction hodnoty column nebo column-reverse, osy se otáčí i se směrem toku prvků – hlavní osa je vertikální zatímco vedlejší je vodorovná.

Výpis nejčastěji používaných hodnot pro obě vlastnosti:

Hodnota Popis
start Prvky se zarovnají na začátek kontejneru, nehledě na flex-direction
flex-start Prvky se zarovnají na začátek osy (row a column na začátek, row-reverse a column-reverse na konec)
center Prvky se zarovnají na střed osy
end Prvky se zarovnají na konec kontejneru, nehledě na flex-direction
flex-end Prvky se zarovnají na konec osy (row a column na konec, row-reverse a column-reverse na začátek)
space-around Prvky kolem sebe vytvoří rovnoměrné odsazení (každý prvek má svoje odsazení na všech stranách, tedy pokud jsou prvky vedle sebe, odsazení se sečte)
space-evenly Prvky se rovnoměrně rozprostřou po celé ose (mezery stejné mezi prvky i na krajích)
space-between Prvky se rovnoměrně rozprostřou po celé ose bez odsazení od kraje
stretch Prvky se rovnoměrně natáhnou, aby pokryly celou šířku

flex-wrap

Vlastnost flex-wrap určuje, zda se mohou prvky přemístit na nový řádek, není-li na stávajícím řádku místo. Základním kamenem flexboxu je, že žádný prvek nepřeskočí na nový řádek dokud není specifikováno jinak, raději ho CSS zmenší nebo je prvek vytlačen ze kontejneru. Tuto funkci vlastnost flex-wrap přepisuje na základě její hodnoty.

Hodnotami vlastnosti flex-wrap mohou být tato klíčová slova – no-wrap, která je základní vlastností, prvky nemohou přeskakovat mezi řádky, wrap, přepisuje základní nastavení, prvky mohou být na vícero řádcích a wrap-reverse, která funguje jako wrap, avšak otáčí pořadí prvků.

#3 Flexbox položky

Položky u flexboxu označují prvky, které se nacházejí v prvku, který má vlastnost display: flex;. Samotné položky flexboxu lze také stylovat, aby se přizpůsobovali vně kontejneru. Položky mohou mít následující vlastnosti:

flex-grow, flex-shrink a flex-basis

Tři vlastnosti, které se dají zapsat do společné vlastnosti flex určují, jak se bude daný prvek chovat na rozdíl od prvků ostatních.

Vlastnost flex-grow a flex-shrink jsou si sobě opačné vlastnosti, které přijímají číselné hodnoty. Vlastnost flex-grow určuje kolikrát bude prvek větší než ostatní – hodnota 3 bude znamenat, že bude prvek 3x větší, hodnota 5 je 5násobné zvětšení apod. Vlastnost flex-shrink určuje kolikrát se bude prvek zmenšovat oproti ostatním – hodnota 0 prvku zabrání se zmenšovat, hodnota 2 znamená, že se prvek bude zmenšovat dvakrát rychleji.

Vlastnost flex-basis doplňuje tyto vlastnosti; určuje počáteční velikost prvku na hlavní ose – je-li například definováno kontejneru flex-direction: row;, prvku se nastaví šířka, je-li flex-direction: column, prvku se nastaví výška. Přijímá číselnou hodnotu s absolutní nebo dynamickou jednotkou.

.polozka.prvni {
 flex: 1 0 300px;
 /* grow – 1, shrink – 0, basis – 300px */
}
.polozka.druha {
 flex-shrink: 2;
}

V tomto příkladu se nebude první položka zmenšovat, růst bude stejně jako ostatní a bude začínat s 300px rozměrem (flex-basis). Druhá položka se bude zvětšovat jako ostatní, ale zmenšovat se bude dvakrát rychleji.

order

Vlastnost order určuje změnu v pořadí. Přijímá jakoukoliv čistou číselnou hodnotu, která určí jeho pořadí v kontejneru nebo speciální hodnotu -n, kde n je opět číselná hodnota, ale minus zaručí, že se bude pořadí počítat zezadu (hodnota -1 prvek umístí vždy poslední, -2 předposlední…)

.polozka.prvni {
 order: 2;
}

V tomto příkladu je definována vlastnost order: 2; první položce v kontejneru – to ji přesune na místo druhé, zatímco druhá položka bude posunuta na místo první.