Wcag uitgelegd

Klikbare div in plaats van een button

Klikbare div in plaats van een button — WCAG 2.1.1 Toetsenbord (post 1/9)

Een div met een onclick. Ziet eruit als een knop. Doet iets als je erop klikt.

Maar druk op Tab. Niets. De div krijgt geen focus. Druk op Enter. Niets. De div reageert niet op het toetsenbord.

Voor een muisgebruiker: een knop. Voor een toetsenbordgebruiker: onzichtbaar.

Dit is de meest voorkomende toetsenbordfout die ik tegenkom bij audits. En het is zo makkelijk te voorkomen.

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

<!-- Wel doen -->
<button type="button" onclick="verstuur()">Versturen</button>

Een <button> is standaard focusbaar, activeerbaar met Enter en Spatie, en heeft de juiste rol voor schermlezers. Gratis. Zonder extra code.

“Maar ik kan toch tabindex en een keydown-handler toevoegen?”

Ja. En role=“button”. En aria-pressed. En de juiste styling voor :focus-visible. En testen of Enter en Spatie allebei werken. Of je gebruikt gewoon <button>.

De vuistregel:

  • Doet het iets op de pagina? -> <button>
  • Gaat het ergens naartoe? -> <a href="...">
  • Nooit een <div> of <span> voor interactie

Related Posts

JavaScript dat de focus actief verwijdert

JavaScript dat de focus actief verwijdert

element.addEventListener("focus", function() { this.blur(); }); Een element krijgt focus. JavaScript verwijdert de focus direct. Het element heeft een fractie van een seconde focus gehad. De gebruiker merkt niets.

Links die alleen door kleur herkenbaar zijn

Links die alleen door kleur herkenbaar zijn

Een alinea tekst. Ergens staat een link. Blauw. Geen onderstreping.

overflow: hidden knipt de focusindicator af

overflow: hidden knipt de focusindicator af

Een mooie kaartcomponent. Afgeronde hoeken. overflow: hidden om te voorkomen dat content buiten de hoeken valt.