Przejdź do treści
Dostępność

Atrybut aria-label

Opublikowano:

aria-label to atrybut WAI-ARIA, który nadaje elementowi nazwę dostępną (accessible name), czyli tekst odczytywany przez czytnik ekranu i inne technologie asystujące. Tego tekstu nie widać na ekranie.

Najczęściej potrzebujesz go przy przyciskach i linkach z samą ikoną oraz przy powtarzających się landmarkach, np. dwóch elementach nav. Gdy element ma już widoczny tekst albo powiązany <label>, aria-label zwykle nie jest potrzebny. Użyty bez zastanowienia nadpisze to, co widzi użytkownik.

Jak aria-label wpływa na nazwę dostępną

Przeglądarka wylicza nazwę dostępną w ustalonej kolejności. aria-labelledby ma pierwszeństwo przed aria-label. aria-label z kolei wygrywa z nazwą pochodzącą z natywnych mechanizmów HTML: z <label> pola formularza, atrybutu alt obrazka, atrybutu title ramki iframe i z tekstu wewnątrz przycisku lub linku.

W praktyce oznacza to, że przycisk z napisem „Zapisz” i atrybutem aria-label="Wyślij" zostanie odczytany jako „Wyślij”. Osoba, która widzi „Zapisz” i steruje stroną głosem, może nie trafić w ten przycisk.

Kiedy używać aria-label

  • Przycisk lub link z samą ikoną, np. zamknij, szukaj, menu, koszyk.
  • Kilka landmarków tego samego typu na stronie, np. nawigacja główna i nawigacja w stopce.
  • Okno dialogowe lub region, którego tytułu nie ma na ekranie. Jeśli tytuł jest widoczny, lepiej wskazać go przez aria-labelledby.
  • Pole formularza bez widocznej etykiety, gdy projekt naprawdę jej nie przewiduje. Widoczny <label> jest lepszy dla wszystkich użytkowników.

Kiedy nie używać aria-label

  • Gdy wystarczy natywny HTML. Pierwsza zasada ARIA mówi: jeśli natywny element lub atrybut ma potrzebną semantykę i zachowanie, użyj go zamiast ARIA.
  • Na elementach generycznych, np. div lub span bez roli. WAI-ARIA 1.2 zabrania nadawania nazwy między innymi rolom generic, paragraph, code, strong i emphasis, a technologie asystujące mogą taką nazwę pominąć.
  • Gdy nazwa nie zawiera widocznego tekstu. Kryterium WCAG 2.5.3 Etykieta w nazwie (poziom A) wymaga, żeby nazwa dostępna zawierała tekst widoczny na komponencie. Najlepiej, gdy ten tekst stoi na początku nazwy.
  • Do dłuższych wskazówek i instrukcji. Opis uzupełniający nazwę należy do aria-describedby.

aria-label, aria-labelledby i aria-describedby

MDN zaleca aria-labelledby zamiast aria-label, jeśli istnieje widoczna etykieta, do której można się odwołać. Nie ustawiaj obu atrybutów na jednym elemencie, bo aria-label zostanie pominięty.

AtrybutCo robiKiedy go użyć
aria-labelNadaje nazwę z tekstu wpisanego w atrybut. Tekst nie jest widoczny.Nie ma widocznego tekstu, na który można wskazać.
aria-labelledbyNadaje nazwę z treści innego elementu (po id). Ma pierwszeństwo przed aria-label.Na ekranie jest już nagłówek lub tekst, który dobrze nazywa element.
aria-describedbyDodaje opis, np. wymagania hasła. Nie zastępuje nazwy.Instrukcje, podpowiedzi i komunikaty pomocnicze.

Przykłady

Pierwszy przykład pokazuje poprawne użycie: przycisk z ikoną i dwa landmarki nawigacji. Drugi pokazuje dwa częste błędy i ich poprawki.

Poprawnie: przycisk z ikoną i nazwane landmarki
HTML
<button type="button" aria-label="Zamknij">
  <svg aria-hidden="true">…</svg>
</button>

<nav aria-label="Główna">…</nav>
<nav aria-label="Stopka">…</nav>
Błędy i poprawki
HTML
<!-- Błąd: nazwa nie zawiera widocznego tekstu (WCAG 2.5.3) -->
<button aria-label="Wyślij formularz">Zapisz</button>
<!-- Poprawka: usuń aria-label albo zacznij od widocznego tekstu -->
<button>Zapisz</button>

<!-- Błąd: nazwa na elemencie generycznym -->
<div aria-label="Cena">49 zł</div>
<!-- Poprawka: pokaż etykietę jako tekst -->
<p>Cena: 49 zł</p>

Jak sprawdzić aria-label

Otwórz w narzędziach deweloperskich przeglądarki panel dostępności i sprawdź wyliczoną nazwę elementu oraz jej źródło. Automatyczne testy wykryją brak nazwy albo aria-label na niedozwolonej roli, ale nie ocenią, czy nazwa jest zrozumiała. To sprawdzisz czytnikiem ekranu, np. NVDA lub VoiceOver.

Źródła i dalsza lektura

Sprawdź dostępność swojej strony

Insight uruchamia automatyczne testy wybranych reguł dostępności opartych na WCAG i porządkuje wykryte problemy według priorytetu.