We bouwen een hero-sectie als <header>.
Je gebruikt hierbij je eigen design tokens en kunt optioneel een achtergrondafbeelding met overlay toevoegen.
De hero vormt het visuele en inhoudelijke hoofdingangspunt van je pagina,
en vervult dus de rol van de <header>.
Plaats de inhoud (titel, tekst, knoppen) binnen een .container zodat de tekst
gecentreerd en leesbaar blijft, ook op brede schermen.
<header class="hero" role="banner">
<div class="container text-center py-5">
<h1 class="fw-bold mb-2">Welkom op onze site</h1>
<p class="lead mb-3">Korte, duidelijke baseline in één zin.</p>
<a class="btn btn-primary me-2" href="#main-content">Start hier</a>
<a class="btn btn-outline-primary" href="/over.html">Meer info</a>
</div>
</header>
<main id="main-content" class="container">
<h2 class="pt-4">Sectie 1</h2>
<p>Inhoud …</p>
</main>
---
Plaats dit na je design-tokens in assets/css/custom.css.
/* ---- Hero basis ---- */
.hero{
/* Responsieve minimumhoogte: 40–60vh, groeit mee met content */
min-height: clamp(40vh, 55vh, 60vh);
/* Centreringsmethode (Grid) – 1 regel voor beide assen */
display: grid;
place-items: center;
/* Overlay en pseudo-elementen stapelen netjes binnen de hero */
position: relative;
isolation: isolate;
/* Achtergrondafbeelding met fallback:
- Eerst probeert de browser de variabele --hero-img (bijv. url('...')).
- Als die niet bestaat, toont hij de gradient hieronder als backup. */
background-image: var(--hero-img, linear-gradient(180deg, rgba(0,0,0,.04), transparent));
background-position: center;
background-size: cover;
background-repeat: no-repeat;
}
/* Overlay: extra contrast bij foto’s */
.hero::before{
content: "";
position: absolute; inset: 0;
background: linear-gradient(180deg, rgba(0,0,0,.45), rgba(0,0,0,.30));
z-index: -1;
}
/* Tekst in de hero volgt je themakleuren */
.hero :where(h1, .lead){ color: var(--brand-text); }
/* Donkere foto? activeer lichte UI */
.hero[data-theme="dark"] :where(h1, .lead){ color: #fff; }
.hero[data-theme="dark"] .btn.btn-outline-primary{
color: #fff; border-color: #fff;
}
.hero[data-theme="dark"] .btn.btn-outline-primary:hover{
background: rgba(255,255,255,.12);
}
/* Soepele scroll + juiste offset onder sticky nav */
:root{ scroll-behavior: smooth; }
#main-content{ scroll-margin-top: 80px; } /* pas aan aan je navbar-hoogte */
Je hebt geen extra klasse nodig. Gebruik gewoon een inline variabele voor de hero-foto.
<header class="hero" role="banner"
style="--hero-img: url('../img/hero.jpg');"
data-theme="dark">
<div class="container text-center py-5">
<h1 class="fw-bold mb-2">Alles voor jouw project</h1>
<p class="lead mb-3">Sterke baseline. Kort en krachtig.</p>
<a class="btn btn-primary me-2" href="#main-content">Aan de slag</a>
<a class="btn btn-outline-primary" href="/over.html">Ontdek meer</a>
</div>
</header>
style-attribuut:<header class="hero" style="--hero-img: url('../img/hero-sf.jpg');">
.page-sf .hero { --hero-img: url("../img/hero-sf.jpg"); }
Is je foto erg donker? Voeg dan data-theme="dark" toe aan het element zodat de tekst en knoppen automatisch wit worden.
--brand-text en .btn-primary.data-theme="dark" voor witte tekst/outline-knoppen.#main-content.clamp().--hero-img (fallback = gradient).data-theme="dark" toegepast.role="banner" per pagina.Een hero-foto moet scherp, licht en snel laden. Gebruik deze richtlijnen:
| Gebruik | Breedte × hoogte | Formaat | Doelgrootte | Kleurprofiel |
|---|---|---|---|---|
| Desktop | 1600 × 800 px | JPEG (80–85 %) / WebP | < 350 KB | sRGB 72 ppi |
| Tablet | 1200 × 600 px | JPEG / WebP | < 280 KB | sRGB 72 ppi |
| Mobiel | 1000 × 1400 px | JPEG / WebP | < 300 KB | sRGB 72 ppi |
WebP is 25–35 % kleiner bij gelijke kwaliteit. JPEG blijft een prima fallback.
background-position: center; werkt dan het best)./* mobiel eerst */
.hero{ --hero-img: url("../img/hero-1000x1400.jpg"); }
/* tablet */
@media (min-width: 768px){
.hero{ --hero-img: url("../img/hero-1200x600.jpg"); }
}
/* desktop */
@media (min-width: 1200px){
.hero{ --hero-img: url("../img/hero-1600x800.jpg"); }
}
Extra leesbaarheid? Verhoog overlay-opacity bij drukke beelden:
.hero::before{ background: linear-gradient(180deg, rgba(0,0,0,.55), rgba(0,0,0,.35)); }