Wcag uitgelegd

Dialoogvenster krijgt geen focus bij openen

Dialoogvenster krijgt geen focus bij openen. WCAG 2.4.3 Focusvolgorde (post 2/11)

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.

Je kunt de popup zien. Maar niet bedienen. Niet zonder tientallen keren op Tab te drukken tot je toevallig bij de knoppen in de popup aankomt.

Dit is een van de meest frustrerende toetsenbordproblemen. Het venster is er. De knoppen zijn er. Maar de focus is ergens anders.

// Niet doen: popup tonen zonder focus te verplaatsen
function openDialog() {
  dialog.style.display = "block";
  // Focus blijft waar die was
}

// Wel doen: focus naar het dialoogvenster
function openDialog() {
  dialog.style.display = "block";
  dialog.querySelector("button, [href], input")?.focus();
}

Of gebruik het <dialog>-element:

<dialog id="mijnDialog">
  <h2>Cookies</h2>
  <button>Accepteren</button>
  <button>Weigeren</button>
</dialog>
document.getElementById("mijnDialog").showModal();
// Focus gaat automatisch naar het dialoogvenster

showModal() doet het zware werk: focus verplaatsen, focus trap, Escape om te sluiten. Allemaal gratis.

Geldt voor: cookiebanners, bevestigingspopups, lightboxes, mobiele menu’s, videoplayers in een overlay, formulieren in een modal.

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.

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.

Invoerveld zonder zichtbare rand

Invoerveld zonder zichtbare rand

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