Aanmelden

🅱️Bootstrap 5

Bouw snel een mooie, responsieve website met Bootstrap 5: grid, utilities, flexbox, componenten, formulieren, navigatie en interactieve onderdelen zoals modals en accordions. Je typt zelf de HTML, ziet het resultaat meteen in verschillende schermbreedtes en sluit af met een eigen landingspagina.

Je bekijkt deze pagina niet aangemeld — je kan de oefeningen, het opzoekwerk en de zelftest-quiz pas openen na het aanmelden.
Aanmelden

Overzicht

Werk de onderdelen hieronder in je eigen tempo af: lees de uitleg, doe het opzoekwerk en sluit af met een quizje. Klik een onderdeel open om te starten.

Bootstrap is een kant-en-klare verzameling CSS en JavaScript waarmee je snel een mooie, responsieve website bouwt. Je leert hoe je het inlaadt, wat een starter-pagina bevat en hoe je met classes werkt in plaats van eigen CSS te schrijven.

Wat is Bootstrap?

Bootstrap is het meest gebruikte front-end framework ter wereld: een verzameling kant-en-klare CSS (opmaak) en JavaScript (gedrag) die je in je pagina inlaadt. In plaats van zelf voor elke knop, kaart of menu CSS te schrijven, geef je je HTML-elementen de juiste classes en Bootstrap doet de rest.

⚡
Snel

Een nette knop, kaart of navigatiebalk in één regel HTML.

📱
Responsive

Je pagina past zich aan aan telefoon, tablet en computer: mobile first.

🧩
Consistent

Alle onderdelen hebben dezelfde stijl en werken in alle moderne browsers.

Wat heb je nodig?

Kennis van HTML (de structuur) en een beetje CSS (classes, id’s, selectors). Voor de interactieve onderdelen (modal, menu dat openklapt) gebruikt Bootstrap zijn eigen JavaScript: je hoeft dat niet te schrijven.

Bootstrap inladen via een CDN

De eenvoudigste manier om Bootstrap te gebruiken is een CDN (Content Delivery Network): een snelle server die de bestanden voor je host. Je laadt twee bestanden in:

  1. het CSS-bestand met een <link> in de <head>;
  2. het JavaScript-bestand (de “bundle”, inclusief Popper voor dropdowns en tooltips) met een <script> onderaan de body.
index.html<!doctype html>
<html lang="nl">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Mijn eerste Bootstrap-pagina</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
    <div class="container">
      <h1>Hallo Bootstrap!</h1>
      <p>Deze pagina is opgemaakt met Bootstrap 5.</p>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
  </body>
</html>
Vergeet de viewport-meta niet

<meta name="viewport" content="width=device-width, initial-scale=1"> zorgt dat een telefoon je pagina op de échte schermbreedte toont in plaats van uitgezoomd. Zonder deze regel werkt responsive design niet.

Je eerste Bootstrap-onderdelen

Op deze pagina is Bootstrap al voor je ingeladen, dus in de voorbeelden hoef je enkel de inhoud van de body te typen. Klik op Uitvoeren. Onder de code kies je de schermbreedte; rechtsonder in het voorbeeld zie je het actieve breakpoint.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Werken met classes

Bootstrap werkt met classes: korte namen die je aan een element geeft. Je kan er meerdere combineren, gescheiden door een spatie. Enkele voorbeelden die je in dit boek steeds terugziet:

ClassEffect
btn btn-successeen groene knop
text-centergecentreerde tekst
mt-3ruimte boven (margin-top)
col-md-6een kolom die vanaf tablet de helft breed is
d-none d-lg-blockverborgen, behalve op grote schermen

Je hoeft ze niet van buiten te leren: de documentatie op getbootstrap.com toont bij elk onderdeel voorbeeldcode die je kan kopiëren. Leren werken met de documentatie is de belangrijkste vaardigheid!

Mobile first

Bootstrap gaat uit van een smal scherm: wat je zonder breakpoint schrijft (col-6) geldt vanaf het kleinste scherm; met md, lg… pas je het aan voor grotere schermen.

Alternatieven: lokaal of via npm

Een CDN is handig, maar je kan Bootstrap ook downloaden en zelf in je map css/ en js/ bewaren (werkt offline), of installeren met npm install bootstrap in een groter project. Wie de kleuren en maten wil aanpassen, werkt met de Sass-bronbestanden (zie het hoofdstuk over thema’s). Voor deze cursus volstaat de CDN.

Synthese
Onthoud
  • Bootstrap = CSS + JavaScript die je met classes gebruikt.
  • Laad het CSS-bestand in de head en de JS-bundle onderaan de body.
  • Zonder de viewport-meta werkt responsive niet.
  • De documentatie (getbootstrap.com) is je beste vriend.
🎯 Nu ben jij aan de beurt: 1 Wat is Bootstrap?

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Het hart van Bootstrap: een raster van 12 kolommen. Je leert werken met container, row en col, kolommen naast elkaar zetten, offsets, volgorde en geneste rasters.

Container

Elke Bootstrap-lay-out begint met een container: het vak dat je inhoud centreert en marge geeft links en rechts.

ClassGedrag
containervaste maximale breedte die per breakpoint verandert (540, 720, 960, 1140, 1320 px), gecentreerd
container-fluidaltijd 100 % breed
container-mdvolledig breed tot md, daarna vaste breedte (ook sm, lg, xl, xxl)
Het raster: row en col

Binnen een container werk je met het 12-kolommenraster. Een .row is een rij, met daarin kolommen .col-…. De getallen van je kolommen tellen op tot 12: dan staan ze mooi naast elkaar. Zijn het er meer dan 12, dan schuift de rest naar een nieuwe lijn.

container>row>col-…
col
Gelijke kolommen

col verdeelt de ruimte gelijk over alle kolommen in de rij.

col-4
Vaste breedte

col-4 = 4 van de 12 delen, dus een derde. Drie keer col-4 = een volle rij.

col-auto
Op maat van de inhoud

col-auto is precies zo breed als de inhoud; de rest verdeelt de overige ruimte.

Probeer het in het lab: verander col-md-4 in col-md-6 of col-md-3 en let op het breakpoint. Bij een smal scherm (onder 768 px) staan de kolommen onder elkaar!

Kolommen naast elkaar, verschillende breedtes

De kolommen in één rij mogen verschillende breedtes hebben, zolang de som 12 is. Een typische indeling is een menu (3) naast de inhoud (9). Bij col-… zonder breakpoint staan ze op elk scherm naast elkaar; met een breakpoint (col-md-…) staan ze onder elkaar op smalle schermen.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Ruimte tussen kolommen: gutters

De ruimte tussen de kolommen heet de gutter. Je regelt ze op de .row met g-0 t/m g-5 (of gx- voor horizontaal en gy- voor verticaal).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Offset, volgorde en uitlijning
ClassWat doet het?
offset-md-2schuift de kolom 2 kolommen op (lege ruimte ervoor)
ms-autoduwt de kolom naar rechts (margin-start auto)
order-1, order-md-2 …bepaalt de volgorde (0 t/m 5, first, last)
align-items-centerop de row: alle kolommen verticaal centreren
justify-content-centerop de row: de kolommen horizontaal centreren
row-cols-3op de row: telkens 3 kolommen per lijn, zonder col-… te schrijven

Met row-cols-… maak je snel een galerij: alle kinderen krijgen dezelfde breedte en vallen vanzelf naar een nieuwe lijn.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Geneste rasters

Binnen een kolom kan je opnieuw een .row zetten met nieuwe kolommen. Die telt opnieuw tot 12 binnen de breedte van de ouderkolom.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • container → row → col, altijd in die volgorde.
  • Een rij heeft 12 kolomdelen; meer dan 12 schuift naar een nieuwe lijn.
  • col (gelijk), col-4 (vast), col-auto (op maat).
  • g-3 = gutter, offset-… = opschuiven, order-… = volgorde, row-cols-… = aantal per lijn.
🎯 Nu ben jij aan de beurt: 2 Container en grid

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Een goede website ziet er op elk scherm goed uit. Je leert de zes breakpoints kennen, kolommen laten veranderen per schermbreedte, elementen tonen of verbergen en afbeeldingen laten meeschalen.

Breakpoints

Een breakpoint is een schermbreedte waarop je lay-out mag veranderen. Bootstrap kent er zes. Elk breakpoint geldt vanaf die breedte en groter (mobile first).

NaamPrefixVanafTypisch apparaat
Extra small(geen)0 pxkleine telefoon
Smallsm576 pxtelefoon liggend
Mediummd768 pxtablet
Largelg992 pxlaptop
Extra largexl1200 pxdesktop
Extra extra largexxl1400 pxgroot scherm
Vanaf, niet enkel

col-md-6 geldt op md én alles daarboven (lg, xl, xxl). Wil je op grotere schermen iets anders, dan voeg je nog een class toe, bv. col-md-6 col-xl-3.

Kolommen per breakpoint

Combineer meerdere kolomclasses op één element: de laatste die van toepassing is voor de huidige breedte wint. Probeer het lab. Op xs staat elke kolom op een eigen lijn (col-12), vanaf md twee naast elkaar en vanaf xl vier. Klik door de breedtes heen!

Elementen tonen en verbergen

Met de display-classes toon of verberg je elementen per schermbreedte: d-none verbergt, d-block (of d-flex, d-inline…) toont. Met een breakpoint bepaal je vanaf wanneer.

Zichtbaar op…Classes
enkel xs en smd-block d-md-none
enkel mdd-none d-md-block d-lg-none
vanaf lgd-none d-lg-block
nooitd-none

Zo kan je bv. een uitgebreid menu tonen op een computer en een compact menu op een telefoon.

Responsive afbeeldingen

Een grote foto loopt op een telefoon uit zijn vak. Met img-fluid krijgt de afbeelding max-width: 100%; height: auto: ze wordt nooit breder dan haar ouder en behoudt de verhoudingen. Andere handige classes: rounded, rounded-circle (rond), img-thumbnail (rand) en object-fit-cover (bijsnijden).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Responsive tekst en video

Ook video’s en iframes schalen mee met een ratio-container: <div class="ratio ratio-16x9"> houdt de verhouding (16:9, 4:3, 21:9 of 1:1) op elke breedte. Tekst pas je aan met fs-1…fs-6 en uitlijning per breakpoint, bv. text-center text-md-start.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • Zes breakpoints: xs, sm, md, lg, xl, xxl (0, 576, 768, 992, 1200, 1400 px).
  • Classes met een breakpoint gelden vanaf die breedte.
  • d-none d-md-block = verborgen op telefoon, zichtbaar vanaf tablet.
  • img-fluid laat een afbeelding meeschalen; ratio doet hetzelfde voor video.
  • Zonder viewport-meta werkt niets van dit alles!
🎯 Nu ben jij aan de beurt: 3 Responsive design en breakpoints

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Bootstrap zorgt voor nette standaardtekst en een vast kleurenpalet. Je leert koppen, lead-tekst, uitlijning, gewicht, kleuren, achtergronden en het contextuele kleurensysteem (primary, success, danger…).

Koppen en gewone tekst

Bootstrap geeft <h1> t/m <h6> een nette maat en marge. Wil je de uitzicht van een kop zonder de betekenis (SEO!) te veranderen, gebruik dan de classes h1–h6 op een ander element. Grotere “display”-koppen (display-1–display-6) zijn ideaal voor een hero. Een inleidende alinea krijgt lead.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Tekst opmaken met utilities

Met utility-classes (kleine, éénmalige classes) pas je tekst snel aan, zonder CSS te schrijven:

Wat?Classes
uitlijningtext-start · text-center · text-end (ook text-md-center)
gewichtfw-bold · fw-semibold · fw-normal · fw-light
stijlfst-italic · fst-normal
hoofdletterstext-uppercase · text-lowercase · text-capitalize
groottefs-1 (groot) … fs-6 (klein)
decoratietext-decoration-none · text-decoration-underline
afbrekentext-truncate (… bij te lange tekst) · text-break · text-nowrap
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Kleuren: het contextuele systeem

Bootstrap heeft een vast palet met betekenis: elke kleur staat voor een “context”. Gebruik ze consequent!

primary
Hoofdkleur

De belangrijkste actie of merkkleur (blauw).

success
Gelukt

Iets is goed verlopen (groen).

danger
Gevaar/fout

Fout of destructieve actie, zoals verwijderen (rood).

warning
Let op

Waarschuwing (geel).

info
Informatie

Neutrale extra uitleg (lichtblauw).

secondary · light · dark
Neutraal

Grijs, heel licht en heel donker.

Je past ze toe met een voorvoegsel: text- voor tekstkleur, bg- voor achtergrond, border- voor randen, btn- voor knoppen. Combineer bv. text-success, bg-danger, border-warning.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Subtiele varianten en transparantie

Naast de volle kleuren heeft Bootstrap 5.3 zachte “subtle”-varianten voor achtergronden en randen: bg-primary-subtle, text-primary-emphasis, border-primary-subtle. Ideaal voor rustige blokken met leesbare tekst. Met bg-opacity-25 of text-opacity-50 maak je een kleur doorzichtig.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Lettertypen en toegankelijkheid

Bootstrap gebruikt standaard het systeemlettertype van de gebruiker (snel en vertrouwd). Wil je monospace tekst (code)? Gebruik font-monospace. Denk ook aan contrast: witte tekst op een gele achtergrond (bg-warning) is slecht leesbaar; gebruik daar text-dark. Kleur alleen mag nooit de enige aanduiding zijn (kleurenblinden!): voeg een icoon of tekst toe.

Tip

Wie 4,5:1 contrast wil halen tussen tekst en achtergrond, controleert het met de gratis WebAIM Contrast Checker.

Synthese
Onthoud
  • Koppen: h1–h6, grote display-1..6, inleiding met lead.
  • Utilities: text-center, fw-bold, fst-italic, fs-3, text-uppercase.
  • Kleuren: primary, secondary, success, danger, warning, info, light, dark, met voorvoegsel text-, bg-, border-.
  • Zachte varianten: -subtle en -emphasis.
  • Let op contrast en gebruik niet enkel kleur als informatie.
🎯 Nu ben jij aan de beurt: 4 Typografie en kleuren

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Met de spacing-utilities regel je marge en padding zonder CSS. Daarnaast leer je randen, schaduwen, afgeronde hoeken en breedte/hoogte instellen.

Margin en padding

Margin is de ruimte buiten een element (afstand tot de buren), padding is de ruimte binnen het element (tussen rand en inhoud). Bootstrap geeft ze korte namen die je zelf kan samenstellen:

m / p>kant (t b s e x y)>grootte (0–5, auto)
DeelBetekenis
m / pmargin of padding
t · btop (boven) · bottom (onder)
s · estart (links) · end (rechts) — draait om bij rechts-naar-links talen
x · ylinks + rechts · boven + onder
(leeg)alle vier de kanten
0 … 50 · 0,25 · 0,5 · 1 · 1,5 · 3 rem
autoautomatische marge (bv. mx-auto = centreren)

Voorbeelden: mt-3 (marge boven 1 rem), px-4 (padding links en rechts 1,5 rem), p-2 (padding rondom 0,5 rem), mb-0 (geen marge onder). Ook per breakpoint: p-2 p-md-5. Stel er hieronder zelf een samen:

Ruimte tussen elementen: gap en mx-auto

Voor een rij elementen (bv. knoppen) geef je niet aan elk element een marge, maar gebruik je gap-3 op de ouder (werkt bij d-flex en d-grid). Een blok centreren doe je met een vaste breedte en mx-auto.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Randen, hoeken en schaduw
Wat?Classes
rand rondomborder · border-2 … border-5 (dikte)
één kantborder-top · border-bottom · border-start · border-end
zonder randborder-0 · border-top-0
randkleurborder-primary · border-danger …
afgeronde hoekenrounded · rounded-3 · rounded-pill · rounded-circle
schaduwshadow-sm · shadow · shadow-lg
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Breedte, hoogte en overloop

Voor formaat zijn er handige classes: w-25, w-50, w-75, w-100, w-auto (procent van de ouder) en dezelfde voor hoogte: h-100. Dan zijn er mw-100 (max-width), vw-100/vh-100 (schermbreedte/-hoogte) en min-vh-100 (minstens schermhoogte). overflow-auto laat een scrollbalk verschijnen als de inhoud niet past.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Positie en z-index

Ook positioneren kan met classes: position-relative, position-absolute, position-fixed en position-sticky, gecombineerd met top-0, start-0, end-0, bottom-0 en translate-middle (centreren op het punt). Zo plaats je bv. een badge in het hoekje van een knop.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • m/p + kant (t, b, s, e, x, y) + grootte 0–5 (of auto): mt-3, px-4.
  • Ruimte tússen elementen: gap-3 op de ouder.
  • border, rounded, shadow voor rand, hoeken en schaduw.
  • w-50, h-100, mx-auto voor formaat en centreren.
  • position-absolute + top-0 end-0 voor positioneren.
🎯 Nu ben jij aan de beurt: 5 Spacing, randen en formaat

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Met flexbox schik je elementen in een rij of kolom, verdeel je de ruimte en centreer je moeiteloos. Bootstrap geeft je alle flex-eigenschappen als korte classes.

Wat is flexbox?

Standaard staan blokelementen onder elkaar. Zodra je d-flex op de ouder zet, worden de kinderen flex-items en staan ze naast elkaar in een rij. Daarna stuur je twee assen aan:

→
Hoofdas

De richting van de rij (horizontaal) of kolom (verticaal). Uitlijnen doe je met justify-content-….

↕
Dwarsas

Loodrecht op de hoofdas. Uitlijnen doe je met align-items-….

Twee niveaus

Flexbox werkt met een ouder (d-flex en de uitlijning) en kinderen (die zelf kunnen groeien, krimpen of van plaats wisselen). Het Bootstrap-raster uit hoofdstuk 2 is zelf gebouwd op flexbox.

Speel met flexbox

Kies in de demo een richting en uitlijning en zie meteen wat er gebeurt. Onder het voorbeeld staat de bijhorende Bootstrap-class.

Richting en uitlijning
DoelClasses
rij (standaard) of kolomflex-row · flex-column (ook flex-row-reverse)
hoofdas uitlijnenjustify-content-start · -center · -end · -between · -around · -evenly
dwarsas uitlijnenalign-items-start · -center · -end · -stretch
laten doorlopenflex-wrap · flex-nowrap
per breakpointflex-column flex-md-row

Het klassieke voorbeeld: een blok exact in het midden van de pagina zet je met d-flex justify-content-center align-items-center op de ouder.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Eén kind aansturen

Ook een kind heeft eigen classes: flex-grow-1 (neem alle vrije ruimte), flex-shrink-0 (niet krimpen), ms-auto (duw naar rechts met automatische marge), align-self-end (dit ene kind onderaan) en order-… (volgorde). Zo maak je een menubalk met het logo links en de knoppen rechts: geef het eerste knoppenitem ms-auto.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Flex of grid?

Gebruik het 12-kolommenraster (row/col) voor de grote pagina-indeling en flex-utilities voor uitlijning binnen een component (menu, kaart, knoppenrij). Ze vullen elkaar aan: in een col-md-6 kan je best een d-flex zetten.

Onthoud
  • d-flex op de ouder maakt een rij.
  • justify-content-… = hoofdas, align-items-… = dwarsas.
  • flex-column = kolom, flex-wrap = laten doorlopen, gap-3 = ruimte ertussen.
  • ms-auto duwt een kind naar rechts, flex-grow-1 laat het groeien.
🎯 Nu ben jij aan de beurt: 6 Flexbox

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

De eerste echte Bootstrap-componenten: knoppen in allerlei kleuren en maten, groepen knoppen, badges, meldingen (alerts), voortgangsbalken en spinners.

Knoppen

Een knop krijgt altijd de basisclass btn plus een variant uit het kleurenpalet: btn-primary, btn-success, btn-danger… Met btn-outline-… krijg je een knop met enkel een rand. Werkt op <button>, <a> en <input>.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Maten en toestanden
Wat?Classes
groot / kleinbtn-lg · btn-sm
volle breedtew-100, of een d-grid-ouder
uitgeschakeldattribuut disabled (bij een link: class disabled)
actiefactive
ladeneen spinner-border spinner-border-sm in de knop

Een knop die er niet uit mag zien als een knop maar wel als een link (bv. “Meer info”)? Gebruik btn btn-link.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Knoppengroepen

Zet knoppen naast elkaar in één balk met btn-group. Geef de groep role="group" en een aria-label. Met btn-toolbar combineer je meerdere groepen.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Badges

Een badge is een klein label, vaak een teller of status: <span class="badge text-bg-primary">. Met text-bg-… krijg je meteen een goed leesbare achtergrond-/tekstkleurcombinatie; met rounded-pill een ronde vorm.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Alerts

Een alert is een gekleurde melding: <div class="alert alert-success" role="alert">. Kies de context (success, danger, warning, info…), voeg een kop toe met alert-heading en links met alert-link. Een alert die de gebruiker kan wegklikken gebruikt alert-dismissible fade show en een sluitknop btn-close met data-bs-dismiss="alert" (dit werkt dankzij de Bootstrap-JavaScript, zonder dat je zelf code schrijft).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Voortgang en spinners

Een progress bar toont voortgang: een progress-vak met daarin een progress-bar waarvan je de breedte instelt (bv. style="width: 60%"). Voeg progress-bar-striped progress-bar-animated toe voor een bewegende streeppatroon. Een spinner (spinner-border of spinner-grow) toont dat er iets laadt.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • Knop = btn + variant (btn-primary, btn-outline-danger), maat btn-lg/btn-sm.
  • Groep: btn-group; volle breedte: d-grid.
  • Badge: badge text-bg-…; alert: alert alert-….
  • Sluitbare alert: alert-dismissible + btn-close met data-bs-dismiss="alert".
  • Progress: progress + progress-bar met width; laden: spinner-border.
🎯 Nu ben jij aan de beurt: 7 Knoppen, badges en alerts

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

De kaart (card) is het populairste Bootstrap-component: een vak met afbeelding, titel, tekst en knop. Daarnaast leer je lijsten (list-group), accordeons en tabellen.

De kaart

Een card is een flexibele container voor gegroepeerde inhoud. Elke kaart bestaat uit een aantal onderdelen die je zelf kiest:

card>card-img-top>card-body>card-title · card-text>btn
ClassOnderdeel
cardhet omhullende vak
card-img-topafbeelding bovenaan (loopt over de volle breedte)
card-bodyde padding-zone voor de inhoud
card-title · card-subtitletitel en ondertitel
card-textgewone tekst
card-header · card-footerbalk boven- en onderaan
card-linklink in de kaart
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Kaarten in het raster

Zet kaarten in een row met kolommen, zodat ze meeschalen. Met h-100 op de kaart worden alle kaarten in een rij even hoog, ook als de tekst verschilt. Probeer het lab: kies verschillende schermbreedtes en let op het aantal kaarten per rij.

Kop, voet en gekleurde kaarten

Met card-header en card-footer voeg je balken toe. Kleur de hele kaart met text-bg-primary of gebruik een gekleurde rand (border-success). Een afbeelding als achtergrond met tekst erover doe je met card-img-overlay.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
List group

Een list-group is een nette lijst met items (list-group-item). Handig voor menu’s, instellingen of een overzicht. Met list-group-item-action op een <a> worden de items klikbaar; met active markeer je de huidige, en list-group-flush haalt de buitenrand weg (handig in een kaart).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Accordeon

Een accordeon klapt onderdelen open en dicht en is ideaal voor veelgestelde vragen. Elk item heeft een knop met data-bs-toggle="collapse" en data-bs-target="#…" dat naar het id van het in- en uitklapbare deel wijst. Met data-bs-parent zorg je dat er telkens maar één open is.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • Kaart: card → card-img-top + card-body (card-title, card-text, knop).
  • Kaarten in row + col-…; h-100 maakt ze even hoog.
  • Lijst: list-group + list-group-item, klikbaar met -action.
  • Accordeon: data-bs-toggle="collapse" en data-bs-target koppelen knop en inhoud.
🎯 Nu ben jij aan de beurt: 8 Kaarten en lijsten

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Elke site heeft een menu. Je bouwt een responsive navbar die op een telefoon in een hamburgermenu verandert, plus tabs, pills, broodkruimels en paginering.

De navbar

De navbar is de menubalk bovenaan. Ze is standaard responsive: op een klein scherm klapt ze in tot een hamburgerknop. Onderdelen:

ClassOnderdeel
navbar navbar-expand-mdhet omhullende element (<nav>); expand-md = vanaf md volledig uitgeklapt
navbar-brandlogo of sitenaam
navbar-togglerde hamburgerknop (met data-bs-toggle="collapse")
navbar-collapse collapsehet deel dat inklapt (id = doel van de knop)
navbar-nav · nav-item · nav-linkde lijst met menu-items

Kleur en thema bepaal je met bg-dark/bg-primary en data-bs-theme="dark" (lichte tekst). Klik in het lab op 375 en gebruik de hamburgerknop!

Dropdown in het menu en vaste plaats

Een dropdown zet je in een nav-item dropdown met een link nav-link dropdown-toggle (data-bs-toggle="dropdown") en een <ul class="dropdown-menu"> met dropdown-items. Met sticky-top blijft de navbar bovenaan plakken bij scrollen, met fixed-top ligt ze altijd vast (dan heeft je body wat padding-top nodig).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Tabs en pills

Met nav nav-tabs of nav nav-pills maak je lijstjes met tabbladen. Verbind je ze met een tab-content (en data-bs-toggle="tab"), dan werkt het als echte tabbladen waarbij elke tab zijn eigen inhoud toont.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Broodkruimels en paginering

Breadcrumbs tonen waar de bezoeker zich in de site bevindt: <nav aria-label="breadcrumb"><ol class="breadcrumb"> met breadcrumb-item-items, waarvan het laatste active is. Paginering hoort bij lange lijsten: pagination met page-item en page-link.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • Navbar: navbar navbar-expand-md + brand + toggler + navbar-collapse met navbar-nav.
  • Het data-bs-target van de toggler = het id van het inklapbare deel.
  • Dropdown: dropdown + data-bs-toggle="dropdown" + dropdown-menu.
  • Tabs/pills: nav-tabs/nav-pills + tab-content.
  • Breadcrumb en pagination hebben een <nav aria-label>.
🎯 Nu ben jij aan de beurt: 9 Navigatie

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Bootstrap maakt van saaie invoervelden nette, consistente formulieren: tekstvelden, keuzelijsten, checkboxes, radioknoppen, switches, invoergroepen en validatiemeldingen.

Tekstvelden

Elk invoerveld krijgt de class form-control (nette breedte, rand en focus-effect) en een <label class="form-label"> ervoor. Koppel label en veld altijd met for en id: zo kan je op het label klikken en lezen schermlezers het voor.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Formulieren in het raster

Met het raster zet je velden naast elkaar en laat je ze op smalle schermen onder elkaar staan. Probeer het lab en test de breedtes.

Keuzelijsten, checkboxes, radio en switch
VeldClasses
keuzelijst<select class="form-select">
checkboxform-check met form-check-input + form-check-label
radioknopidem, met hetzelfde name voor de groep
switchform-check form-switch
schuifbalkform-range
bestand kiezenform-control op type="file"
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Invoergroepen en zwevende labels

Met een input-group plak je tekst of knoppen vast aan een veld (input-group-text). Bij floating labels zweeft het label in het veld en schuift het naar boven zodra je typt: form-floating met eerst de input (met placeholder) en dán de label.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Validatie

Bootstrap toont validatie met de classes is-valid (groen) en is-invalid (rood) op het veld en een bericht in valid-feedback of invalid-feedback. Met HTML-attributen (required, minlength, type="email") en needs-validation + novalidate laat je de browser de controle doen; een klein stukje JavaScript zet dan was-validated op het formulier. Let op: validatie in de browser is enkel een gemak; controleer altijd ook op de server!

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • Tekstveld: form-label + form-control, gekoppeld met for/id.
  • Keuzelijst: form-select; vinkje/radio/switch: form-check + form-check-input.
  • Naast elkaar: raster (row g-3 + col-md-6).
  • Validatie: is-valid/is-invalid + valid-feedback/invalid-feedback.
  • Controleer altijd ook aan de serverkant.
🎯 Nu ben jij aan de beurt: 10 Formulieren

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Gegevens tonen doe je met tabellen. Je leert nette, responsive tabellen maken, afbeeldingen met bijschrift (figure) en de gratis Bootstrap Icons gebruiken.

Een nette tabel

Een gewone HTML-tabel wordt met de class table meteen mooi opgemaakt. Voeg varianten toe door classes te combineren:

ClassEffect
table-stripedom-en-om gekleurde rijen (zebra)
table-hoverrij licht op onder de muis
table-borderedranden rondom alle cellen
table-smcompacte tabel met minder padding
table-darkdonkere tabel
table-success …een hele tabel, rij (tr) of cel kleuren
align-middleverticaal centreren in de cellen
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Responsive tabellen

Een brede tabel loopt op een telefoon uit het scherm. Zet de tabel in een <div class="table-responsive">: bij een te smal scherm verschijnt dan een horizontale scrollbalk in plaats van dat de hele pagina breder wordt. Met table-responsive-md geldt dat enkel onder md.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Afbeeldingen met bijschrift

Een afbeelding met tekst eronder zet je in een <figure class="figure"> met figure-img img-fluid en figure-caption. Voor een klein profielfoto’tje gebruik je rounded-circle met een vaste width/height, en met object-fit-cover snijd je de foto netjes bij zodat ze niet uitrekt.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Bootstrap Icons

Bootstrap Icons zijn meer dan 2000 gratis iconen (icons.getbootstrap.com). Je laadt ze in met een extra <link> naar het CSS-bestand (in deze cursus al gedaan) en gebruikt ze als <i class="bi bi-…"></i>. Het zijn lettertekens, dus je geeft ze grootte en kleur met gewone classes (fs-1, text-danger). Gebruik ze in knoppen, menu’s en lijsten, en geef een icoon zonder tekst een aria-label.

Het CDN-adres

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • table + table-striped, table-hover, table-bordered.
  • Brede tabel: in table-responsive.
  • thead, tbody en scope zijn goed voor toegankelijkheid.
  • Foto met tekst: figure + figcaption.
  • Iconen: <i class="bi bi-…">, kleur en grootte via tekstclasses.
🎯 Nu ben jij aan de beurt: 11 Tabellen, figuren en iconen

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Modals, dropdowns, tooltips, popovers, toasts, carousels en offcanvas werken dankzij de Bootstrap-JavaScript. Je hoeft bijna geen JavaScript te schrijven: het gaat via data-bs-attributen.

Hoe werkt Bootstrap-JavaScript?

Onderaan je pagina laad je de bundle in (hoofdstuk 1). Die zoekt naar data-attributen op je elementen. Zo werkt bijna alles volgens hetzelfde recept:

knop met data-bs-toggle>data-bs-target="#id">element met dat id
data-bs-toggleComponent
collapsein- en uitklappen (menu, accordeon)
modaleen pop-upvenster
dropdownuitklapmenu
tab / pilltabbladen
offcanvasinschuivend zijpaneel
tooltip · popoverkleine tekstballonnen (moeten met JavaScript geactiveerd worden)

Voor speciale situaties (bv. een modal openen na 5 seconden) gebruik je de JavaScript-API: new bootstrap.Modal(element).show().

Modal

Een modal is een pop-upvenster boven de pagina. De bouw is altijd: modal → modal-dialog → modal-content → modal-header / modal-body / modal-footer. De knop verwijst met data-bs-target naar het id van de modal; een sluitknop gebruikt data-bs-dismiss="modal". Voeg modal-dialog-centered toe om te centreren of modal-lg voor een grotere.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Dropdown, collapse en offcanvas

Een dropdown bestaat uit een knop met dropdown-toggle en data-bs-toggle="dropdown", gevolgd door een dropdown-menu. Met collapse toon of verberg je een stuk inhoud. Offcanvas is een paneel dat vanaf de zijkant inschuift (menu’s op mobiel, winkelwagen…).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Tooltip en popover

Een tooltip is een klein tekstballonnetje bij hover; een popover is een grotere met titel en inhoud bij klik. Ze zijn “opt-in”: je moet ze één keer met JavaScript activeren, omdat ze de bibliotheek Popper gebruiken. Zet de tekst in data-bs-title (tooltip) of data-bs-title en data-bs-content (popover).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Carousel

Een carousel toont een reeks slides (foto’s) die je kan doorbladeren. Belangrijk: elke slide is een carousel-item en precies één daarvan heeft ook active. De pijlen gebruiken data-bs-slide="prev"/"next", de puntjes data-bs-slide-to. Met data-bs-ride="carousel" loopt hij vanzelf.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Toast en de JavaScript-API

Een toast is een korte melding die na een paar seconden verdwijnt (denk aan “Opgeslagen!”). Toasts start je altijd met JavaScript, met new bootstrap.Toast(element).show(). Zo kan je ze koppelen aan een eigen gebeurtenis, bijvoorbeeld het resultaat van een AJAX-aanvraag.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Synthese
Onthoud
  • Gebruik data-bs-toggle + data-bs-target="#id"; sluiten met data-bs-dismiss.
  • Modal: modal › modal-dialog › modal-content › header/body/footer.
  • Tooltip, popover en toast moet je met JavaScript activeren.
  • Carousel: precies één carousel-item active.
  • De JavaScript-bundle (met Popper) moet onderaan de body staan.
🎯 Nu ben jij aan de beurt: 12 Interactieve componenten

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Bootstrap zien alle sites aan… tenzij je het aanpast. Je leert de donkere modus, CSS-variabelen, je eigen CSS naast Bootstrap schrijven en enkele goede gewoonten.

Donkere modus

Sinds Bootstrap 5.3 werkt een kleurmodus met het attribuut data-bs-theme op het <html>-element (voor de hele pagina) of op één component. De waarden zijn light en dark: alle achtergronden, teksten, kaarten en formulieren passen zich meteen aan. Met een beetje JavaScript laat je de bezoeker wisselen (en onthoud je de keuze in localStorage).

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
CSS-variabelen

Bootstrap gebruikt CSS-variabelen (custom properties) zoals --bs-primary, --bs-body-bg of --bs-border-radius. Door ze te overschrijven verander je het uitzicht van de hele site, zonder Bootstrap zelf aan te raken. Overschrijf ze in je eigen CSS, op :root (globaal) of op één element (lokaal).

Variabelen in gewone CSS

Een CSS-variabele lees je met var(--naam). Voorbeeld: background: var(--bs-primary); gebruikt de huidige primaire kleur.

✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Je eigen CSS toevoegen

Bootstrap dekt veel, maar niet alles. Voor je eigen stijlen schrijf je een eigen stylesheet en laad je die ná Bootstrap in, zodat jouw regels voorrang krijgen. Goede gewoonten:

  • Pas Bootstrap-bestanden nooit rechtstreeks aan (bij een update zijn je wijzigingen weg).
  • Geef eigen onderdelen een eigen class (.mijn-hero), niet door bestaande Bootstrap-classes te overschrijven.
  • Zoek eerst of Bootstrap al een utility heeft; schrijf pas dan zelf CSS.
  • Gebruik zo weinig !important mogelijk.

In een echte pagina ziet dat er zo uit:

index.html (head)<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="css/stijl.css" rel="stylesheet">   <!-- jouw CSS, ná Bootstrap -->
✏️ Probeer zelf — pas de code aan en klik op Uitvoeren
Schermbreedte van het voorbeeld:
Sass, npm en de custom builder

Wie diep wil aanpassen (eigen kleurenpalet, breakpoints, sommige componenten uitschakelen), werkt met de Sass-bronbestanden: je overschrijft variabelen zoals $primary vóór het importeren en compileert alles tot één kleiner CSS-bestand. Dat is een stap voor gevorderden (Node.js, npm, een bundler zoals Vite). Voor de meeste schoolprojecten volstaan CDN + eigen CSS en variabelen.

Onthoud
  • data-bs-theme="dark" schakelt de donkere modus in (op html of één element).
  • CSS-variabelen (--bs-primary…) overschrijf je in je eigen CSS.
  • Eigen stylesheet ná Bootstrap laden; eigen classes gebruiken.
  • Bootstrap zelf nooit rechtstreeks aanpassen.
🎯 Nu ben jij aan de beurt: 13 Thema en aanpassen

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.

Tijd om alles samen te brengen. Je bouwt stap voor stap een complete, responsive pagina voor een bakkerij: navbar, hero, producten, formulier, modal en footer.

De opdracht

Je bouwt een eenpagina-website voor de bakkerij “De Krakeling”. De pagina moet op een telefoon, tablet en computer goed werken. Onderdelen:

  1. Navbar die inklapt op mobiel, met logo en 3 links;
  2. Hero met grote titel, lead-tekst en een knop;
  3. Producten: minstens 3 kaarten in een responsive raster;
  4. Contactformulier in een raster (voornaam/achternaam naast elkaar);
  5. Een modal (bv. “Openingsuren”);
  6. Footer met tekst gecentreerd.
Werkwijze

Werk van boven naar onder. Test na elk onderdeel op 375 px en op 1200 px. Kijk in de documentatie (getbootstrap.com) als je de classes vergeten bent: zoek op de naam van het component.

Voorbeeld: de eerste drie onderdelen

Zo kan het begin eruitzien. Bekijk de opbouw, verander iets en test op de verschillende breedtes. Let op hoe sticky-top, row-cols-1 row-cols-md-3 en h-100 samenwerken.

Controlelijst voor je eindresultaat
Vraag jezelf af
  • Staat de viewport-meta erin en laad je CSS én JS in?
  • Werkt de pagina op 375 px zonder horizontale scrollbalk?
  • Gebruik je het raster (container › row › col) correct?
  • Zijn alle afbeeldingen responsive en hebben ze een alt-tekst?
  • Zijn labels gekoppeld aan hun velden?
  • Is het contrast goed leesbaar?
  • Werken menu en modal met het toetsenbord?
Wat nu?

Je kent nu de basis van Bootstrap. Mogelijke vervolgstappen: een PHP-formulier laten verwerken (zie de PHP-cursus), je site publiceren op een webhost, een eigen kleurenpalet met Sass, of een ander framework leren zoals Tailwind CSS. Het belangrijkste blijft: veel oefenen en de documentatie leren gebruiken.

🎯 Nu ben jij aan de beurt: 14 Eindproject: een volledige site

Verwerk wat je hierboven las met de onderdelen hieronder. Ze horen bij deze theorie.