Een hero-sectie is het grote visuele gedeelte bovenaan een webpagina. Vaak bevat een hero een achtergrondafbeelding, een titel, een korte inleidende tekst en soms ook een knop of link.
Omdat de hero meestal als eerste zichtbaar is, speelt die een belangrijke rol in de eerste indruk van een website.
Een goede hero combineert beeld, typografie en lay-out op een duidelijke en aantrekkelijke manier.
Een hero start vaak met een groot blok met een achtergrondafbeelding.
Met background-size: cover zorg je ervoor dat de afbeelding
het volledige vlak vult.
<header class="hero-basic"></header>
.hero-basic {
height: 18rem;
background-image: url("afbeelding.jpg");
background-size: cover;
background-position: center;
}
cover zorgt ervoor dat het volledige vlak gevuld wordt.
Een deel van de afbeelding kan daardoor buiten beeld vallen.
Tekst op een foto is niet altijd goed leesbaar. Daarom wordt vaak een overlay toegevoegd: een kleurlaag of gradient bovenop de afbeelding.
In dit voorbeeld gebruiken we een linear-gradient() samen met de afbeelding
in background-image.
.hero-overlay {
height: 18rem;
background-image:
linear-gradient(
to top,
rgba(0, 0, 0, 0.7) 0%,
rgba(0, 0, 0, 0.4) 40%,
rgba(0, 0, 0, 0) 100%
),
url("afbeelding.jpg");
background-size: cover;
background-position: center;
}
De gradient staat vooraan, de afbeelding achteraan. Zo wordt de onderkant donkerder en blijft tekst beter leesbaar.
In veel hero-secties staat de tekst niet bovenaan, maar onderaan in beeld.
Met display: flex is dat eenvoudig op te lossen.
<header class="hero-flex">
<h1 class="hero-flex-text">
<span class="hero-flex-first-line">Beeld</span>
<span class="hero-flex-second-line">
Twijfel & <span class="hero-flex-italic">Constructie</span>
</span>
</h1>
</header>
.hero-flex {
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: center;
text-align: center;
height: 20rem;
background-image:
linear-gradient(
to top,
rgba(0, 0, 0, 0.7) 0%,
rgba(0, 0, 0, 0.4) 40%,
rgba(0, 0, 0, 0) 100%
),
url("afbeelding.jpg");
background-size: cover;
background-position: center;
}
.hero-flex-text {
margin-bottom: 2rem;
color: white;
}
Door justify-content: flex-end te gebruiken, komt de inhoud onderaan in de hero te staan.
Met align-items: center wordt de tekst horizontaal gecentreerd.
In een hero wordt vaak gewerkt met verschillende lettergroottes en lettergewichten. Zo ontstaat meer hiërarchie tussen de verschillende regels van de titel.
.hero-flex-first-line {
font-size: clamp(2.5rem, 8vw, 6rem);
font-weight: 800;
line-height: 1;
display: inline-block;
}
.hero-flex-second-line {
font-size: clamp(1.8rem, 5vw, 4rem);
font-weight: 200;
display: block;
}
.hero-flex-italic {
font-style: italic;
}
In dit voorbeeld zie je dat:
span
Gebruik een span wanneer je een deel van een tekstregel
apart wil opmaken.
Soms krijgt een hero een decoratieve, afgeronde onderkant.
CSS kan geen negatieve border-radius maken,
maar we kunnen dit effect wel simuleren met een pseudo-element.
We plaatsen een extra vorm onderaan de hero met ::after.
Die vorm is breder dan de hero en wordt gecentreerd.
.hero-curve {
position: relative;
overflow: hidden;
}
.hero-curve-text {
margin-bottom: 3rem;
color: white;
/* Zorgt dat tekst boven de boog blijft */
position: relative;
z-index: 2;
}
.hero-curve::after {
content: "";
position: absolute;
/* Plaats in het midden */
left: 50%;
transform: translateX(-50%);
bottom: -5rem;
width: 120%;
height: 8rem;
background: white;
/* Vorm van de boog */
border-top-left-radius: 50% 100%;
border-top-right-radius: 50% 100%;
z-index: 1;
}
De boog is breder dan de hero en wordt gecentreerd met
left: 50% en transform: translateX(-50%).
position: relative::after120%)left: 50% en transformz-index
Zonder transform: translateX(-50%) staat de boog niet mooi in het midden.
Een goede hero-sectie combineert meerdere CSS-technieken:
background-image voor de fotolinear-gradient() voor een overlayflexbox voor de plaatsing van de tekstspan-elementen voor typografische accentenIn de praktijk wordt een hero vaak gebruikt om de bezoeker meteen een duidelijke eerste indruk te geven van de inhoud van een pagina.
Terug naar boven