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?
- Open flexboxfroggy.com/#nl.
- Je ziet kikkers en waterlelies op het scherm.
- De kikker moet naar de juiste waterlelie.
- Links of onderin staat een CSS-editor.
- Je typt daar flexbox-regels, bijvoorbeeld
justify-content: center;. - Als de kikker goed staat, ga je door naar het volgende level.
- Lees per level goed welke property je oefent.
- 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;
}
.kaartenis de flex container.- De drie
<article>-elementen zijn flex items. display: flexzet de items standaard naast elkaar.gapmaakt 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;
}
gaphoort 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;
}
nowrapis standaard: items blijven op één regel.wraplaat 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: 1is 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: flexzet de kaarten in een flex layout.flex-wrap: wraplaat kaarten doorlopen als er te weinig ruimte is.gapmaakt ruimte tussen de kaarten.flex: 1laat kaarten meegroeien.min-widthvoorkomt 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: flexop de container, niet op elk item. - Gebruik
gapvoor ruimte tussen items. - Gebruik
justify-contentvoor verdeling in de hoofdrichting. - Gebruik
align-itemsvoor uitlijning op de kruisas. - Gebruik
flex-wrap: wrapals 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.
- Speel eerst minimaal de eerste tien levels van Flexbox Froggy.
- Maak een HTML-bestand met
<header>,<nav>,<main>en<footer>. - Zet in de navigatie minimaal drie links.
- Maak in
<main>een<section class="kaarten">. - Zet daarin minimaal drie
<article class="kaart">-elementen. - Gebruik flexbox om de links in het menu naast elkaar te zetten.
- Gebruik flexbox om de kaarten naast elkaar te zetten.
- Gebruik
gapvoor ruimte tussen de links en kaarten. - Gebruik
flex-wrap: wrapzodat de kaarten op kleinere schermen kunnen doorlopen. - Controleer in de browser wat er gebeurt als je het venster smaller maakt.
Quiz
-
Vraag 1. Op welk element zet je meestal
display: flex?
Goed. De container wordt de flex container.Niet goed.display: flexhoort op de container. -
Vraag 2. Wat zijn flex items?
Goed. Directe kinderen worden flex items.Niet goed. Flex items zijn de directe kinderen van de flex container. -
Vraag 3. Welke property bepaalt rij of kolom?
Goed. Metflex-directionkies je de richting.Niet goed. Rij of kolom regel je metflex-direction. -
Vraag 4. Welke waarde centreert items met
justify-content?
Goed.centercentreert in de hoofdrichting.Niet goed. De juiste waarde iscenter. -
Vraag 5. Waarvoor gebruik je
align-itemsmeestal?
Goed. Bij een rij is dat vaak verticaal.Niet goed.align-itemswerkt op de kruisas. -
Vraag 6. Welke property maakt ruimte tussen flex items?
Goed.gapmaakt ruimte tussen items.Niet goed. Gebruikgapvoor ruimte tussen flex items. -
Vraag 7. Welke property laat items naar een nieuwe regel gaan?
Goed. Metflex-wrap: wrapmogen items doorlopen.Niet goed. Hiervoor gebruik jeflex-wrap. -
Vraag 8. Wat doet
flex: 1vaak?
Goed.flex: 1wordt vaak gebruikt voor gelijke flex-items.Niet goed.flex: 1gaat over ruimteverdeling van flex items. -
Vraag 9. Waarvoor is flexbox vooral geschikt?
Goed. Flexbox is sterk in één richting.Niet goed. Flexbox is vooral handig voor rijen of kolommen. -
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.