Wcag uitgelegd

aria-label op een div: wordt genegeerd

aria-label op een div: wordt genegeerd — WCAG 4.1.2 Naam, rol, waarde (post 5/12)

Een developer wil een sectie een naam geven voor schermlezers. Plakt aria-label="Zoekresultaten" op een <div>.

De schermlezer negeert het. Want een <div> zonder rol heeft de impliciete rol “generic.” En op generieke elementen mag je geen aria-label gebruiken.

<!-- Niet doen: aria-label op een div zonder rol -->
<div aria-label="Zoekresultaten">
  <p>3 resultaten gevonden</p>
</div>

<!-- Wel doen: voeg een rol toe -->
<div role="region" aria-label="Zoekresultaten">
  <p>3 resultaten gevonden</p>
</div>

<!-- Of: gebruik een semantisch element -->
<section aria-label="Zoekresultaten">
  <p>3 resultaten gevonden</p>
</section>

De logica: een <div> is een container zonder betekenis. Het zou vreemd zijn als een schermlezer bij elke div een label zou aankondigen. Daarom worden labels op generieke elementen genegeerd.

Maar een <section> of een <div role="region"> is een landmark — een herkenbaar gebied op de pagina. Daar hoort een label bij.

Dit geldt ook voor <span>: geen aria-label op een span zonder rol.

Related Posts

Knop die navigeert, link die een actie uitvoert

Knop die navigeert, link die een actie uitvoert

“Contact, knop.” Je drukt op Enter. Een nieuwe pagina opent. Maar het was een knop. Knoppen voeren acties uit. Ze navigeren niet.

Knop zonder naam

Knop zonder naam

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

Zichtbaar "Submit", aria-label "Verzenden"

Zichtbaar "Submit", aria-label "Verzenden"

Een Nederlandstalige website. Een knop. Op het scherm staat “Submit.” Het aria-label zegt “Verzenden.”