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

Focusindicator die opgaat in de achtergrond

Focusindicator die opgaat in de achtergrond

Er is een focusindicator. Technisch gezien. Een lichtgrijze outline (#E0E0E0) op een witte achtergrond. 1 pixel dik.

aria-labelledby verwijst naar de verkeerde tekst

aria-labelledby verwijst naar de verkeerde tekst

Een invoerveld. Zichtbaar label: “E-mailadres.” Maar aria-labelledby verwijst naar een verborgen element met: “Voer uw elektronische postadres in.”

Mouseover zonder focus-equivalent

Mouseover zonder focus-equivalent

Je hovert over een tekst. Een tooltip verschijnt. Handige extra informatie.