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

Kolommen die niet onder elkaar gaan

Kolommen die niet onder elkaar gaan

Sidebar links. Content rechts. Op een groot scherm: perfect. Bij 400% zoom: twee kolommen gepropt in 320 pixels. De sidebar neemt de helft in beslag. De content wordt zo smal dat je twee woorden per regel leest. Of je moet horizontaal scrollen.

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.

Placeholdertekst die niemand kan lezen

Placeholdertekst die niemand kan lezen

“Voer hier je e-mailadres in” Dat staat er. In het invoerveld. In #C0C0C0 op wit. Contrast: 1,6:1.