Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

6. diel - Bootstrap - Grid systém Bootstrapu

V minulej lekcii, Bootstrap - Úvod do grid systémov, sme si predstavili grid systémy.

V dnešnom tutoriáli CSS frameworku Bootstrap budeme pokračovať s gridmi Bootstrapu. Ako vždy si na praktických ukážkach vyskúšame, čo všetko s nimi môžeme robiť.

Responzívne triedy

Hlavnou výhodou gridu je, že sa nielen zalomí v prípade, že sa na stránku nezmestí, ale tiež si môžeme nastaviť, kedy sa má zalomiť. Okrem tried v tvare col-{number} môžeme priraďovať aj responzívne triedy ako napríklad .col-sm-3, čo konkrétne znamená, že od malých zariadení a väčších bude stĺpec zaberať 3/12 gridu.

Pre príklad teraz použijeme triedy so špecifikovaným breakpointom a stĺpce definujme iba od stredne veľkých viewportov ďalej. Čokoľvek menšieho bude mať vždy šírku 12 stĺpcov, čo je predvolená šírka. Na malých zariadeniach sa teda stĺpce poskladajú pod seba:

<div class="container-fluid bg-light">
    <div class="row">
        <div class="col-sm-3 border bg-success text-white">
            Quater
        </div>
        <div class="col-sm-3 border bg-success text-white">
            Quater
        </div>
        <div class="col-sm-6 border bg-warning">
            Half
        </div>
    </div>
</div>

Výsledok:

Grid in Bootstrap
responsive_grid­.html

Môžeme si skúsiť zmenšiť okno prehliadača a pozrieť sa na ukážku vyššie. Elementy sa zalomia a naskladajú pod seba. Náš obsah stránky je teda rozdelený do "tabuľky" a zároveň je responzívny :)

Tried môžeme priradiť k jednému stĺpcu viac a tak mu „naprogramovať“, aký má byť široký na rôznych zariadeniach. Môžeme pridať akúkoľvek responzívnu triedu k akémukoľvek stĺpcu. Aké sú ktoré zariadenia veľké a aké majú breakpointy skratky sme si definovali v lekcii Bootstrap - Typografie. Pre úplnosť si spomeňme, že breakpointy idú po sebe takto:

  • sm,
  • md,
  • lg,
  • xl,
  • xxl.

Ukážme si ešte jeden príklad, a to keď nakombinujeme viac tried pri jednotlivých stĺpcoch tak, aby sa na rôznych zariadeniach správali rôznym spôsobom. Správanie si môžeme overiť zmenšovaním okna prehliadača:

<div class="row">
    <div class="col-4 col-md-6 border bg-success text-white">Column 1</div>
    <div class="col-8 col-md-6 border bg-success text-white">Column 2</div>
</div>

Výsledok:

Grid in Bootstrap
responsive_grid_2­.html

Od stredne veľkých zariadení zaberajú oba stĺpce polovicu kontajnera. Na menších zariadeniach zaberá prvý <div> 1/3 a druhý 2/3 kontajnera.

Odsadenie

Elementy stĺpcov majú okolo seba padding, tomu sa v kontexte Bootstrap grid systému hovorí gutter. Môžeme ho prípadne odstrániť a to pridaním triedy .g-0 elementu s triedou .row. Stĺpcom v gride nesmieme pridávať margin, pretože by elementy s ním boli dohromady širšie ako kontajner a zalomili by sa. Nič nám však nebráni vložiť do stĺpca ďalší element a margin nastaviť až tomuto elementu. Aby grid systém fungoval, musia byť vždy všetky priame podelementy riadkov stĺpca. Stĺpce môžu obsahovať opäť riadky, gridy teda môžeme vkladať do seba. Niektoré HTML elementy nemožno ako flex kontajnery zatiaľ použiť, to sú napr. <button> alebo <fieldset>.

K flexboxu bolo nahlásených niekoľko bugov, najmä pre zastaraný prehliadač Internet Explorer. Niektoré sa však týkajú aj moderných prehliadačov. Zoznam nahlásených chýb môžeme napríklad nájsť v repozitári Flexbugs.

Guttery sú implementované pomocou paddingu po oboch stranách každého stĺpca a negatívnych elementov margin na kontajneri. Vďaka tomu majú stĺpce medzery medzi sebou, ale krajnú medzeru medzi sebou a okolím kontajnera nevytvoria.

Ďalej máme triedy .g-, .gx- a .gy-, ktoré nám poskytujú vylepšenú kontrolu nad medzerami medzi stĺpcami a riadkami v grid systéme. Trieda .g- nastavuje rovnaké medzery ako medzi stĺpcami (horizontálne), tak medzi riadkami (vertikálne). Hodnota, ktorú zapíšeme za pomlčku určuje veľkosť medzery a môže byť v rozmedzí od 0 (bez medzery) do 5 (najväčšia medzera).

Triedy .gx- a .gy- sú špecifickejšie - .gx- sa vzťahuje iba na horizontálne medzery (medzi stĺpcami), zatiaľ čo .gy- určuje iba vertikálne medzery (medzi riadkami). Týmto spôsobom môžu dizajnéri jemne upraviť rozostupy medzi prvkami gridu, a to buď uniformne pomocou .g-, alebo selektívne pre horizontálne či vertikálne rozostupy.

Ukážme si to na príklade:

<div class="container-fluid">
        <!-- Global gap example -->
        <div class="row g-3">
            <div class="col-4">
                <div class="border bg-success text-white">Column 1</div>
            </div>
            <div class="col-4">
                <div class="border bg-warning text-white">Column 2</div>
            </div>
            <div class="col-4">
                <div class="border bg-success text-white">Column 3</div>
            </div>
        </div>

        <!-- Horizontal gap example -->
        <div class="row gx-5 my-4">
            <div class="col-4">
                <div class="border bg-success text-white">Column 1</div>
            </div>
            <div class="col-4">
                <div class="border bg-warning text-white">Column 2</div>
            </div>
            <div class="col-4">
                <div class="border bg-success text-white">Column 3</div>
            </div>
        </div>

        <!-- Vertical gap example -->
        <div class="row gy-5">
            <div class="col-4">
                <div class="border bg-success text-white">Column 1</div>
            </div>
            <div class="col-4">
                <div class="border bg-warning text-white">Column 2</div>
            </div>
            <div class="col-4">
                <div class="border bg-success text-white">Column 3</div>
            </div>
        </div>
</div>

V tomto príklade trieda .g-3 nastavuje medzeru 3 ako medzi stĺpcami, tak medzi riadkami, .gx-5 nastavuje horizontálne medzery medzi stĺpcami na veľkosť 5, .my-4 je utility trieda pre vertikálny margin (y os), ktorá pridáva medzery nad a pod riadkom a .gy-5 nastavuje vertikálne medzery medzi riadkami na veľkosť 5.

Výsledok v prehliadači:

Gaps in the Grid system
gaps_grid_sys­tem.html

Automatická šírka

Pokiaľ nejakému stĺpcu nastavíme šírku pomocou triedy v tvare .col-{breakpoint}-auto, jeho šírka sa nastaví tak, aby sa do stĺpca vošiel jeho obsah a zvyšok šírky bude rozdelený medzi zostávajúce stĺpce podľa pravidiel definovaných v gride. S automatickou šírkou súvisí aj využitie zvyšku kontajnera. Pokiaľ sa v gride nachádza mix stĺpcov so špecifikovanou šírkou a stĺpcov označených len triedou .col, vyplní stĺpec s .col zvyšné miesto.

Oboje si vyskúšajme:

<div class="container-fluid">
    <div class="row">
        <div class="col border bg-success text-white">
            Column 1
        </div>
        <div class="col-sm-auto border bg-warning">
            Column 2
        </div>
        <div class="col col-sm-4 border bg-success text-white">
            Column 3
        </div>
    </div>
</div>

Živá ukážka:

Grid in Bootstrap
grid_automatic_wid­th.html

Kód vyššie zobrazí kontajner s tromi stĺpcami. Ten prvý bude zaberať vždy všetko zvyšné miesto, teda čo najviac. Ten druhý zaberie čo najmenej miesta, len aby sa doňho vošiel jeho obsah. A ten tretí zaberie 4/12 šírky kontajnera. Po zmenšení na viewport pod malé zariadenia sa všetky stĺpce zoradia pod seba.

Automatická šírka stĺpcov je skôr technologická vychytávka než štýl, ktorý budete často používať. Práve šírka stanovená nie na základe obsahu elementu, ale na zadanom počte stĺpcov, tvorí pridanú hodnotu gridu.

Vynútenie zalomenia riadku

Ak by sme z nejakého dôvodu potrebovali zalomiť riadok skôr, ako ho v skutočnosti ukončíme, môžeme na tento účel do gridu vložiť stĺpec s triedou .w-100, ktorý sa používa na nastavenie šírky elementu na 100 % rodičovského elementu:

<div class="container-fluid">
    <div class="row">
        <div class="col-sm border bg-success text-white">
            Column 1
        </div>
        <div class="col-sm border bg-success text-white">
            Column 2
        </div>
        <div class="w-100"></div>
        <div class="col-sm border bg-success text-white">
            Column 3
        </div>
    </div>
</div>

Výsledok:

Grid in Bootstrap
grid_breakpoin­ts.html

Všimnime si, že môžeme použiť aj triedu .col-sm, teda pridať responzívny breakpoint bez toho, aby sme špecifikovali koľko stĺpcov gridu má stĺpec zaberať. K zalomeniu riadku dôjde aj vo chvíli, keď by súčet šírok jeho stĺpcov presiahol 12 stĺpcov (napr. .col-4 a .col-9).

Bootstrap nám poskytuje okrem .w-100 ešte ďalšie triedy pre šírku ako .w-25, .w-50 a .w-75 na nastavenie šírky elementu na 25 %, 50 % a 75 % rodičovského elementu.

Zarovnanie a zmena poradia

Ak by sme potrebovali stĺpce v gride nejako zarovnať, čo by sa teoreticky stávať príliš nemalo, platí pre stĺpce kontajnera to isté ako si povieme v lekciách Flex utilities a Flex utilities druhýkrát. Elementom s triedou .row teda priraďujeme triedy ako .align-items-center, .justify-content-center alebo .align-self-end a podobne.

Novo zavedené triedy v Bootstrap 5, ako sú .align-items-xxl-, .justify-content-xxl- ponúkajú väčšiu kontrolu nad zarovnaním a rozložením prvkov na extra extra veľkých obrazovkách.

Rovnako tak môžeme meniť skutočné poradie stĺpcov v riadku bez ohľadu na ich poradie v kóde, stačí im priradiť jednu z tried začínajúcu na .order-{number}, kde číslo nadobúda hodnoty 1 - 12. To všetko budeme používať aj z vyššie spomínanej lekcie na flex utilities. Pre kompletnosť týchto materiálov si uveďme jeden príklad za všetky:

<div class="container-fluid">
    <div class="row justify-content-center bg-light" style="height: 150px;">
        <div class="col-auto border bg-success text-white order-2 align-self-start">
            Second
        </div>
        <div class="col-auto border bg-success text-white order-1 align-self-center">
            First
        </div>
        <div class="col-auto border bg-success text-white align-self-end order-3">
            Third
        </div>
    </div>
</div>

A živá ukážka:

Grid in Bootstrap
grid_flex_uti­lities.html

Offsety

Občas nejaký stĺpec nevyužijeme a chceme namiesto neho ponechať voľné miesto. Aby sme sa vyhli jeho zbytočnej deklarácii v kóde, nemusíme prázdny stĺpec vkladať vôbec a nasledujúci stĺpec a kus posunúť. Máme k tomu k dispozícii triedy vo formáte .offset-{number}, prípadne .offset-{breakpoint}-{number}, pričom číslo určuje počet stĺpcov (z 12), o ktoré sa má daný stĺpec posunúť doprava:

<div class="container-fluid">
    <div class="row">
        <div class="col-md-3 bg-success text-white">
            Column 1
        </div>
        <div class="col-md-4 offset-md-4 bg-success text-white">
            Column 2
        </div>
    </div>
</div>

Ukážka:

Grid in Bootstrap
grid_offsets.html

Ak by sme chceli nastaviť, aby sa offset od nejakého breakpointu aplikoval a od nejakého zase nie, vypli by sme pri druhom rozmere pomocou triedy .offset-{breakpoint}-0.

Automatické marginy

V spomínaných lekciách Flex utilities a Flex utilities druhýkrát sa pozrieme aj na hack s automatickými marginmi. Pokiaľ niektorému stĺpcu nastavíme triedu .ms-auto alebo .me-auto, posunie sa zvyšok stĺpcov naľavo, resp. napravo:

<div class="container-fluid">
    <div class="row">
        <div class="col-md-4 border bg-success text-white">
            Column 1
        </div>
        <div class="col-md-2 border bg-success text-white">
            Column 2
        </div>
        <div class="col-md-2 border bg-success text-white ms-auto">
            Column 3
        </div>
    </div>
</div>

Ukážka:

Grid in Bootstrap
grid_auto_mar­gins.html

V nasledujúcom cvičení, Riešené úlohy k 1.-6. lekciu Bootstrap CSS frameworku, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Bootstrap - Úvod do grid systémov
Všetky články v sekcii
Kompletný kurz CSS frameworku Bootstrap
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-6. lekciu Bootstrap CSS frameworku
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
7 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity