H11 - Gridlayout
00 - Je eigen site krijgt de Holy Grail-indeling
De header komt bovenaan, de nav links, main in het midden, aside rechts en de footer onderaan. Body gebruikt grid; het menu en de footer blijven intern flexbox gebruiken. Je eerdere inhoud, achtergrond, kleurvariabelen en stylesheet blijven behouden.
01 - Grid is layout in twee richtingen
Flexbox is vooral handig voor één richting: een rij of een kolom. CSS Grid is handig als je tegelijk met rijen en kolommen werkt. Denk aan een complete pagina met header, menu, inhoud, zijbalk en footer.
Net als bij flexbox is grid een lastig layout-onderdeel. Daarom gaan we niet alle grid-opties
uit het hoofd leren. We gebruiken hier één overzichtelijke aanpak: onderdelen een naam geven
en daarna een layout tekenen met grid-template-areas.
Wil je grid goed oefenen, speel dan CSS Grid Garden. Speel het spel. Het helpt om grid visueel te begrijpen.
Hoe speel je CSS Grid Garden?
- Open cssgridgarden.com/#nl.
- Je ziet wortels en water op een speelveld.
- Je moet de wortels water geven met CSS Grid-regels.
- In de CSS-editor typ je grid-regels.
- Als de waterplek goed staat, ga je naar het volgende level.
- Lees per level goed welke grid-property je oefent.
- Speel rustig. Het doel is begrijpen, niet zo snel mogelijk klikken.
Actie — Alleen oefenen
- Bekijk je bestaande pagina met menu, hoofdinhoud, aside en footer. Schets een Holy Grail-indeling: header boven, nav links, main midden, aside rechts en footer onder.
- Speel desgewenst de eerste tien levels van CSS Grid Garden via de link hierboven. Dat is een afzonderlijke oefening.
- Bouw nu nog geen nieuw grid. Vanaf item 2 gebruik je de bestaande hoofdonderdelen voor je eigen indeling.
02 - De HTML: duidelijke onderdelen
Voor een grid-layout heb je eerst duidelijke HTML-onderdelen nodig. Dit kunnen semantische
HTML-tags zijn, zoals <header>, <nav>, <main>,
<aside> en <footer>.
<body>
<header class="site-header">Je bestaande naam en paginakop</header>
<nav class="site-nav">Je bestaande menulijst</nav>
<main class="site-main">
<div class="pagina-breedte">Je bestaande pagina-inhoud</div>
</main>
<aside class="site-aside">Je bestaande aanvullende informatie</aside>
<footer class="site-footer">Je bestaande twee alinea's en contactlink</footer>
</body>
De HTML blijft gewoon inhoud en structuur. De plaatsing doen we met CSS.
Actie — Bouw verder
- Controleer op alle vier de pagina's dat header.site-header, nav.site-nav, main.site-main, aside.site-aside en footer.site-footer directe kinderen van body zijn.
- De pagina-breedte-wrapper blijft binnen main. Verplaats geen menu of footer in die wrapper.
- Behoud de bestaande kaarten, lijsten, tabel, echte links, actieve navigatie en flexboxregels. Je voegt geen lege vervangende pagina toe.
03 - Geef elk onderdeel een grid-area naam
In CSS geef je elk HTML-element een naam met grid-area. Die naam gebruik je later
in de layout-tekening.
.site-header { grid-area: header; }
.site-nav { grid-area: nav; }
.site-main { grid-area: main; min-width: 0; }
.site-aside { grid-area: aside; }
.site-footer { grid-area: footer; }
- De naam mag je zelf kiezen.
- Kies duidelijke namen, zoals
header,nav,main,asideenfooter. - De naam in
grid-areaschrijf je zonder punt en zonder hekje. - Deze namen zijn geen classnamen en geen id's. Het zijn grid-area namen.
Actie — Bouw verder
- Geef in style.css de vijf bestaande hoofdclasses ieder een grid-area: header, nav, main, aside en footer, zoals in de uitleg.
- Deze namen bereiden de plaatsing voor; de definitieve indeling verschijnt pas na display:grid en de template in de volgende items.
- Behoud de bestaande flexboxregels. Een footer kan tegelijk een grid-item van body én een eigen flex-container zijn.
04 - Zet grid aan op de container
De grid-layout zet je op de container waar de onderdelen direct in staan. In dit eenvoudige
voorbeeld gebruiken we de body als grid container.
body {
display: grid;
}
Daarna kun je rijen, kolommen en gebieden definiëren.
body {
display: grid;
grid-template-columns: 190px minmax(0, 1fr) 230px;
grid-template-rows: auto 1fr auto;
}
grid-template-columnsbepaalt de kolommen.grid-template-rowsbepaalt de rijen.1frgebruikt de grid-eenheidfr: één fractie van de beschikbare ruimte.minmax(0, 1fr)geeft de middenkolom de overgebleven ruimte en laat haar zo nodig kleiner worden.min-width: 0op main voorkomt dat de minimale inhoudsbreedte de kolom onbedoeld blijft opduwen.autolaat de rijhoogte door de inhoud bepalen; de middelste rij kan met 1fr vrije hoogte gebruiken.
Actie — Bouw verder
- Zet op body display:grid en maak drie kolommen met
190px minmax(0, 1fr) 230pxen drie rijen metauto 1fr auto. - Minmax(0,1fr) laat de middenkolom de overgebleven ruimte gebruiken en zo nodig smaller worden. Geef .site-main ook min-width:0.
- Controleer dat oude main-width/max-width-regels in H9 naar de binnenwrapper zijn verhuisd. De definitieve plaatsing volgt in item 5.
05 - Layout tekenen met grid-template-areas
Met grid-template-areas teken je de layout als tekst. Elke regel tussen aanhalingstekens
is een rij. Elk woord is een cel.
body {
min-height: 100vh;
margin: 0;
padding: 24px;
display: grid;
grid-template-columns: 190px minmax(0, 1fr) 230px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
gap: 24px;
}
- De eerste rij bestaat uit drie keer
header, dus de header loopt over drie kolommen. - De tweede rij bevat
nav,mainenaside: de Holy Grail-indeling. - De derde rij is volledig
footer.
Dit is de kracht van named grid areas: je kunt de layout bijna lezen als een plattegrond.
Actie — Bouw verder
- Teken op dezelfde body de drie rijen met grid-template-areas: header over de hele breedte, daaronder nav/main/aside en onderaan footer over de hele breedte.
- Behoud de grid-area-namen van item 3 en stel gap:24px in.
- Open Home en Portfolio breed in de browser: je eigen inhoud staat nu in de Holy Grail-indeling. Nav en footer houden hun flexbox.
06 - De punt betekent: lege cel
Een punt in grid-template-areas betekent dat de cel geen benoemd gebied krijgt. Voor deze proef voegen we tijdelijk een lege rij toe, zodat alle bestaande onderdelen hun bestemming houden.
body {
grid-template-rows: auto 1fr 40px auto;
grid-template-areas:
"header header header"
"nav main aside"
". . ."
"footer footer footer";
}
Elke rij heeft evenveel cellen. De derde rij laat hier 40px extra ruimte vrij. Alle vijf hoofdonderdelen blijven bij hun eigen named area. Onze eindlayout heeft deze lege rij niet nodig.
Actie — Alleen oefenen
- Bewaar je werkende drie-rijentemplate en probeer tijdelijk de vier rijen uit het voorbeeld op dezelfde body.
- Bekijk de extra lege rij boven de footer. Je nav en alle andere hoofdonderdelen blijven zichtbaar.
- Herstel daarna grid-template-rows:auto 1fr auto en de oorspronkelijke drie template-rijen. De lege-cel-oefening is geen verplicht onderdeel van het eindproduct.
07 - Volledig basisvoorbeeld
Dit is een compacte basis voor een pagina-layout met named grid areas.
<body>
<header class="site-header">Je bestaande naam en paginakop</header>
<nav class="site-nav">Je bestaande menulijst</nav>
<main class="site-main">
<div class="pagina-breedte">Je bestaande pagina-inhoud</div>
</main>
<aside class="site-aside">Je bestaande aanvullende informatie</aside>
<footer class="site-footer">Je bestaande twee alinea's en contactlink</footer>
</body>
* {
box-sizing: border-box;
}
body {
min-height: 100vh;
margin: 0;
padding: 24px;
display: grid;
grid-template-columns: 190px minmax(0, 1fr) 230px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
gap: 24px;
}
.site-header { grid-area: header; }
.site-nav { grid-area: nav; }
.site-main { grid-area: main; min-width: 0; }
.site-aside { grid-area: aside; }
.site-footer { grid-area: footer; }
.site-nav ul {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 16px;
list-style: none;
padding: 0;
margin: 0;
}
/* De bestaande footer- en kaartflexbox, kleuren en achtergrond blijven staan. */
min-height: 100vhlaat de body minimaal de hoogte van het scherm gebruiken.gapmaakt ruimte tussen de grid-vakken.- De template bepaalt waar de onderdelen staan.
Actie — Bouw verder
- Vergelijk het basisvoorbeeld met je bestaande CSS; vervang niet je eigen HTML-inhoud door de korte labels uit het schema.
- Voeg min-height:100vh toe aan body, behoud padding:24px en gap:24px en controleer de bestaande dekkende achtergrondvlakken.
- Laat .site-nav ul op het brede scherm nu flex-direction:column en align-items:stretch gebruiken; de vier links staan onder elkaar in de linker kolom.
- Controleer alle vier pagina's. Je achtergrondafbeelding met cover blijft achter de hoofdonderdelen zichtbaar.
08 - Grid zichtbaar maken in de browser
Een grid-layout is soms lastig te zien, omdat de lijnen en namen niet automatisch zichtbaar op de pagina staan. In de browser kun je de grid-lijnen tijdelijk zichtbaar maken met de ontwikkelaarstools.
Firefox
- Open de pagina in Firefox.
- Klik met de rechtermuisknop op de pagina en kies Inspecteren.
- Selecteer het element waarop
display: gridstaat, bijvoorbeeldbody. - Zoek in de inspector naar het woord grid of naar het grid-icoon.
- Zet de grid-overlay aan.
- Firefox kan de grid-lijnen over de pagina tekenen.
- Je kunt de rijnummers en kolomnummers beter zien.
- Bij named grid areas kun je ook de indeling van je gebieden controleren.
- Dit verandert niets aan je HTML of CSS. Het is alleen een hulpmiddel in de browser.
Chrome en Edge
- Open de pagina in Chrome of Edge.
- Klik met de rechtermuisknop op de pagina en kies Inspecteren.
- Selecteer het grid-element.
- Klik in het tabblad Elements of Styles op het grid-icoon.
- Gebruik de layout- of overlay-opties om de grid-lijnen zichtbaar te maken.
Dit is een goede manier om te controleren of jouw tekst-tekening in
grid-template-areas overeenkomt met wat je in de browser ziet.
Je kunt eventueel ook tijdelijk opvallende achtergronden of borders aan je onderdelen geven. Dat is handig tijdens het bouwen, maar haal zulke testkleuren later weer weg.
header,
nav,
main,
aside,
footer {
border: 2px solid red;
}
- De browser-overlay is meestal de netste optie.
- Tijdelijke borders zijn handig als je snel wilt zien waar elk onderdeel staat.
- Laat test-borders niet per ongeluk in je eindversie staan.
Actie — Bouw verder
- Open Inspecteren volgens het stappenplan en zet de grid-overlay aan op body van je bestaande pagina.
- Vergelijk header, nav, main, aside en footer met de drie rijen van je template.
- Zet de overlay na de controle uit. Heb je tijdelijke testborders gebruikt, verwijder die dan; behoud je gewone ontwerpranden.
09 - Best practices
- Gebruik grid voor layout in twee richtingen: rijen en kolommen.
- Gebruik flexbox voor kleinere onderdelen in één richting.
- Gebruik duidelijke grid-area namen.
- Houd
grid-template-areasoverzichtelijk. - Zorg dat elke regel in
grid-template-areasevenveel cellen heeft. - Gebruik een punt
.voor een lege cel. - Gebruik de grid-overlay in de browser om je layout te controleren.
- Speel CSS Grid Garden om meer grid-opties te oefenen.
Actie — Controleer en rond af
- Controleer op elke pagina dezelfde drie kolommen en dezelfde named areas, met de juiste vijf directe kinderen van body.
- Controleer dat main zijn eigen inhoud behoudt, de binnenwrapper de leesbreedte begrenst en kaart- en footerflexbox nog werken.
- Herstel een verkeerd gespelde area-naam of achtergebleven proefregel. De lege-cel-oefening hoort niet in je eindlayout te staan.
10 - Afronding van je bestaande site
Actie — Controleer en rond af
- Rond je bestaande desktopsite af: de vier pagina's delen dezelfde Holy Grail-layout, achtergrond, kleurvariabelen en externe stylesheet.
- Controleer menu, footer, portfoliokaarten en echte links. Gebruik de grid-overlay waar nodig; maak geen nieuwe pagina of tweede gridversie.
- Een smal scherm kan nu nog te krap zijn. Noteer waar dat gebeurt: in H12 maken we juist deze bestaande indeling responsive.
Quiz
-
Vraag 1. Waarvoor is CSS Grid vooral handig?
Goed. Grid werkt sterk in twee richtingen.Niet goed. CSS Grid gebruik je voor rijen en kolommen. -
Vraag 2. Welke property zet grid aan?
Goed. Grid zet je aan metdisplay: grid.Niet goed. De juiste regel isdisplay: grid;. -
Vraag 3. Waarvoor gebruik je
grid-areain dit hoofdstuk?
Goed. Die naam gebruik je ingrid-template-areas.Niet goed.grid-areageeft een gebiedsnaam. -
Vraag 4. Welke property bepaalt de kolommen?
Goed. Kolommen maak je metgrid-template-columns.Niet goed. Kolommen horen bijgrid-template-columns. -
Vraag 5. Welke property bepaalt de rijen?
Goed. Rijen maak je metgrid-template-rows.Niet goed. Rijen horen bijgrid-template-rows. -
Vraag 6. Wat doet
1fr?
Goed.frverdeelt beschikbare ruimte.Niet goed.1frbetekent een fractie van de beschikbare ruimte. -
Vraag 7. Wat betekent een punt
.ingrid-template-areas?
Goed. De punt staat voor een lege grid-cel.Niet goed. In grid-template-areas betekent een punt een lege cel. -
Vraag 8. Wat moet kloppen bij elke regel in
grid-template-areas?
Goed. Het aantal cellen per rij moet gelijk zijn.Niet goed. Elke rij in de template moet evenveel cellen hebben. -
Vraag 9. Welke property maakt ruimte tussen grid-vakken?
Goed.gapwerkt ook bij CSS Grid.Niet goed. Gebruikgapvoor ruimte tussen grid-vakken. -
Vraag 10. Wat is een goede manier om meer grid-opties te oefenen?
Goed. Speel het spel om grid visueel te oefenen.Niet goed. CSS Grid Garden is een goede oefening.