H10 - Flexbox

01 - Layout is lastig: speel het spel

Layout is vaak het onderdeel dat je als eerste nodig hebt als je een website wilt maken: blokken naast elkaar, een menu netjes uitlijnen, kaarten in rijen zetten en ruimte verdelen. Toch behandelen we layout pas later in deze training, omdat het meestal ook het lastigste onderdeel van webdesign is.

Flexbox is een moderne CSS-techniek om onderdelen netjes naast elkaar of onder elkaar te zetten. Je gebruikt flexbox vooral voor layouts in één richting: een rij of een kolom.

Een goede manier om flexbox te oefenen is het spel Flexbox Froggy. Speel het spel. Echt: speel het spel. Het maakt flexbox veel begrijpelijker.

Hoe speel je Flexbox Froggy?

  1. Open flexboxfroggy.com/#nl.
  2. Je ziet kikkers en waterlelies op het scherm.
  3. De kikker moet naar de juiste waterlelie.
  4. Links of onderin staat een CSS-editor.
  5. Je typt daar flexbox-regels, bijvoorbeeld justify-content: center;.
  6. Als de kikker goed staat, ga je door naar het volgende level.
  7. Lees per level goed welke property je oefent.
  8. Speel niet te snel door: probeer te begrijpen waarom de kikker beweegt.

Zie het spel als oefening voor je gevoel voor layout. Je hoeft niet alles meteen uit je hoofd te kennen. Het belangrijkste is dat je herkent welke eigenschap ongeveer welk probleem oplost.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
02 - Flex container en flex items

Flexbox werkt met een container en items. De container is het element waarop je display: flex zet. De directe kinderen van die container worden flex items.

<section class="kaarten">
    <article class="kaart">
        <h2>HTML</h2>
        <p>Structuur van de pagina.</p>
    </article>

    <article class="kaart">
        <h2>CSS</h2>
        <p>Vormgeving van de pagina.</p>
    </article>

    <article class="kaart">
        <h2>Layout</h2>
        <p>Onderdelen netjes plaatsen.</p>
    </article>
</section>
.kaarten {
    display: flex;
    gap: 20px;
}
  • .kaarten is de flex container.
  • De drie <article>-elementen zijn flex items.
  • display: flex zet de items standaard naast elkaar.
  • gap maakt ruimte tussen de items.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
03 - Richting: row of column

Met flex-direction bepaal je de richting van de flex items. Standaard staan flex items in een rij.

.kaarten {
    display: flex;
    flex-direction: row;
    gap: 20px;
}

Wil je de items onder elkaar zetten, dan gebruik je column.

.kaarten {
    display: flex;
    flex-direction: column;
    gap: 20px;
}
  • row: items staan naast elkaar.
  • column: items staan onder elkaar.
  • row-reverse: items staan naast elkaar, maar omgekeerd.
  • column-reverse: items staan onder elkaar, maar omgekeerd.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
04 - Horizontaal verdelen met justify-content

Met justify-content verdeel je items over de hoofdrichting. Bij flex-direction: row is dat meestal horizontaal.

.menu {
    display: flex;
    justify-content: center;
    gap: 20px;
}
  • flex-start: items beginnen aan het begin.
  • center: items staan in het midden.
  • flex-end: items staan aan het einde.
  • space-between: eerste item links, laatste item rechts, ruimte ertussen.
  • space-around: ruimte om elk item heen.
  • space-evenly: gelijke ruimte tussen en naast alle items.

In Flexbox Froggy oefen je dit al vroeg. Let daar goed op: dit is een van de belangrijkste flexbox-properties.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
05 - Verticaal uitlijnen met align-items

Met align-items lijn je items uit op de kruisas. Bij een gewone rij is dat meestal verticaal.

.banner {
    display: flex;
    align-items: center;
    min-height: 200px;
}
  • stretch: items rekken standaard uit.
  • flex-start: items staan aan het begin van de kruisas.
  • center: items staan in het midden van de kruisas.
  • flex-end: items staan aan het einde van de kruisas.

Een veelgebruikte combinatie is horizontaal en verticaal centreren:

.vlak {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 300px;
}

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
06 - Ruimte tussen items met gap

Met gap maak je ruimte tussen flex items. Dit is vaak beter dan losse margins op alle items.

.kaarten {
    display: flex;
    gap: 24px;
}
  • gap hoort op de flex container.
  • De ruimte komt tussen de flex items.
  • Je hoeft dan niet elk item apart margin te geven.
  • Dat maakt de CSS eenvoudiger en netter.
.kaarten {
    display: flex;
    row-gap: 24px;
    column-gap: 32px;
}

Met row-gap en column-gap kun je verticale en horizontale ruimte apart instellen.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
07 - Items laten doorlopen met flex-wrap

Als flex items niet meer naast elkaar passen, kun je ze naar een nieuwe regel laten doorlopen. Daarvoor gebruik je flex-wrap.

.kaarten {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
}

.kaart {
    width: 240px;
}
  • nowrap is standaard: items blijven op één regel.
  • wrap laat items naar een nieuwe regel gaan.
  • Dit is handig bij kaarten, producten, tegels of kleine blokken.
  • Flexbox kan zo beter reageren op verschillende schermbreedtes.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
08 - Flex-items groter of kleiner maken

Je kunt flex items laten groeien of krimpen. De meest gebruikte korte schrijfwijze is flex.

.kaart {
    flex: 1;
}

Met flex: 1 mogen de items de beschikbare ruimte eerlijk verdelen.

.zijbalk {
    flex: 1;
}

.inhoud {
    flex: 3;
}

In dit voorbeeld krijgt de inhoud ongeveer drie keer zoveel ruimte als de zijbalk.

  • flex: 1 is handig voor gelijke kolommen.
  • Grotere getallen krijgen meer ruimte.
  • Gebruik dit rustig en test goed in de browser.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
09 - Praktisch voorbeeld: kaarten naast elkaar

Dit voorbeeld maakt een rij met kaarten. Op kleinere schermen mogen de kaarten doorlopen naar de volgende regel.

<section class="kaarten">
    <article class="kaart">
        <h2>HTML</h2>
        <p>Structuur maken.</p>
    </article>

    <article class="kaart">
        <h2>CSS</h2>
        <p>Vormgeving maken.</p>
    </article>

    <article class="kaart">
        <h2>Flexbox</h2>
        <p>Layout maken.</p>
    </article>
</section>
.kaarten {
    display: flex;
    flex-wrap: wrap;
    gap: 24px;
}

.kaart {
    flex: 1;
    min-width: 220px;
    padding: 24px;
    border: 1px solid gray;
}
  • display: flex zet de kaarten in een flex layout.
  • flex-wrap: wrap laat kaarten doorlopen als er te weinig ruimte is.
  • gap maakt ruimte tussen de kaarten.
  • flex: 1 laat kaarten meegroeien.
  • min-width voorkomt dat kaarten te smal worden.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
10 - Best practices
  • Gebruik flexbox voor layout in één richting: rij of kolom.
  • Zet display: flex op de container, niet op elk item.
  • Gebruik gap voor ruimte tussen items.
  • Gebruik justify-content voor verdeling in de hoofdrichting.
  • Gebruik align-items voor uitlijning op de kruisas.
  • Gebruik flex-wrap: wrap als items mogen doorlopen.
  • Gebruik flexbox niet voor alles. Voor echte raster-layouts leer je hierna CSS Grid.
  • Speel Flexbox Froggy als je vastloopt. Het spel is hier echt nuttig.

Actie

  • Maak een kleine flexbox met drie items en pas deze eigenschap toe.
  • Verander één flexwaarde en kijk hoe de positie of ruimte tussen de items verandert.
11 - Opdracht

Actie

Maak een pagina met een menu en drie kaarten met flexbox.

  1. Speel eerst minimaal de eerste tien levels van Flexbox Froggy.
  2. Maak een HTML-bestand met <header>, <nav>, <main> en <footer>.
  3. Zet in de navigatie minimaal drie links.
  4. Maak in <main> een <section class="kaarten">.
  5. Zet daarin minimaal drie <article class="kaart">-elementen.
  6. Gebruik flexbox om de links in het menu naast elkaar te zetten.
  7. Gebruik flexbox om de kaarten naast elkaar te zetten.
  8. Gebruik gap voor ruimte tussen de links en kaarten.
  9. Gebruik flex-wrap: wrap zodat de kaarten op kleinere schermen kunnen doorlopen.
  10. Controleer in de browser wat er gebeurt als je het venster smaller maakt.
Quiz
  1. Vraag 1. Op welk element zet je meestal display: flex?



    Goed. De container wordt de flex container.
    Niet goed. display: flex hoort op de container.
  2. Vraag 2. Wat zijn flex items?



    Goed. Directe kinderen worden flex items.
    Niet goed. Flex items zijn de directe kinderen van de flex container.
  3. Vraag 3. Welke property bepaalt rij of kolom?



    Goed. Met flex-direction kies je de richting.
    Niet goed. Rij of kolom regel je met flex-direction.
  4. Vraag 4. Welke waarde centreert items met justify-content?



    Goed. center centreert in de hoofdrichting.
    Niet goed. De juiste waarde is center.
  5. Vraag 5. Waarvoor gebruik je align-items meestal?



    Goed. Bij een rij is dat vaak verticaal.
    Niet goed. align-items werkt op de kruisas.
  6. Vraag 6. Welke property maakt ruimte tussen flex items?



    Goed. gap maakt ruimte tussen items.
    Niet goed. Gebruik gap voor ruimte tussen flex items.
  7. Vraag 7. Welke property laat items naar een nieuwe regel gaan?



    Goed. Met flex-wrap: wrap mogen items doorlopen.
    Niet goed. Hiervoor gebruik je flex-wrap.
  8. Vraag 8. Wat doet flex: 1 vaak?



    Goed. flex: 1 wordt vaak gebruikt voor gelijke flex-items.
    Niet goed. flex: 1 gaat over ruimteverdeling van flex items.
  9. Vraag 9. Waarvoor is flexbox vooral geschikt?



    Goed. Flexbox is sterk in één richting.
    Niet goed. Flexbox is vooral handig voor rijen of kolommen.
  10. Vraag 10. Wat is een goede manier om flexbox te oefenen?



    Goed. Speel het spel. Het helpt echt.
    Niet goed. Flexbox Froggy is een goede oefening.