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

aria-expandd (met twee d's)

aria-expandd (met twee d's)

Een menuknop. aria-expanded om aan te geven of het menu open is. Maar de developer typte aria-expandd. Met twee d’s.

Link naar een PDF zonder het te zeggen

Link naar een PDF zonder het te zeggen

“Algemene voorwaarden.” Je klikt. En ineens opent er een PDF in je browser. Of er start een download. Of je telefoon opent een PDF-viewer.

Div als knop: naam maar geen rol

Div als knop: naam maar geen rol

“Versturen.” Een schermlezer leest de tekst. Maar zegt niet dat het een knop is. Want het is geen knop. Het is een div.