FlexBox v praxi: kde sa naozaj používa
Keď už máme za sebou rodiča aj deti, prichádza tá najpraktickejšia časť: ako FlexBox použiť na reálnych príkladoch.
FlexBox v praxi: kde sa naozaj používa
Jedna vec je vedieť, čo robí justify-content alebo flex: 1;, a druhá vec je vedieť, kde to celé dáva zmysel v skutočnom layoute.
FlexBox je veľmi dobrý hlavne tam, kde riešime:
- prvky vedľa seba
- zarovnanie na stred
- medzery medzi boxami
- jednoduché riadky a stĺpce
- rozumné správanie na menšej šírke
Na zložité mriežky už býva často lepší Grid, ale na veľa bežných častí webu je FlexBox veľmi pohodlný.
1. Tlačidlá vedľa seba
Toto je jedna z najbežnejších vecí. Máme dve alebo tri tlačidlá a chceme ich mať vedľa seba s medzerou.
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<div class="ukazka actions">
<a href="#" class="btn">Uložiť</a>
<a href="#" class="btn">Zrušiť</a>
</div>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.actions {
display: flex;
gap: 1rem;
}
.btn {
display: inline-block;
padding: 0.8rem 1.2rem;
border: 1px solid #222;
text-decoration: none;
color: inherit;
}

Tu je FlexBox ideálny, lebo rodič len povie: „tieto tlačidlá budú vedľa seba a medzi nimi bude medzera“.
Netreba nič komplikovať.
2. Tlačidlá zarovnané na koniec
Častá situácia je aj taká, že tlačidlá nechceme mať pri začiatku, ale napríklad vpravo.
Táto ukážka je hlavne na pozretie výsledku.
CSS
.actions {
display: flex;
justify-content: flex-end;
gap: 1rem;
}

Tým hovoríme: tlačidlá majú byť v riadku, ale nech sa posunú na koniec hlavnej osi.
Pri predvolenom row to znamená doprava.
3. Jednoduché menu
Menu je ďalší typický príklad. Chceme viac odkazov vedľa seba, s medzerou a často aj zarovnaných na stred.
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<nav class="ukazka menu">
<a href="#">Domov</a>
<a href="#">Služby</a>
<a href="#">Blog</a>
<a href="#">Kontakt</a>
</nav>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.menu {
display: flex;
justify-content: center;
gap: 1rem;
}
.menu a {
border: 1px solid #222;
padding: 0.75rem 1rem;
text-decoration: none;
color: inherit;
}

Tu je výhoda FlexBoxu v tom, že veľmi rýchlo spraví riadok z odkazov a dovolí nám jednoducho meniť ich rozloženie.
4. Logo vľavo, menu vpravo
Toto je veľmi bežné v hlavičke stránky.
Naľavo je logo, napravo navigácia alebo tlačidlá.
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<header class="ukazka header">
<div class="logo">Logo</div>
<nav class="header-nav">
<a href="#">Domov</a>
<a href="#">Blog</a>
<a href="#">Kontakt</a>
</nav>
</header>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 1rem;
}
.logo,
.header-nav a {
border: 1px solid #222;
padding: 0.75rem 1rem;
}
.header-nav {
display: flex;
gap: 1rem;
}
.header-nav a {
text-decoration: none;
color: inherit;
}

Tu máme vlastne dva FlexBoxy:
- prvý na celej hlavičke - červený okraj
- druhý vo vnútri navigácie - zelený okraj
Okraje a malý padding sú použité pre lepšie pochopenie, zvýraznenie bloku.
FlexBox sa veľmi často používa vnorene. Jeden rodič riadi veľké časti layoutu a vo vnútri ďalší rodič riadi menšie prvky.
5. Karta s obrázkom a textom vedľa seba
Toto je ďalší častý príklad. Naľavo obrázok, napravo text.
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<article class="ukazka karta">
<div class="thumb">Obrázok</div>
<div class="content">
<h2>Nadpis karty</h2>
<p>
Toto je jednoduchý text vedľa obrázka.
FlexBox tu rieši hlavne rozloženie na dva stĺpce.
</p>
</div>
</article>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.karta {
display: flex;
gap: 1rem;
align-items: flex-start;
}
.thumb {
width: 180px;
min-height: 120px;
border: 1px solid #222;
padding: 1rem;
}
.content {
flex: 1;
border: 1px solid #222;
padding: 1rem;
}

Tu je FlexBox veľmi prirodzený:
- obrázok má pevnú alebo približnú šírku
- textová časť si vezme zvyšok priestoru
A práve tu pekne vidno, kde je flex: 1; praktické.
6. Karty s rovnakou šírkou
Veľmi časté je aj to, že chceme viac kariet vedľa seba a každá má mať rovnaký podiel šírky.
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<section class="ukazka cards">
<div class="card">Karta 1</div>
<div class="card">Karta 2</div>
<div class="card">Karta 3</div>
</section>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.cards {
display: flex;
gap: 1rem;
}
.card {
flex: 1;
border: 1px solid #222;
padding: 1rem;
}

Každá karta dostane rovnaký diel z voľného priestoru.
Toto je veľmi pohodlné, keď chceme jednoduchý rad troch alebo štyroch boxov.
7. Karty, ktoré sa zalamujú
Tu už sme v situácii, kde sa oplatí ukážku nielen pozrieť, ale aj skúsiť v editore.
Túto ukážku sa oplatí otvoriť v editore a meniť šírku okna. (pravý horný roh "Edit on CODEPEN")
HTML
<body>
<h1>blog</h1>
<section class="ukazka cards-wrap">
<div class="card">Karta 1</div>
<div class="card">Karta 2</div>
<div class="card">Karta 3</div>
<div class="card">Karta 4</div>
<div class="card">Karta 5</div>
</section>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.cards-wrap {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.card {
flex: 1 1 180px;
border: 1px solid #222;
padding: 1rem;
}
Toto je veľmi praktická kombinácia:
flex-wrap: wrap;dovolí zalamovanieflex: 1 1 180px;povie, že karta môže rásť, môže sa zmenšiť a začína približne od 180px
Pri tejto ukážke je výsledok síce dobre vidieť aj na obrázku, ale najlepší zmysel pochopíš až vtedy, keď budeš meniť šírku okna alebo hodnotu 180px.
8. Sidebar a obsah
Toto je ďalší typický layout:
- vľavo bočný panel
- vpravo hlavný obsah
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<div class="ukazka layout">
<aside class="sidebar">Sidebar</aside>
<main class="main">Hlavný obsah</main>
</div>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.layout {
display: flex;
gap: 1rem;
}
.sidebar {
width: 220px;
border: 1px solid #222;
padding: 1rem;
}
.main {
flex: 1;
border: 1px solid #222;
padding: 1rem;
}

Tento príklad je veľmi podobný karte s obrázkom a textom.
Jeden prvok má približne pevnú šírku a druhý si vezme zvyšok miesta.
9. Centrovanie obsahu na stred
FlexBox je veľmi známy aj tým, že vie jednoducho centrovať obsah.
Táto ukážka je hlavne na pozretie výsledku.
HTML
<body>
<h1>blog</h1>
<section class="ukazka center-box">
<div class="box">Som na strede</div>
</section>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
}
.center-box {
display: flex;
justify-content: center;
align-items: center;
min-height: 300px;
padding: 1rem;
}
.box {
border: 1px solid #222;
padding: 1rem 1.5rem;
}

Toto je klasický príklad, kde rodič rozhodne o strede a dieťa sa len nechá pekne uložiť.
10. Prvok, ktorý sa nemá zmenšovať
HTML
<body>
<h1>blog</h1>
<div class="ukazka media">
<div class="icon">Ikona</div>
<div class="text">
Toto je text vedľa ikony. Keď bude priestoru menej,
chceme, aby sa skôr lámal text, ale ikona zostala čitateľná.
</div>
</div>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.media {
display: flex;
gap: 1rem;
}
.icon {
width: 120px;
flex-shrink: 0;
border: 1px solid #222;
padding: 1rem;
}
.text {
border: 1px solid #222;
padding: 1rem;
}
Tu je dôležité práve:
flex-shrink: 0;


Tým hovoríme: „ikona sa nemá stláčať“.
Toto je veľmi praktické pri prvkoch, ktoré musia zostať čitateľné alebo mať pevnú podobu.
11. Jeden prvok zarovnaný inak ako ostatné
Občas máme riadok viacerých boxov, ale jeden z nich sa má správať trochu inak.
HTML
<body>
<h1>blog</h1>
<div class="ukazka badges">
<div class="badge">1</div>
<div class="badge special">2</div>
<div class="badge">3</div>
</div>
</body>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.ukazka {
border: 1px solid #a50000;
padding: 1rem;
}
.badges {
display: flex;
align-items: center;
min-height: 180px;
gap: 1rem;
}
.badge {
border: 1px solid #222;
padding: 1rem;
}
.special {
align-self: flex-end;
}

Rodič povie: všetci budete zarovnaní na stred.
Ale druhý box povie: ja chcem ísť nižšie.
A presne na to slúži align-self.
12. Kedy ešte FlexBox stačí a kedy už radšej Grid
Toto je veľmi dobrá otázka, lebo veľa ľudí sa snaží riešiť všetko cez FlexBox.
FlexBox je super, keď riešime:
- jeden riadok prvkov
- jeden stĺpec prvkov
- menu
- tlačidlá
- hlavičku
- sidebar a obsah
- jednoduché karty
- zarovnanie na stred
Grid býva lepší, keď riešime:
- väčšiu mriežku
- presné riadky aj stĺpce naraz
- galériu
- dashboard
- zložitejšie rozloženie sekcií
Dá sa to povedať aj jednoducho:
- FlexBox = smer
- Grid = mriežka
Krátke zhrnutie
FlexBox je v praxi výborný hlavne preto, že nám veľmi rýchlo vyrieši bežné rozloženie prvkov.
Nie je to nástroj len na „boxy vedľa seba“. Vie riešiť aj:
- medzery
- zarovnanie
- rozloženie voľného priestoru
- zalamovanie
- správanie jednotlivých prvkov
A práve preto sa s ním stretneš skoro na každej stránke: v menu, v kartách, v hlavičke, v tlačidlách aj v jednoduchých layoutoch.