aria-labelledby
Refererer til et eller flere element-id'er, hvis synlige tekst bliver det tilgængelige navn for dette element. Foretrækkes frem for aria-label, når tekst på skærmen allerede beskriver elementet.
Hvornår bruges den
Når et synligt stykke tekst på siden allerede beskriver elementet — en overskrift over en dialog, en kolonneoverskrift over en celle, et afsnit, der introducerer en region. aria-labelledby peger på den tekst, så skærmlæseren annoncerer den som elementets tilgængelige navn. Brugeren hører præcis det, en seende bruger læser.
Det native HTML-ækvivalent er <label for="…"> på formularinputfelter. aria-labelledby udvider den samme idé til alle roller, der understøtter et navn.
Sådan fungerer den
Værdien er en mellemrumssepareret liste af element-id’er. Hjælpeteknologien indsamler tekstindholdet fra hvert refereret element i rækkefølge, sammenkæder dem med mellemrum og bruger resultatet som det tilgængelige navn. Referencer til skjulte elementer (display: none, hidden) bidrager stadig med deres tekst — elementet skal blot være i DOM’en.
aria-labelledby har prioritet over aria-label, som igen har prioritet over synlig indre tekst. Hvis du peger på den synlige overskrift, behøver du ikke tilføje en aria-label.
For at holde relationen gyldig: de refererede id’er skal eksistere på siden, være unikke, og teksten i dem skal forblive meningsfuld. Hvis du gengiver et fanepanel og genbruger id’er, skal du dobbelttjekke, at det nye indhold stadig beskriver det labelede element.
Hyppige fejl
- Pege på et id, der ikke eksisterer (stavefejl, element fjernet, komponent afmonteret). Relationen fejler lydløst, og elementet ender uden navn.
- Genbruge det samme id to gange på siden — kun det første match tæller.
- Referere til et element, hvis tekst er tom eller kun indeholder mellemrum.
- Sammenkædning i forkert rækkefølge:
aria-labelledby="efternavn fornavn"producerer “Jensen Lars”, når du ville have “Lars Jensen”. - Pege på en generisk
<div>med et langt afsnit — hele afsnittet bliver navnet. Navne skal være korte; langt kontekstindhold hører hjemme iaria-describedby. - Glemsel af at opdatere den refererede tekst ved lokalisering — navne mister synkronisering med den synlige brugerflade.
Eksempel
<h2 id="billing-heading">Faktureringsadresse</h2>
<div role="group" aria-labelledby="billing-heading">
<label>
Gade
<input type="text" autocomplete="street-address">
</label>
<!-- … -->
</div>
<!-- To id'er sammenkædet til mønsteret "fornavn + efternavn" -->
<span id="first">Fornavn</span>
<span id="last">(påkrævet)</span>
<input type="text" aria-labelledby="first last">