Wcag uitgelegd

Focus verdwijnt na het sluiten van een dialoogvenster

Focus verdwijnt na het sluiten van een dialoogvenster — WCAG 2.4.3 Focusvolgorde (post 4/11)

Je klikt op “Verwijderen.” Een bevestigingspopup verschijnt. “Weet je het zeker?” Je drukt op “Annuleren.”

De popup sluit. Je drukt op Tab. Waar ben je?

Helemaal bovenaan de pagina. Bij het logo. Je was halverwege een tabel, je opende een popup, je sloot die, en nu moet je opnieuw door de hele pagina tabben om terug te komen waar je was.

Het probleem: na het sluiten van de popup keert de focus niet terug naar het element dat de popup opende. De focus gaat naar <body> — het begin van de pagina.

// Niet doen: focus verdwijnt
function sluitDialog() {
  dialog.style.display = "none";
}

// Wel doen: focus terug naar de trigger
let triggerElement = null;

function openDialog(trigger) {
  triggerElement = trigger;
  dialog.style.display = "block";
  dialog.querySelector("button")?.focus();
}

function sluitDialog() {
  dialog.style.display = "none";
  triggerElement?.focus(); // Terug naar waar je was
}

Het patroon is simpel:

  1. Bij openen: sla het trigger-element op
  2. Bij sluiten: geef de focus terug aan dat element

Test: open een dialoogvenster, sluit het, druk op Tab. Ga je verder waar je was? Of begin je weer bovenaan?

Related Posts

Negatieve outline-offset die de focus verbergt

Negatieve outline-offset die de focus verbergt

Een link met een donkere achtergrond. De focusindicator is er — een zwarte outline van 2 pixels. Maar outline-offset: -4px duwt die outline naar binnen. Onder de achtergrondkleur.

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.

Negatieve outline-offset die de focus verbergt

Negatieve outline-offset die de focus verbergt

Een link met een donkere achtergrond. De focusindicator is er, een zwarte outline van 2 pixels. Maar outline-offset: -4px duwt die outline naar binnen. Onder de achtergrondkleur.