Typ iets om te zoeken...

Wcag uitgelegd

Toggle-knop zonder status

Toggle-knop zonder status — WCAG 4.1.2 Naam, rol, waarde (post 9/12)

Een knop: “Donkere modus.” Je klikt. De achtergrond wordt donker. Visueel is het duidelijk: donkere modus is aan.

Een schermlezer zegt: “Donkere modus, knop.” Je klikt. De schermlezer zegt: “Donkere modus, knop.” Niets veranderd. Is het aan of uit? Geen idee.

Het probleem: de knop heeft geen status. Er is geen aria-pressed dat aangeeft of de knop is ingedrukt.

<!-- Niet doen: toggle zonder status -->
<button class="toggle active">Donkere modus</button>

<!-- Wel doen: aria-pressed geeft de status door -->
<button aria-pressed="true">Donkere modus</button>

Een schermlezer leest nu: “Donkere modus, ingedrukt, knop.” Bij het uitschakelen: “Donkere modus, niet ingedrukt, knop.”

Hetzelfde geldt voor zelfgemaakte checkboxen:

<!-- Niet doen: checkbox zonder status -->
<div role="checkbox" tabindex="0">Onthoud mij</div>

<!-- Wel doen: aria-checked geeft de status door -->
<div role="checkbox" tabindex="0" aria-checked="false">Onthoud mij</div>

En vergeet niet: de waarde moet meeveranderen bij interactie. aria-pressed="true" bij klikken wijzigen naar aria-pressed="false". Anders is de status statisch en dus fout.

Zelf verder met dit onderwerp

Related Posts

Tabs zonder tablist

Tabs zonder tablist

Twee elementen met role="tab". Een element met role="tabpanel". Maar geen role="tablist".

Knop zonder naam

Knop zonder naam

“Knop.” Dat is wat een schermlezer zegt. Knop. Maar welke knop? Wat doet die?

Heading in een summary: zelfde probleem

Heading in een summary: zelfde probleem

Net als bij een button: een <summary> heeft de impliciete rol van een button. En een button eet de rollen van zijn kinderen op.