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

outline: none, de meest destructieve regel in CSS

outline: none, de meest destructieve regel in CSS

*:focus { outline: none; } Eén regel. En elke toetsenbordgebruiker op je website navigeert blind.

Lichtgrijze tekst op een witte achtergrond

Lichtgrijze tekst op een witte achtergrond

Contrastverhouding: 2,85:1. Vereist: 4,5:1. Dit is de meest voorkomende contrastfout op het web. En ik snap waarom. Het ziet er strak uit. Rustig. Modern.

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.