Offerte audit
Typ iets om te zoeken...

Wcag uitgelegd

Div als knop: naam maar geen rol

Div als knop: naam maar geen rol. WCAG 4.1.2 Naam, rol, waarde (post 2/12)

“Versturen.”

Een schermlezer leest de tekst. Maar zegt niet dat het een knop is. Want het is geen knop. Het is een div.

De bezoeker hoort “Versturen” en denkt: dat is een stuk tekst. Niet iets om op te klikken. Niet iets om mee te interacteren.

<!-- Niet doen: div als knop -->
<div class="knop" onclick="verstuur()">Versturen</div>
<!-- Schermlezer: "Versturen" -->

<!-- Wel doen: echt button-element -->
<button onclick="verstuur()">Versturen</button>
<!-- Schermlezer: "Versturen, knop" -->

Het verschil: twee woorden. “Versturen” vs. “Versturen, knop.” Dat “knop” vertelt de gebruiker dat het interactief is.

“Maar ik kan toch role=“button” toevoegen?”

Ja. Maar dan moet je ook:

  • tabindex="0" toevoegen (voor toetsenbordfocus)
  • onkeydown toevoegen (Enter en Spatie moeten werken)
  • De juiste cursor: pointer styling
  • Focusstijlen toevoegen

Of je gebruikt <button> en het werkt allemaal automatisch.

Dezelfde logica geldt voor:

  • <div> als checkbox -> gebruik <input type="checkbox">
  • <span> als link -> gebruik <a href="...">
  • <div> als selectiemenu -> gebruik <select>

Zelf verder met dit onderwerp

Related Posts

Knop die navigeert, link die een actie uitvoert

Knop die navigeert, link die een actie uitvoert

“Contact, knop.” Je drukt op Enter. Een nieuwe pagina opent. Maar het was een knop. Knoppen voeren acties uit. Ze navigeren niet.

WCAG 4.1.2: knop zonder naam

WCAG 4.1.2: knop zonder naam

“Knop.” Dat is wat een schermlezer zegt. Knop. Maar welke knop? Wat doet die?

Invoerveld zonder zichtbare rand

Invoerveld zonder zichtbare rand

Een wit invoerveld op een witte achtergrond. Met een lichtgrijze rand. Heel lichtgrijs. #D9D9D9.

WhatsApp ons (opent WhatsApp in een nieuw tabblad)