Wcag uitgelegd

Zelfgemaakte focusindicator die onzichtbaar is

Zelfgemaakte focusindicator die onzichtbaar is — WCAG 1.4.11 Contrast van niet-tekstuele content (post 4/7)

Tab. Tab. Tab. Waar ben ik?

Je navigeert met je toetsenbord door een website. Elke knop en link zou een zichtbare focus moeten hebben. Maar je ziet… niets. Of een vage lichtblauwe gloed.

Veel developers vervangen de standaard browserfocus door een eigen stijl. Dat mag. Maar dan moet die eigen stijl wel zichtbaar zijn.

Lichtblauw (#99CCFF) als box-shadow op een witte achtergrond: contrast 1,8:1. Dat is minder dan de helft van wat je nodig hebt.

Belangrijk onderscheid: de standaard browserfocus hoeft niet te worden getest. Maar zodra je outline: none schrijft en een eigen focusstijl toevoegt, is het jouw verantwoordelijkheid.

/* Niet doen — contrast 1,8:1 */
button:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px #99CCFF;
}

/* Wel doen — contrast 4,6:1 */
button:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px #2056A5;
}

/* Best practice: dubbele ring voor lichte én donkere achtergronden */
button:focus-visible {
  outline: 2px solid #2056A5;
  outline-offset: 2px;
  box-shadow: 0 0 0 4px #FFFFFF;
}

Die dubbele ring — een donkere outline met een witte schaduw eromheen — werkt op elke achtergrond. Op wit ziet je de donkere ring. Op donker ziet je de witte schaduw. Altijd zichtbaar.

De meest voorkomende fout die ik tegenkom: outline: none zonder vervanging. De developer verwijdert de standaardfocus omdat die “lelijk” is, maar vergeet een alternatief toe te voegen. Resultaat: geen focus zichtbaar. Voor niemand.

Related Posts

Die mooie oranje knop met witte tekst

Die mooie oranje knop met witte tekst

Oranje knop. Witte tekst. “Bestel nu!” Ziet er goed uit. Valt op. Precies wat je wilt van een call-to-action.

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.

Tabel nagebouwd met divs

Tabel nagebouwd met divs

Maandag. Dinsdag. Woensdag. Donderdag. Vrijdag. 09:00 - 17:00. 09:00 - 17:00. 09:00 - 17:00. 09:00 - 17:00. 09:00 - 13:00.