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>

Related Posts

Dialoogvenster krijgt geen focus bij openen

Dialoogvenster krijgt geen focus bij openen

Een popup verschijnt. “Wil je cookies accepteren?” Je drukt op Tab. En je zit in het navigatiemenu. Achter de popup. De focus is niet naar het dialoogvenster verplaatst.

Invoerveld zonder zichtbare rand

Invoerveld zonder zichtbare rand

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

Knop zonder naam

Knop zonder naam

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