Zoeken…


Invoering

Bij het maken van geavanceerde lay-outs kunnen er scenario's zijn waarin u meer dan 12 .row in een enkelvoudig .row element moet gebruiken. Het concept van de kolom verpakking en responsieve resets (AKA clearfixes) zijn van essentieel belang voor het begrijpen van responsive design met Bootstrap.

Basisprincipes van het Bootstrap-raster

Opmerkingen

Bootstraps-grids zijn opmerkelijk krachtig en elegant. U moet echter niet vergeten dat de naam van het framework "Bootstrap" is en niet "WeDidItForYou". Bootstrap maakt responsief ontwerp mogelijk, dit garandeert dit niet.

Het is nog steeds aan u om uw ontwerp echt responsief te maken en uw gebruikers de best mogelijke eindgebruikerservaring te bieden.

De naïeve eerste poging

Laten we, voordat we beginnen, enkele CSS definiëren voor de voorbeelden. Dit is het head gedeelte van onze steekproef. Ik gebruik altijd border-radius en background-color wanneer ik test, omdat het het zien van celdelingen eenvoudig maakt zonder randgrootte toe te voegen die de grootte van de cellen kan beïnvloeden.

<head>
    <title></title>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <style>
        /* colorize all col- */
        [class^="col-"] {
            min-height: 30px;
            border-radius: 10px;
            background-color: lightblue;
        }
        /* a tall cell */
        .cell-tall {
            height: 100px;
            background-color: orange;
        }
        /* a medium-height cell */
        .cell-med {
            height: 50px;
            background-color: lightgreen;
        }
        /* padding top-bottom for some row examples */
        .row.padded {
            padding: 1rem 0 1rem 0;
        }
    </style>
</head>

Laten we met dat uit de weg gaan, een raster definiëren en kijken naar de perfecte resultaten bij alle viewport-formaten!

col-xs-6 col-md-3

<div class="container-fluid">
    <div class="row">
        <div class="col-xs-6 col-md-3">1</div>
        <div class="col-xs-6 col-md-3">2</div>
        <div class="col-xs-6 col-md-3">3</div>
        <div class="col-xs-6 col-md-3">4</div>
        <div class="col-xs-6 col-md-3">5</div>
        <div class="col-xs-6 col-md-3">6</div>
        <div class="col-xs-6 col-md-3">7</div>
        <div class="col-xs-6 col-md-3">8</div>
        <div class="col-xs-6 col-md-3">9</div>
        <div class="col-xs-6 col-md-3">10</div>
        <div class="col-xs-6 col-md-3">11</div>
    </div>
</div>

Bij gemiddelde viewport-grootte Bij kleine viewport-grootte

De vorige twee afbeeldingen tonen de weergave op middelgrote en kleine schermformaten. Vergeet niet dat we VIER kolommen op medium + krijgen vanwege col-md-3 en TWEE cellen op small- vanwege col-xs-6 .

Ziet er best goed uit, toch? Ik denk dat we hier klaar zijn! Zei VEEL naïeve Bootstrap-sites die wachten om te breken ...

Het probleem met de hoogte

In ons " naïeve voorbeeld " hadden al onze cellen dezelfde hoogte. De browser brak gewillig de lijnen precies waar we wilden, en alles leek goed met de wereld. Tot er hoogte in beeld komt.

Laten we het vorige voorbeeld nemen en sommige cellen wat hoogte geven, misschien zoals je zou zien op een pagina van het dashoard-type.

<div class="container-fluid">
    <div class="row">
        <div class="col-xs-6 col-md-3">1</div>
        <div class="col-xs-6 col-md-3 cell-tall">2</div>
        <div class="col-xs-6 col-md-3 cell-tall">3</div>
        <div class="col-xs-6 col-md-3">4</div>
        <div class="col-xs-6 col-md-3">5</div>
        <div class="col-xs-6 col-md-3 cell-med">6</div>
        <div class="col-xs-6 col-md-3">7</div>
        <div class="col-xs-6 col-md-3">8</div>
        <div class="col-xs-6 col-md-3 cell-med">9</div>
        <div class="col-xs-6 col-md-3 cell-med">10</div>
        <div class="col-xs-6 col-md-3">11</div>
    </div>
</div>

Hier hebben we een aantal cell-tall en cell-med CSS toegevoegd die we hierboven hebben gedefinieerd. Dit heeft het effect dat de hoogte van sommige cellen wordt gewijzigd. Ik vraag me af hoe het eruit zal zien ...

Hier zijn ze weer op middelgrote en kleine schermformaten: med viewport geen clearfix kleine viewport geen clearfix

Oh mijn, wat een puinhoop. Ik denk niet dat we dat wilden. Op middelgroot formaat zijn 5 en 6 ver uit de plaats, en op de een of andere manier startte 7 een nieuwe rij. Bij kleine afmetingen hebben we twee cellen in de eerste rij en vier in de tweede rij, met 4, 5 en 6 allemaal rechts op elkaar gestapeld bij beide schermgroottes!

Dus, hoe lossen we dit op?

Clearfix to the Rescue

Een manier om de situatie zeker te helpen, zou zijn om meer dan één row :

<div class="container-fluid">
    <div class="row">
        <!-- cols -->
    </div>
    <div class="row">
        <!-- cols -->
    </div>
</div>

Dit is meestal het eerste dat nieuwe Bootstrappers proberen. Het lijkt logisch: "Ik wil vier cellen in elke rij, dus ik net een nieuwe gaat maken row voor elke 4 col divs".

Maar er is een probleem met deze redenering: het hele punt van Bootstrap 3 en de komende versie 4 is responsief zijn . Door "vier col op een row " te plaatsen, denkt u niet echt "responsief".

Een goed begrip van de clearfix CSS-klasse zal je helpen in te zien dat meerdere row divs echt je begrip van de manier waarop responsief ontwerp bedoeld was om te laten werken, hebben vertroebeld. Kortom, je kunt gewoon niet weten hoeveel col je toch op een row moet zetten - de browser heeft je werk nog niet weergegeven!

Onthoud in First Things First, we zeiden dat je moet denken in "omgekeerd van 12"? Laten we zonder verder oponthoud ons probleem hier oplossen door opmerkingen in de code te gebruiken om hopelijk eventuele verwarring op te lossen. Ja, het lijkt veel meer code, maar de meeste extra's zijn opmerkingen.

<div class="container-fluid">
    <div class="row">
        <div class="col-xs-6 col-md-3">1</div>
        <div class="col-xs-6 col-md-3 cell-tall">2</div>
        <!--
            We have rendered TWO cells.
            On small and extra small devices, the viewport will render TWO cells
            (12 / 6 = 2), so we need a clearfix every TWO cells. We also need to
            say "don't show this clearfix when the viewport will render FOUR cells",
            which it will do at medium size and up (12 / 3 = 4). We do that by adding
            hidden-md and hidden-lg to our clearfix div, in effect instructing the
            browser to not show it at all on a wider screen.
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3 cell-tall">3</div>
        <div class="col-xs-6 col-md-3">4</div>
        <!--
            We have now rendered FOUR cells.
            We are never going to have more than FOUR cells side by side. So every
            FOURTH cell, we place a clearfix that will ALWAYS show. We do this by
            just leaving off any of the hidden-* classes.
        -->
        <div class="clearfix"></div>
        <!---->
        <div class="col-xs-6 col-md-3">5</div>
        <div class="col-xs-6 col-md-3 cell-med">6</div>
        <!--
            We have now rendered SIX cells.
            After the sixth cell, we are at a multiple of TWO, but not FOUR so we
            repeat the clearfix that we used after cell TWO.
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3">7</div>
        <div class="col-xs-6 col-md-3">8</div>
        <!--
            Now we have rendered EIGHT cells, which is a multiple of TWO AND FOUR,
            so we put in a clearfix that's always visible.
        -->
        <div class="clearfix"></div>
        <!---->
        <div class="col-xs-6 col-md-3 cell-med">9</div>
        <div class="col-xs-6 col-md-3 cell-med">10</div>
        <!--
            After the 10th cell, once again a multiple of TWO but not FOUR...
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3">11</div>
    </div>
</div>

De clearfix is een CSS-klasse die een kleine (vrijwel onzichtbare) div clearfix , en het doel is om de left die door de col divs zijn gebruikt te "wissen".

Het genie zit echt in de klassen hidden-sm , hidden-md , enz. Deze klassen worden op de clearfix div geplaatst , NIET op de col divs! Dit zorgt ervoor dat de clearfix div op bepaalde clearfix op magische wijze verschijnt of verdwijnt uit de renderingstream! Genie!

Bootstrap heeft een verbluffende reeks hidden-* en visible-* klassen in versie 3, en helaas zijn ze niet echt het "omgekeerde" van elkaar. Dus ik vind het het duidelijkste en veiligste om gewoon altijd de hidden-* klassen op de clearfixes te gebruiken.

Dit lijkt erop dat het in Bootstrap 4 ten goede kan veranderen, met klassen zoals hidden-*-up en hidden-*-down (ze verwijderen volledig de visible-* klassen).

Wel genoeg woorden, hoe ziet het er nu uit? Opgelost groot Opgelost klein

Dat is wat we willen! In het grote scherm hebben we altijd VIER over, in het kleinere scherm altijd TWEE over. Nooit meer stapelen op rare plaatsen, en gaten zijn waar we zouden verwachten dat ze zijn.

Een dashboard

Goed genoeg van die gekleurde afgeronde dingen, laten we iets interessants stoppen dan getallen in die divs. Laten we diezelfde set kolommen nemen en een echt dashboard maken. Gebruik de volgende CSS:

<head>
    <title></title>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <style>
        body {
            padding-top: 15px;
        }
        .panel-tall .panel-body {
            height: 175px;
        }
        .panel-med .panel-body {
            height: 100px;
        }
        .panel-short .panel-body {
            height: 70px;
        }
    </style>
</head>

En hier is de "dashboard" -code:

<div class="container-fluid">
    <div class="row">
        <div class="col-xs-6 col-md-3">
            <div class="panel panel-default panel-med">
                <div class="panel-heading">
                    Heading 1
                </div>
                <div class="panel-body">
                    Body 1
                </div>
                <div class="panel-footer">
                    Footer 1
                </div>
            </div>
        </div>
        <div class="col-xs-6 col-md-3 cell-tall">
            <div class="panel panel-danger panel-tall">
                <div class="panel-heading">
                    Heading 2
                </div>
                <div class="panel-body">
                    Body 2. Look out, this needs some attention!
                </div>
                <div class="panel-footer">
                    Footer 2
                </div>
            </div>
        </div>
        <!--
            On small and extra small devices, the viewport will render TWO cells
            (12 / 6 = 2), so we need a clearfix every TWO cells. We also need to
            say "don't show this clearfix when the viewport will render FOUR cells",
            which it will do at medium size and up (12 / 3 = 4). We do that by adding
            hidden-md and hidden-lg to our clearfix div, in effect instructing the
            browser to not show it at all on a wider screen.
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3 cell-tall">
            <div class="panel panel-success panel-short">
                <div class="panel-heading">
                    Heading 3
                </div>
                <div class="panel-body">
                    Body 3. The file has successfully uploaded.
                </div>
                <div class="panel-footer">
                    Footer 3
                </div>
            </div>
        </div>
        <div class="col-xs-6 col-md-3">
            <div class="panel panel-default panel-tall">
                <div class="panel-heading">
                    Heading 4 Chart
                </div>
                <div class="panel-body">
                    Body 4. Is this a cool graph or what?
                </div>
                <div class="panel-footer">
                    Footer 4
                </div>
            </div>
        </div>
        <!--
            We are never going to have more than FOUR cells. So every FOURTH cell,
            we place a clearfix that will ALWAYS show. We do this by just leaving off
            any of the hidden-* classes.
        -->
        <div class="clearfix"></div>
        <!---->
        <div class="col-xs-6 col-md-3">
            <div class="panel panel-warning panel-short">
                <div class="panel-heading">
                    Heading 5
                </div>
                <div class="panel-body">
                    Body 5.
                </div>
                <div class="panel-footer">
                    Footer 5
                </div>
            </div>
        </div>
        <div class="col-xs-6 col-md-3 cell-med">
            <div class="panel panel-warning panel-tall">
                <div class="panel-heading">
                    Heading 6
                </div>
                <div class="panel-body">
                    Body 6.
                </div>
            </div>
        </div>
        <!--
            After the sixth cell, we are at a multiple of TWO, but not FOUR so we
            repeat the clearfix that we used after cell TWO.
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3">
            <div class="panel panel-info panel-tall">
                <div class="panel-heading">
                    Heading 7
                </div>
                <div class="panel-body">
                    Body 7.
                </div>
                <div class="panel-footer">
                    Footer 7
                </div>
            </div>
        </div>
        <div class="col-xs-6 col-md-3">
            <div class="panel panel-info panel-med">
                <div class="panel-heading">
                    Heading 8
                </div>
                <div class="panel-body">
                    Body 8.
                </div>
                <div class="panel-footer">
                    Footer 8
                </div>
            </div>
        </div>
        <!--
            Now we have rendered EIGHT cells, which is a multiple of TWO AND FOUR,
            so we put in a clearfix that's always visible.
        -->
        <div class="clearfix"></div>
        <!---->
        <div class="col-xs-6 col-md-3 cell-med">
            <div class="panel panel-info panel-short">
                <div class="panel-heading">
                    Heading 9
                </div>
                <div class="panel-body">
                    Body 9.
                </div>
                <div class="panel-footer">
                    Footer 9
                </div>
            </div>
        </div>
        <div class="col-xs-6 col-md-3 cell-med">
            <div class="panel panel-info panel-tall">
                <div class="panel-heading">
                    Heading 10
                </div>
                <div class="panel-body">
                    Body 10.
                </div>
                <div class="panel-footer">
                    Footer 10
                </div>
            </div>
        </div>
        <!--
            After the 10th cell, once again a multiple of TWO but not FOUR...
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3">
            <div class="panel panel-info panel-tall">
                <div class="panel-heading">
                    Heading 11
                </div>
                <div class="panel-body">
                    Body 11.
                </div>
                <div class="panel-footer">
                    Footer 11
                </div>
            </div>
        </div>
    </div>
</div>

Die code ziet er als volgt uit: Dashboard gemiddeld En zo in kleinere viewports:

Dashboard klein

Overigens gebruik ik de Bootstrap 3- panel , die in Bootstrap 4 verdwijnt en wordt vervangen door de veel beschrijvende en specifieke card . Als je naar deze afbeeldingen kijkt, kun je zien waarom card een veel betere naam is dan het dubbelzinnige panel .

2,4,6 Layout met Clearfixes

Hier is een lay-out die twee, vier of zes cellen overbrengt, afhankelijk van de schermgrootte.

<div class="container-fluid">
    <div class="row">
        <div class="col-xs-6 col-md-3 col-lg-2">1</div>
        <div class="col-xs-6 col-md-3 col-lg-2 cell-tall">2</div>
        <!--
            On small and extra small devices, the viewport will render TWO cells
            (12 / 6 = 2), so we need a clearfix every TWO cells. We also need to
            say "don't show this clearfix when the viewport will render FOUR cells",
            which it will do at medium size (12 / 3 = 4). We do that by adding
            hidden-md and hidden-lg to our clearfix div, in effect instructing the
            browser to not show it at all on a wider screen.
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3 col-lg-2 cell-tall">3</div>
        <div class="col-xs-6 col-md-3 col-lg-2">4</div>
        <!--
            After the FOURTH cell, we need a clearfix, but it still needs to be
            hidden on LARGE viewports, because remember we will have a maximum of
            SIX cells now.
        -->
        <div class="clearfix hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3 col-lg-2">5</div>
        <div class="col-xs-6 col-md-3 col-lg-2 cell-med">6</div>
        <!--
            After the SIXTH cell, we need to show on SMALL and LARGE, but not on
            MEDIUM. Remember, our MEDIUM viewport only wants a clearfix when we
            are at a multiple of FOUR.
        -->
        <div class="clearfix hidden-md"></div>
        <!---->
        <div class="col-xs-6 col-md-3 col-lg-2">7</div>
        <div class="col-xs-6 col-md-3 col-lg-2">8</div>
        <!--
            Now we have rendered EIGHT cells, which is a multiple of TWO AND FOUR,
            so we put in a clearfix that's not visible on LARGE, because we are NOT
            at a multiple of SIX.
        -->
        <div class="clearfix hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3 col-lg-2 cell-med">9</div>
        <div class="col-xs-6 col-md-3 col-lg-2 cell-med">10</div>
        <!--
            After the 10th cell, small only.
        -->
        <div class="clearfix hidden-md hidden-lg"></div>
        <!---->
        <div class="col-xs-6 col-md-3 col-lg-2">11</div>
    </div>
</div>

Groot scherm: 2-4-6 Groot Gemiddeld scherm: 2-4-6 Gemiddeld Klein scherm: 2-4-6 Klein

Waarom zouden Bootstrap-kolommen 12 op een rij overschrijden?

Er zijn veel responsieve scenario's waarbij het nodig is om .row meer dan 12 in een enkel .row element te hebben. Dit staat bekend als kolomverpakking .

Als er meer dan 12 kolommen in een enkele rij worden geplaatst, wordt elke groep extra kolommen, als één eenheid, op een nieuwe regel geplaatst.

Overweeg bijvoorbeeld een lay-out waar we willen ...

  • 3 kolommen over op grote en middelgrote apparaten, en
  • 2 kolommen over op kleine en kleinste apparaten

3 kolommen over groot

2 kolommen kleiner

Om deze layout in Bootstrap te krijgen, zouden we (correct) gebruiken ..

<div class="row"> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
</div>

Correcte methode demo

Zoals u in het voorbeeld ziet, is het totaal van .row in het .row element groter dan 12 . Deze techniek staat bekend als kolomverpakking en is een van de krachtigste responsieve ontwerpfuncties van Bootstrap. De gewenste lay-out zou niet mogelijk zijn (anders dan het dupliceren van markeringen) als we probeerden vast te houden aan de algemene misvatting dat kolomeenheden tot 12 in een enkele rij moeten optellen .

De lay-out is niet mogelijk als we niet hoger zijn dan 12 (fout) ..

<div class="row"> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
</div>
<div class="row"> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
</div>
<div class="row"> 
  <div class="col-xs-6 col-md-4"> x </div> 
  <div class="col-xs-6 col-md-4"> x </div> 
</div>

Verkeerde methodedemo (mislukt 3 kolommen over het algemeen)

Vergeet niet dat een .row niet hetzelfde is als een enkele lijn over de viewport. Een .row is een groep kolommen. De kolommen met meer dan 12 eenheden in een enkel .row element lopen naar een nieuwe regel (onderaan de viewport). Dat is waarom het essentieel is om te begrijpen dat de 12 kolommen horizontale eenheden over het kijkvenster vertegenwoordigen.

Bovendien moeten responsieve resets (clearfix) worden gebruikt voor gelijkmatige omloop wanneer kolommen in hoogte variëren .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow