Tutorijal
Pristupačan naziv: ispravna upotreba aria-labela
1 min čitanja
Ukratko
Pristupačan naziv je ono što čitač zaslona najavljuje za kontrolu. Vidljiv tekst u elementu već jest naziv, a aria-label ga zamjenjuje. Zato aria-label postavljajte samo ondje gdje nema vidljivog teksta (gumbi s ikonom) i vidljivu oznaku uvijek zadržite u nazivu, inače glasovno upravljanje zakaže (2.5.3).
Ukratko po koracima
Pronađite elemente bez teksta
Potražite gumbe i poveznice koje sadrže samo ikonu ili grafiku.
Dodijelite naziv
Dodajte aria-label koji opisuje funkciju i sakrijte grafiku s aria-hidden.
Poštujte vidljivu oznaku
Gdje je tekst vidljiv, taj tekst mora biti u nazivu. Bez proturječnog aria-labela.
Provjerite stablo pristupačnosti
Otvorite stablo pristupačnosti u DevTools i pročitajte razriješen naziv.
Asistivna tehnologija ne vidi vaš kod, nego stablo pristupačnosti razriješeno iz njega. U tom stablu svaka kontrola ima ulogu (gumb, poveznica, potvrdni okvir) i naziv. Bez naziva čuje se samo uloga: „gumb“. To je pogađanje s posljedicama.
Odakle dolazi naziv
- aria-labelledby (upućuje na vidljiv tekst) pobjeđuje sve ostalo.
- aria-label (slobodan tekst) pobjeđuje sadržaj samog elementa.
- Vidljiv tekstualni sadržaj elementa, odnosno povezana oznaka kod polja obrasca.
- Zamjenski izvori poput title ili alt, ovisno o elementu.
Bitno u tom redoslijedu: aria-label nadjačava vidljiv tekst. To je pogrešno upravo onda kada dobar tekst već postoji.
Četiri klasične pogreške
<!-- 1. Kein Name: der Screenreader sagt nur "Schaltflaeche" -->
<button class="icon-btn">
<svg><use href="#icon-close"></use></svg>
</button>
<!-- 2. Sichtbare Beschriftung und Name gehen auseinander:
"Absenden" steht da, "Formular abschicken 2" wird angesagt.
Sprachsteuerung ("Klick Absenden") findet den Button nicht mehr -->
<button aria-label="Formular abschicken 2">Absenden</button>
<!-- 3. aria-label ueberschreibt vorhandenen, guten Text -->
<a href="/preise" aria-label="Link">Preise ansehen</a>
<!-- 4. Div als Button: keine Rolle, kein Name, nicht fokussierbar -->
<div class="btn" onclick="save()">Speichern</div>Kako se radi ispravno
<!-- 1. Icon-Button: Name per aria-label, Grafik ausgeblendet -->
<button class="icon-btn" aria-label="Dialog schliessen">
<svg aria-hidden="true" focusable="false"><use href="#icon-close"></use></svg>
</button>
<!-- 2. Sichtbarer Text IST der Name: kein aria-label noetig -->
<button>Absenden</button>
<!-- 3. Wenn ein Zusatz noetig ist, sichtbaren Text einschliessen -->
<a href="/preise" aria-label="Preise ansehen, oeffnet die Preisuebersicht">
Preise ansehen
</a>
<!-- 4. Echtes Element statt div: Rolle, Fokus und Tastatur gratis -->
<button type="button" onclick="save()">Speichern</button>Pravilo: vidljiv tekst pobjeđuje aria-label. Ako treba dodatni kontekst, dopišite ga i zadržite vidljiv tekst na početku umjesto da ga zamijenite.
Više jednako označenih gumba
<!-- Mehrere gleich beschriftete Buttons unterscheidbar machen:
aria-labelledby setzt den Namen aus vorhandenem Text zusammen -->
<tr>
<td id="row-4711">Laufschuh Modell 4711</td>
<td>
<button id="del-4711" aria-labelledby="del-4711 row-4711">
Loeschen
</button>
</td>
</tr>
<!-- Angesagt wird: "Loeschen Laufschuh Modell 4711, Schaltflaeche" -->U tablicama i popisima često stoji deset gumba s istim tekstom. Tko zatraži popis kontrola stranice, čuje „obriši“ deset puta. aria-labelledby slaže naziv iz teksta retka bez promjene vidljivog sučelja.
Provjera
- Otvorite DevTools, odaberite element i pročitajte ulogu i naziv u odjeljku pristupačnosti.
- Ako je naziv prazan ili odgovara nazivu datoteke ili ikone, pogrešan je.
- Usporedite vidljiv tekst s nazivom: vidljiv tekst mora se u njemu pojaviti.
Povezani WCAG kriteriji
Česta pitanja
- Kada je aria-label pogrešan?
- Uvijek kada element već ima vidljiv tekst koji opisuje njegovu funkciju. aria-label taj tekst nadjačava i stvara proturječje između onoga što se vidi i onoga što se najavljuje.
- Je li title atribut dovoljan kao naziv?
- Ne, nemojte se oslanjati na njega. title se pojavljuje samo na prelasku mišem, na dodirnim uređajima uopće se ne prikazuje, a asistivna tehnologija ga tretira neujednačeno. Koristite vidljiv tekst ili aria-label.
- Zašto aria-hidden na ikoni?
- Da se grafika ne najavljuje uz naziv. Naziv gumba nosi aria-label, a sama ikona ne nosi zasebnu informaciju. focusable="false" usto sprječava da SVG postane fokusabilan u starijim mehanizmima.
Zatražite besplatno skeniranje
Recite nam svoju domenu - provodimo besplatno početno skeniranje i pokazujemo najvažnije prepreke.