Zapewnianie dostępnych nazw i opisów

Zapewnienie elementom dostępnych nazw, a tam gdzie to możliwe, także dostępnych opisów, jest jednym z najważniejszych obowiązków, jakie spoczywają na autorach podczas tworzenia dostępnych środowisk internetowych.

Wstęp

O ile w przypadku większości elementów jest to proste, o tyle błędy techniczne, które mogą całkowicie zablokować użytkowników technologii wspomagających, są łatwe do popełnienia i niestety powszechne. Aby pomóc autorom w efektywnym zapewnianiu dostępnych nazw i opisów, ten rozdział wyjaśnia ich cel, kiedy autorzy muszą je zapewniać, jak przeglądarki je montują oraz zasady ich kodowania i komponowania. Wskazuje również autorom zastosowanie następujących technik nazywania i opisywania oraz właściwości WAI-ARIA:

  • Nadawanie nazw:
    • Nadawanie nazw za pomocą treści potomnych.
    • Nadawanie nazw za pomocą tekstu atrybutu aria-label.
    • Nadawanie nazw poprzez odwoływanie się do treści za pomocą aria-labelledby.
    • Nadawanie nazw kontrolkom formularza za pomocą elementu label.
    • Nadawanie nazw zestawom pól za pomocą elementu legend
    • Nadawanie nazw tabelom i rysunkom za pomocą podpisów.
    • Nazwy awaryjne pochodzące od tytułów (title) i tekstów pomocniczych (placeholder).
  • Opisywanie:
    • Opisywanie poprzez odwoływanie się do treści za pomocą aria-describedby.
    • Opisywanie tabel i rysunków za pomocą podpisów.
    • Opisy zaczerpnięte z tytułów (title).

Czym są dostępne nazwy i opisy?

Dostępna nazwa to krótki ciąg znaków, zazwyczaj od 1 do 3 słów, który autorzy przypisują do elementu, aby zapewnić użytkownikom technologii wspomagających etykietę elementu. Na przykład pole wejściowe może mieć dostępną nazwę „Identyfikator użytkownika” lub przycisk może mieć nazwę „Prześlij”.

Dostępna nazwa służy dwóm głównym celom dla użytkowników technologii wspomagających, takich jak czytniki ekranu:

  1. Przekazuje cel lub intencję elementu.
  2. Odróżnia element od innych elementów na stronie.

Zarówno specyfikacja WAI-ARIA, jak i WCAG wymagają, aby wszystkie interaktywne elementy, na których można ustawić fokus, miały dostępną nazwę. Ponadto wymaga się, aby nazwę miały okna dialogowe i niektóre kontenery strukturalne, takie jak tabele i obszary kluczowe (regiony). Wiele innych elementów może być nazwanych, ale to, czy nazwa poprawi dostępne doświadczenie, zależy od różnych cech otaczającego kontekstu. Wreszcie, istnieją elementy, w przypadku których nadanie dostępnej nazwy jest technicznie możliwe, ale niewskazane. Sekcja Wytyczne dla dostępnych nazw według ról zawiera listę wymagań dotyczących nazewnictwa i wytycznych dla każdej roli ARIA.

Dostępny opis jest również zapewnianym przez autora ciągiem znaków, który jest renderowany przez technologie wspomagające. Autorzy zapewniają opis, gdy istnieje potrzeba powiązania z elementem dodatkowych informacji, takich jak instrukcje lub wymagania dotyczące formatu pola wejściowego.

Technologie wspomagające prezentują nazwy inaczej niż opisy. Na przykład czytniki ekranu zazwyczaj najpierw ogłaszają nazwę i rolę elementu, np. przycisk o nazwie Wycisz rozmowę może być odczytany jako przycisk Wycisz rozmowę. Jeśli element ma stan, może być ogłoszony przed lub po nazwie i roli; typowym rozwiązaniem jest podanie nazwy i roli po nazwie. Na przykład przycisk przełącznika o nazwie Wycisz rozmowę w stanie wyłączonym może być ogłaszany jako przycisk przełącznika Wycisz rozmowę wyłączony. Ponieważ opisy są opcjonalnymi ciągami, które zwykle są znacznie dłuższe niż nazwy, są one prezentowane na końcu, czasami z niewielkim opóźnieniem. Na przykład, Wycisz rozmowę Wyłącz przycisk, Wycisza alerty i powiadomienia o aktywności w tej rozmowie. Aby zmniejszyć szczegółowość (i gadatliwość), niektóre czytniki ekranu domyślnie nie ogłaszają opisów, ale zamiast tego informują użytkowników o ich istnieniu, aby użytkownicy mogli nacisnąć klawisz, który ogłosi opis.

Jak powstają ciągi nazw i opisów?

Ponieważ istnieje kilka elementów i atrybutów określających tekst, który ma być zawarty w dostępnej nazwie lub opisie, a także dlatego, że autorzy mogą łączyć je na praktycznie nieskończoną liczbę sposobów, przeglądarki implementują dość złożone algorytmy składania ciągów. Sekcje dotyczące obliczania dostępnej nazwyobliczania dostępnego opisu wyjaśniają te algorytmy i sposób, w jaki implementują one pierwszeństwo. Jednak większość autorów nie potrzebuje tak szczegółowego zrozumienia algorytmów, ponieważ prawie wszystkie okoliczności, w których nazwa lub opis są przydatne, są obsługiwane przez wzorce kodowania opisane w sekcjach technik nadawania nazw i technik dodawania dostępnych opisów.

Kardynalne zasady nazewnictwa

Zasada 1: Zwracaj uwagę na ostrzeżenia i dokładnie testuj

Kilka z poniższych technik nazewnictwa zawiera uwagi ostrzegające przed konkretnymi wzorcami kodowania, które są albo zabronione przez specyfikację ARIA, albo należą do szarej strefy, która nie jest jeszcze w pełni określona. Niektóre z tych zakazanych lub niejednoznacznych wzorców mogą wydawać się logiczne, a nawet dawać pożądane nazwy w niektórych przeglądarkach. Jednak jest mało prawdopodobne, że zapewnią one spójne wyniki we wszystkich przeglądarkach, zwłaszcza w miarę postępu prac nad poprawą spójności obliczania nazw w różnych przeglądarkach.

Oprócz brania pod uwagę ostrzeżeń zawartych w technikach nazewnictwa, trudno jest przecenić znaczenie testowania, że nazwy obliczane przez przeglądarki odpowiadają oczekiwaniom.

Zasada 2: Preferuj widoczny tekst

Gdy interfejs użytkownika zawiera widoczny tekst, którego można użyć do zapewnienia odpowiedniej dostępnej nazwy, użycie widocznego tekstu dla dostępnej nazwy upraszcza konserwację, zapobiega błędom i zmniejsza wymagania dotyczące tłumaczenia języka. Gdy nazwy są generowane z tekstu, który istnieje tylko w znacznikach i nigdy nie jest wyświetlany wizualnie, istnieje większe prawdopodobieństwo, że dostępne nazwy nie zostaną zaktualizowane, gdy projekt interfejsu użytkownika lub jego treść zostaną zmienione.

Jeśli element interaktywny, taki jak pole wejściowe lub przycisk, nie ma trwałej wizualnie etykiety tekstowej, rozważ dostosowanie projektu tak, aby zawierał taką etykietę. Oprócz tego, że służą jako solidniejsze źródło dostępnej nazwy, widoczne etykiety tekstowe zwiększają dostępność dla wielu osób z niepełnosprawnościami, które nie korzystają z technologii wspomagających prezentujących niewidoczne dostępne nazwy. W większości przypadków widoczne etykiety tekstowe sprawiają, że interfejs użytkownika jest łatwiejszy do zrozumienia dla wszystkich użytkowników.

Zasada 3: Preferuj techniki rdzenne

W dokumentach HTML, gdy tylko jest to możliwe, polegaj na technikach nazewnictwa HTML, takich jak element HTML label dla elementów formularzy i element caption dla tabel. Chociaż są one mniej elastyczne, ich prostota i oparcie na widocznym tekście pomagają zapewnić solidne, dostępne doświadczenia. Kilka z technik nazewnictwa podkreśla specyficzne zalety dostępności wynikające z użycia cech HTML zamiast atrybutów ARIA.

Zasada 4: Unikaj mechanizmów awaryjnych przeglądarki

Gdy autorzy nie określą dostępnej nazwy za pomocą elementu lub atrybutu, który jest przeznaczony do nadawania nazw, przeglądarki próbują pomóc użytkownikom technologii wspomagających, uciekając się do metod awaryjnych w celu wygenerowania nazwy. Na przykład atrybuty HTML title i placeholder są używane jako ostateczne źródła treści dla dostępnych nazw. Ponieważ celem tych atrybutów nie jest nadawanie nazw, ich treść zazwyczaj daje niskiej jakości dostępne nazwy, które są mało skuteczne.

Zasada 5: Komponuj krótkie, przydatne nazwy

Podobnie jak wizualnie zatłoczone ekrany i niejednoznaczne ikony zmniejszają użyteczność, zbyt długie, niewystarczająco wyraźne lub niejasne nazwy mogą sprawić, że interfejs użytkownika będzie bardzo trudny, a nawet niemożliwy do użycia przez kogoś, kto opiera się na niewizualnej formie interfejsu użytkownika. Innymi słowy, aby środowisko internetowe było dostępne, jego dostępne nazwy muszą być skuteczne. Sekcja Komponowanie efektywnych i przyjaznych dla użytkownika dostępnych nazw zawiera wskazówki dotyczące równoważenia zwięzłości i jasności.

Techniki nazewnictwa

Nadawanie nazw za pomocą treści potomnych

Niektóre elementy otrzymują swoją nazwę od treści, którą zawierają. Na przykład, poniższy link nosi nazwę „Strona główna”.

<a href="/">Strona główna</a>

Gdy technologie wspomagające renderują element, którego dostępna nazwa pochodzi od jego treści, takiej jak link lub przycisk, dostępna nazwa jest jedyną treścią, jaką użytkownik może dostrzec dla tego elementu. W przeciwieństwie do innych elementów, takich jak pola tekstowe lub tabele, gdzie dostępna nazwa jest etykietą prezentowaną obok wartości lub treści elementu. Na przykład dostępna nazwa tabeli może pochodzić z elementu podpisu, a technologie wspomagające renderują zarówno podpis, jak i całą pozostałą treść tabeli.

Elementy mające jedną z poniższych ról są domyślnie nazywane łańcuchem obliczonym z treści ich potomków:

  • button - przycisk
  • cell - komórka
  • checkbox - pole wyboru
  • columnheader - nagłówek kolumny
  • gridcell - komórka siatki
  • heading - nagłówek
  • link - łącze
  • menuitem - pozycja menu (treść zawarta w elemencie potomnym menu jest wykluczona.)
  • menuitemcheckbox - pole wyboru pozycji menu
  • menuitemradio - - pole opcji pozycji menu
  • option - opcja
  • radio - pole opcji
  • row - wiersz
  • rowheader - nagłówek wiersza
  • switch - przełącznik
  • tab - karta
  • tooltip - podpowiedź
  • treeitem - drzewo (treść zawarta w elemencie podrzędnym group jest wykluczona).

Podczas obliczania nazwy z treści elementu, programy użytkownika przechodzą rekurencyjnie przez każdy z jego elementów potomnych, obliczają łańcuch nazwy dla każdego elementu potomnego i łączą otrzymane ciągi. W dwóch szczególnych przypadkach niektóre elementy potomne są ignorowane: potomne elementy w elemencie treeitem oraz potomkowie menu w menuitem są pomijane w obliczeniach. Na przykład, w poniższym drzewie tree nazwa pierwszego elementu drzewa to Owoce; a Jabłka, Banany i Pomarańcze zostały pominięte.


<ul role="tree">
  <li role="treeitem">Owoce
    <ul role="group">
      <li role="treeitem">Jabłka</li>
      <li role="treeitem">Banany</li>
      <li role="treeitem">Pomarańcze</li>
    </ul>
  </li>
</ul>
Ostrzeżenie

Jeśli element z jedną z powyższych ról, który obsługuje nadawanie nazw za pomocą treści potomnych, zostanie nazwany za pomocą aria-label lub aria-labelledby, to treść zawarta w elemencie i treści w jego elementach potomnych są ukrywane przed użytkownikami technologii wspomagających, chyba że do treści podrzędnej odwołuje się atrybut aria-labelledby. Zdecydowanie zaleca się unikanie stosowania któregokolwiek z tych atrybutów do nadpisywania treści jednego z powyższych elementów, z wyjątkiem rzadkich okoliczności, w których ukrywanie treści przed użytkownikami technologii wspomagających jest korzystne. Ponadto w sytuacjach, w których widoczna treść jest ukrywana przed użytkownikami technologii wspomagających za pomocą jednego z tych atrybutów, szczególnie ważne jest dokładne testowanie za pomocą technologii wspomagających.

Nadawanie nazw za pomocą tekstu atrybutu aria-label

Właściwość aria-label umożliwia autorom nazwanie elementu za pomocą ciągu znaków, który nie jest renderowany wizualnie. Na przykład, nazwa poniższego przycisku to „Zamknij”.

<button type="button" aria-label="Zamknij">X</button>

Właściwość aria-label jest przydatna, gdy nie ma widocznej treści tekstowej, która służyłaby jako odpowiednia dostępna nazwa.

Właściwość aria-label wpływa na użytkowników technologii asystujących na jeden z dwóch różnych sposobów, w zależności od roli elementu, do którego jest zastosowana. W przypadku zastosowania do elementu o jednej z ról, która obsługuje nadawanie nazw za pomocą treści potomnych, właściwość aria-label ukrywa treść potomną przed użytkownikami technologii wspomagających i zastępuje ją wartością aria-label. Jednak w przypadku zastosowania do prawie każdego innego typu elementu, technologie wspomagające będą renderować zarówno wartość aria-label, jak i treść elementu. Na przykład nazwa następującego regionu nawigacyjnego to „Produkt”.

<nav aria-label="Produkt">
  <!-- lista linków nawigacyjnych do stron produktów -->
</nav>

Napotykając ten region nawigacji, użytkownik czytnika ekranu usłyszy nazwę i rolę elementu, np. „Punkt orientacyjny, nawigacja, produkt”, a następnie będzie mógł przeczytać linki zawarte w regionie.

Ostrzeżenie
  1. Jeśli aria-label zostanie zastosowany do elementu z jedną z ról, która obsługuje nadawanie nazw za pomocą treści potomnych, to treść zawarta w elemencie i treści w jego elementach potomnych są ukrywane przed użytkownikami technologii wspomagających. Zdecydowanie zaleca się unikanie stosowania aria-label do nadpisywania treści jednego z tych elementów, z wyjątkiem rzadkich sytuacji, w których ukrywanie treści przed użytkownikami technologii wspomagającej jest korzystne.
  2. Istnieją pewne typy elementów, takie jak akapity i elementy listy, których nie należy nazywać za pomocą aria-label. Są one określone w tabeli w sekcji Wytyczne dla dostępnych nazw według ról.
  3. Ponieważ wartość aria-label nie jest renderowana wizualnie, szczególnie ważne jest testowanie za pomocą technologii wspomagających, aby upewnić się, że oczekiwana nazwa jest prezentowana użytkownikom.
  4. Gdy interfejs użytkownika jest tłumaczony na wiele języków, należy upewnić się, że wartości aria-label są tłumaczone.

Nadawanie nazw poprzez odwoływanie się do treści za pomocą aria-labelledby

Właściwość aria-labelledby pozwala autorom odwoływać się do innych elementów na stronie w celu zdefiniowania dostępnej nazwy. Na przykład poniższy przełącznik jest nazwany przez treść tekstową poprzedniego siostrzanego elementu.

<span id="night-mode-label">Tryb nocny</span>
<span role="switch" aria-checked="false" tabindex="0" aria-labelledby="night-mode-label"></span>

Zauważ, że chociaż używanie aria-labelledby jest w tej sytuacji podobne do użycia elementu HTML label z atrybutem for, jedną istotną różnicą jest to, że przeglądarki nie powodują automatycznie, że kliknięcie elementu etykietującego aktywuje element etykietowany; za to odpowiada autor. Ale element HTML label nie może być używany do etykietowania elementu span. Na szczęście element HTML input z type="checkbox" pozwala na użycie roli ARIA switch, więc jeśli to możliwe, użycie następującego podejścia tworzy bardziej niezawodne rozwiązanie.

<label for="night-mode">Tryb nocny</label>
<input type="checkbox" role="switch" id="night-mode">

Właściwość aria-labelledby jest przydatna w wielu różnych sytuacjach, ponieważ:

  • Ma najwyższy priorytet, gdy przeglądarki obliczają dostępne nazwy, tj. zastępuje nazwy z treści podrzędnych i wszystkie inne atrybuty nazewnictwa, w tym aria-label.

  • Może łączyć treść z wielu elementów w jeden ciąg nazwy.

  • Obejmuje treść elementów niezależnie od ich widoczności, tj. zawiera w wyliczonym ciągu nazwy nawet treść elementów z atrybutem HTML hidden i właściwościami CSS display: none lub CSS visibility: hidden.

  • Obejmuje treść pól danych, tj. jeśli odwołuje się do pola tekstowego, wartość pola tekstowego jest ujęta w wyliczonym ciągu nazwy.

Przykładem odniesienia do ukrytego elementu za pomocą aria-labelledby może być etykieta sterowania przełącznikiem trybu nocnego:

<span id="night-mode-label" hidden>Night mode</span>
<input type="checkbox" role="switch" aria-labelledby="night-mode-label">

W niektórych przypadkach najskuteczniejszą nazwą elementu jest jego własna treść połączona z treścią innego elementu. Ponieważ aria-labelledby ma najwyższy priorytet w obliczaniu nazwy, w takich sytuacjach można użyć aria-labelledby, aby odwołać się zarówno do samego elementu, jak i do innego elementu. W poniższym przykładzie łącze „Czytaj więcej...” jest nazwane przez sam element i nagłówek artykułu, co daje nazwę łącza „Czytaj więcej... 7 sposobów na ratowanie pszczół”.

<h2 id="bees-heading">7 sposobów na ratowanie pszczół</h2>
<p>Pszczoły znikają w szybkim tempie. Oto siedem rzeczy, które możesz zrobić, aby pomóc.</p>
<p><a id="bees-read-more" aria-labelledby="bees-read-more bees-heading">Czytaj więcej...</a></p>

Gdy wiele elementów jest przywoływanych przez aria-labelledby, treść tekstowa z każdego przywoływanego elementu jest dołączana w kolejności określonej w wartości aria-labelledby. Jeśli element jest przywoływany więcej niż jeden raz, przetwarzane jest tylko pierwsze odwołanie. Podczas łączenia treści z wielu elementów przeglądarki wycinają początkowe i końcowe białe znaki i oddzielają treść każdego elementu pojedynczą spacją.

<button id="download-button" aria-labelledby="download-button download-details">Pobierz</button>
<span id="download-details">PDF, 2.4 MB</span>

W powyższym przykładzie dostępna nazwa przycisku to „Pobierz PDF, 2,4 MB”, ze spacją między „Pobierz” i „PDF”, a nie „PobierzPDF, 2,4 MB”.

Ostrzeżenie
  1. Właściwość aria-labelledby nie może być łączona łańcuchowo, tj. jeśli element z aria-labelledby odwołuje się do innego elementu, który również ma aria-labelledby, to atrybut aria-labelledby w elemencie odwołującym się zostanie zignorowany.
  2. Jeśli element jest przywoływany przez aria-labelledby więcej niż jeden raz, to podczas obliczania nazwy drugie i wszystkie kolejne odwołania zostaną zignorowane.
  3. Istnieją pewne typy elementów, takie jak akapity i elementy listy, których nie należy nazywać za pomocą aria-labelledby. Są one określone w tabeli w sekcji Wytyczne dla dostępnych nazw według ról.
  4. Jeśli właściwość aria-labelledby jest zastosowana do elementu z jedną z ról, która obsługuje nadawanie nazw za pomocą treści potomnych, treść zawarta w tym elemencie i jego elementach potomnych jest ukryta przed użytkownikami technologii wspomagających, chyba że jest również przywoływana aria-labelledby. Zdecydowanie zaleca się unikanie używania tego atrybutu do zastępowania treści jednego z tych elementów, z wyjątkiem rzadkich okoliczności, w których ukrywanie treści przed użytkownikami technologii wspomagających jest korzystne.
  5. Ponieważ obliczanie nazwy elementu z aria-labelledby może być skomplikowane i może odwoływać się do ukrytej treści, szczególnie ważne jest testowanie za pomocą technologii pomocniczych, aby zapewnić, że oczekiwana nazwa jest prezentowana użytkownikom.

Nadawanie nazw kontrolkom formularza za pomocą elementu label

Element HTML label umożliwia autorom określenie treści, która służy jako etykieta i powiązanie jej z kontrolką formularza. Gdy element label jest skojarzony z kontrolką formularza, przeglądarki obliczają dostępną nazwę kontrolki formularza na podstawie treści label.

Na przykład tekst wyświetlany obok pola wyboru może być wizualnie skojarzony z polem wyboru, dlatego użytkownicy, którzy mogą dostrzec to skojarzenie wizualne, rozumieją go jako etykietę pola wyboru. Jeśli jednak tekst nie jest programowo powiązany z polem wyboru, użytkownicy technologii wspomagających będą mieli do czynienia z polem wyboru bez etykiety. Zawijanie pola wyboru i tekstu etykiety w elemencie label w poniższy sposób nadaje polu wyboru dostępną nazwę.

<label>
  <input type="checkbox" name="subscribe">
  Prenumeruj nasz biuletyn
</label>

Kontrolkę formularza można również powiązać z etykietą za pomocą atrybutu for elementu label. Pozwala to etykiecie i kontrolce formularza być rodzeństwem lub mieć różnych rodziców w DOM, ale wymaga dodania atrybutu id do kontrolki formularza, co może być podatne na błędy. Jeśli to możliwe, użyj powyższej techniki enkapsulacji do skojarzenia zamiast następującej techniki atrybutu for.

<input type="checkbox" name="subscribe" id="subscribe_checkbox">
<label for="subscribe_checkbox">Prenumeruj nasz biuletyn</label>

Użycie elementu label jest skuteczną techniką spełniającą zasadę 2: Preferuj widoczny tekst. Spełnia również zasadę 3: Preferuj techniki rdzenne. Rdzenne etykiety HTML oferują istotną przewagę w zakresie użyteczności i dostępności nad technikami etykietowania ARIA: przeglądarki automatycznie sprawiają, że kliknięcie etykiety jest równoważne kliknięciu kontrolki formularza. Zwiększa to obszar dotyku kontrolki formularza.

Nadawanie nazw zestawom pól za pomocą elementu legend

Element HTML fieldset może służyć do grupowania kontrolek formularzy, a element legend może służyć do nadania grupie nazwy. Na przykład, grupa przycisków opcji może być zgrupowana razem w fieldset, gdzie element legend etykietuje grupę przycisków radiowych.

<fieldset>
  <legend>Wybierz swoją klasę startową</legend>
  <label><input type="radio" name="starter-class" value="zielona">Zielona</label>
  <label><input type="radio" name="starter-class" value="czerwona">Czerwona</label>
  <label><input type="radio" name="starter-class" value="niebieska">Niebieska</label>
</fieldset>

Ta technika grupowania jest szczególnie przydatna do prezentacji pytań wielokrotnego wyboru. Umożliwia ona autorom powiązanie pytania z grupą odpowiedzi. Jeśli pytanie nie jest programowo powiązane z opcjami odpowiedzi, użytkownicy technologii wspomagających mogą uzyskać dostęp do odpowiedzi, nie będąc świadomym pytania.

Podobne korzyści można uzyskać z grupowania i nazywania innych typów powiązanych pól formularza za pomocą fieldset i legend.

<fieldset>
  <legend>Adres wysyłki</legend>
  <p><label>Pełna nazwa <input name="name" required></label></p>
  <p><label>Adres linia 1 <input name="address-1" required></label></p>
  <p><label>Adres linia 2 <input name="address-2"></label></p>
  ...
</fieldset>
<fieldset>
  <legend>Adres rozliczeniowy</legend>
  ...
</fieldset>

Użycie elementu legend do nazwania elementu fieldset spełnia zasadę 2: Preferuj widoczny tekst i zasadę 3: Preferuj techniki rdzenne.

Nadawanie nazw tabelom i rysunkom za pomocą podpisów

Dostępna nazwa dla elementów HTML table i figure może pochodzić odpowiednio od elementu podrzędnego caption lub figcaption. Tabele i ryciny często mają podpisy, które wyjaśniają o co w nich chodzi, jak je czytać, a czasem nadają im numery używane do odwoływania się do nich w otaczającej je prozie. Podpisy mogą pomóc wszystkim użytkownikom lepiej zrozumieć treść, ale są szczególnie pomocne dla użytkowników technologii wspomagających.

W języku HTML element table oznacza tabelę danych i może być opatrzony podpisem za pomocą elementu caption. Jeśli element table nie posiada aria-label lub aria-labelledby, wtedy caption zostanie użyty jako dostępna nazwa. Na przykład, dostępna nazwa poniższej tabeli to Specjalne godziny otwarcia.

<table>
 <caption>Specjalne godziny otwarcia</caption>
 <tr><td>30 maja</td><td>Zamknięte</td></tr>
 <tr><td>6 czerwca</td><td>11:00-16:00</td></tr>
</table>

Poniższy przykład nadaje tabeli numer (Tabela 1), dzięki czemu można się do niej odwoływać.

<table>
 <caption>Tabela 1. Tradycyjne spożycie pokarmu przez Okinawian i innych Japończyków około 1950</caption>
 <thead>
  <tr>
   <th></th>
   <th>Okinawa, 1949</th>
   <th>Japonia, 1950</th>
  </tr>
 <tbody>
  <tr>
   <th>Kalorie ogółem</th>
   <td>1785</td>
   <td>2068</td>
  [...]
</table>

Uwaga: Powyższa treść tabeli pochodzi z Ograniczenie kaloryczne, tradycyjna dieta Okinawian, a zdrowe starzenie się: dieta najdłużej żyjących ludzi na świecie i jej potencjalny wpływ na zachorowalność i długość życia.

Jeśli table zostanie nazwana przy użyciu aria-label lub aria-labelledby, to element caption, jeśli istnieje, stanie się dostępnym opisem. Aby zapoznać się z przykładem, zobacz Opisywanie tabel i rysunków za pomocą podpisów.

Podobnie, elementowi HTML figure można nadać podpis za pomocą elementu figcaption. Podpis może pojawić się przed lub po ilustracji, ale częściej zdarza się, że ilustracje mają podpis po.

<figure>
 <img alt="Osoba spacerująca po pustyni." src="/Hole_JesusalDesierto.jpg">
 <figcaption>Jezus wkraczający na pustynię według wyobrażenia Williama Hole'a, 1908</figcaption>
</figure>

Podobnie jak w przypadku elementów table, jeśli figure nie jest nazwana przy użyciu aria-labellub aria-labelledby, treść elementu figcaption zostanie użyta jako dostępna nazwa. Jednak w przeciwieństwie do elementów table, jeśli element figcaption nie jest użyty jako nazwa, nie staje się on dostępnym opisem, chyba że zostanie przywołany przez aria-describedby. Niemniej jednak, technologie wspomagające będą renderować treść elementu figcaption niezależnie od tego, czy jest on użyty jako nazwa, opis, czy nie.

Użycie elementu caption do nazwania elementu table lub figcaption do nazwania elementu figure spełnia zasadę 2: Preferuj widoczny tekst i zasadę 3: Preferuj techniki rdzenne.

Nazwy awaryjne pochodzące od tytułów (title) i tekstów pomocniczych (placeholder)

Gdy dostępna nazwa nie jest zapewniona przy użyciu jednej z podstawowych technik (np. atrybutów aria-label lub aria-labelledby) lub rdzennych technik oznaczania (np. elementu HTML label lub atrybutu alt w przypadku elementu HTML img), przeglądarki obliczają dostępną nazwę na podstawie innych atrybutów jako rozwiązanie awaryjne. Ponieważ atrybuty używane do obliczania nazw awaryjnych nie są przeznaczone do nadawania nazw, zazwyczaj dają one dostępne nazwy niskiej jakości, które nie są efektywne. Tak więc, zgodnie z zasadą 4: Unikaj mechanizmów awaryjnych przeglądarki, ceń techniki jawnego etykietowania opisane powyżej bardziej niż techniki awaryjne opisane w tej sekcji.

Każdy element HTML może mieć określony atrybut title. Atrybut title może być użyty jako awaryjna dostępna nazwa elementu. Atrybut title jest powszechnie prezentowany wizualnie jako podpowiedź, gdy użytkownik najedzie kursorem na element za pomocą urządzenia wskazującego, co nie jest zbytnio dostępne dla użytkowników widzących bez urządzenia wskazującego.

Na przykład element fieldset bez elementu dziecka legend, ale z atrybutem title, otrzymuje swoją dostępną nazwę z atrybutu title.

<fieldset title="Wybierz swoją klasę startową">
  <label><input type="radio" name="starter-class" value="zielona">Zielona</label>
  <label><input type="radio" name="starter-class" value="czerwona">Czerwona</label>
  <label><input type="radio" name="starter-class" value="niebieska">Niebieska</label>
</fieldset>

W przypadku elementów HTML input i textarea atrybut placeholder jest używany jako awaryjny mechanizm etykietowania, jeśli nic innego (w tym atrybut title) nie powoduje powstania etykiety. Lepiej jest użyć elementu label, ponieważ nie znika on wizualnie, gdy użytkownik ustawi fokus na kontrolce formularza.

<!-- Zalecane jest użycie <label> -->
<label>Szukaj <input type=szukaj name=q></label>

<!-- Placeholder jest używany jako rozwiązanie awaryjne -->
<input type=szukaj name=q placeholder="Szukaj">

Komponowanie efektywnych i przyjaznych dla użytkownika dostępnych nazw

Dla użytkowników technologii wspomagających, zwłaszcza czytników ekranu, jakość dostępnych nazw jest jednym z najważniejszych czynników wpływających na użyteczność. Nazwy, które nie dostarczają wystarczającej ilości informacji zmniejszają efektywność użytkowników, a nazwy zbyt długie zmniejszają wydajność. Z kolei nazwy trudne do zrozumienia zmniejszają skuteczność, efektywność i przyjemność z użytkowania.

Poniższe wskazówki stanowią punkt wyjścia do tworzenia nazw przyjaznych dla użytkownika

  • Przekazuj funkcję lub cel, a nie formę. Na przykład, jeśli ikona przypominająca literę X zamyka okno dialogowe, nazwij ją Zamknij, a nie X. Podobnie, jeśli zestaw linków nawigacyjnych w lewym pasku bocznym prowadzi do stron produktów w witrynie zakupowej, nazwij region nawigacyjny Produkty, a nie Lewy.
  • Najpierw umieść najbardziej wyróżniające i kluczowe słowa. Często w przypadku elementów interaktywnych, które wykonują jakąś akcję, oznacza to, że pierwszym słowem jest czasownik. Na przykład, jeśli lista kontaktów zawiera przyciski Edytuj, Usuń i Archiwizuj dla każdego kontaktu, wówczas Edytuj Jana Kowalskiego, Usuń Jana Kowalskiego i Archiwizuj Jana Kowalskiego będą bardziej dostępne niż Jan Kowalski edytuj, Jana Kowalski usuń i Jana Kowalski archiwizuj. Umieszczając czasownik jako pierwszy w nazwie powodujesz, że użytkownicy czytników ekranu mogą łatwiej i szybciej odróżnić przyciski od siebie, a także od elementu otwierającego wizytówkę Jana Kowalskiego.
  • Bądź zwięzły. W przypadku wielu elementów wystarczy od jednego do trzech słów. Dodawaj więcej słów tylko wtedy, gdy jest to konieczne.
  • Nie umieszczaj nazwy roli w dostępnej nazwie. Na przykład nie umieszczaj słowa przycisk w nazwie przycisku, obraz w nazwie obrazka lub słowa nawigacja w nazwie obszaru nawigacji. Takie słowa spowodują utworzenie duplikaty danych z czytników ekranu, bo czytniki ekranu oprócz nazwy elementu przekazują jego rolę.
  • Twórz unikalne nazwy dla elementów o tej samej roli, że elementy te są faktycznie identyczne. Na przykład upewnij się, że każdy link na stronie ma inną nazwę, z wyjątkiem przypadków, gdy wiele linków prowadzi do tej samego miejsca. Podobnie nadaj każdemu regionowi nawigacyjnemu na stronie inną nazwę, chyba że istnieją regiony o identycznej treści, pełniące identyczne funkcje nawigacyjne.
  • Zaczynaj nazwy z dużej litery, co pomaga niektórym czytnikom ekranu wypowiadać je z odpowiednią intonacją. Nie kończ nazw kropką; nie są zdaniami.

Wytyczne dla dostępnych nazw według ról

Pewne elementy zawsze wymagają nazwy, inne mogą zwykle lub czasami wymagać nazwy, a jeszcze inne nigdy nie powinny być nazwane. Poniższa tabela zawiera listę wszystkich ról ARIA i podaje następujące informacje dla każdej z nich:

Konieczność nazywania
Wskazuje, jak bardzo konieczne jest dla autorów dodanie atrybutu lub elementu nadającego nazwę, aby uzupełnić lub zastąpić treść elementu o określonej roli. Ta kolumna może zawierać jedną z następujących wartości:
  • Wymagana tylko wtedy, gdy treść elementu nie wystarcza: Element z tą rolą jest nazwany przez jego treść podrzędną. Jeśli zastosowano aria-label lub aria-labelledby, treść zawarta w elemencie i jego potomkach jest ukryta przed użytkownikami technologii wspomagających, chyba że jest również przywoływana przez aria-labelledby. Unikaj ukrywania treści potomnych, z wyjątkiem rzadkich sytuacji, gdy jest to korzystne dla użytkowników technologii wspomagających.
  • Wymagane: Specyfikacja ARIA wymaga od autorów podania nazwy; brak nazwy powoduje, że walidatory dostępności zgłaszają błąd.
  • Zalecane: Podanie nazwy jest zdecydowanie zalecane.
  • Uznaniowe: Nadawanie nazw jest albo opcjonalne, albo w okolicznościach opisanych w kolumnie wskazówek jest odradzane.
  • Nie nazywaj: Nadawanie nazw jest zdecydowanie odradzane, nawet jeśli jest dozwolone z technicznego punktu widzenia; często technologie wspomagające nie odwzorowują nazwy, nawet jeśli została ona podana.
  • Zabronione: Specyfikacja ARIA nie pozwala na nazwanie elementu. Jeśli nazwa zostanie określona, walidatory dostępności zgłoszą błąd.
Wskazówki:
Zawiera informacje pomocne w ustaleniu, czy podanie nazwy jest korzystne, a jeśli tak, opisuje zalecane techniki.
Rola Konieczność nazwy Wskazówki
alert uznaniowo Niektóre czytniki ekranu ogłaszają nazwę alertu przed ogłoszeniem jego treści. Tak więc aria-label zapewnia metodę poprzedzania widocznej treści wpisu tekstem, który nie jest wyświetlany jako część alertu. Użycie aria-label jest funkcjonalnie równoważne z podaniem tekstu poza ekranem w treści alertu, z wyjątkiem tego, że tekst poza ekranem byłby ogłaszany przez czytniki ekranu, które nie obsługują aria-label w elementach alert.
alertdialog wymagana Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
application wymagana Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
article zalecana
  • Zalecane do odróżnienia artykułów od siebie; pomaga użytkownikom nawigować między artykułami.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
banner uznaniowo
  • Niezbędne w rzadkiej sytuacji, gdy na tej samej stronie występują dwa i więcej kluczowe obszary banner. W pozostałych przypadkach nazwa jest opcjonalna.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie przy użyciu aria-label.
  • Zobacz sekcję Punkt orientacyjny banner.
blockquote uznaniowo Jeśli widoczna jest etykieta, powiązanie jej z cytatem blokowym poprzez użycie aria-labelledby może być korzystne dla niektórych użytkowników technologii wspomagających.
button wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
caption zabronione
cell wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Pamiętaj, że nazwa nie jest wymagana; technologie wspomagające oczekują, że pusta komórka w tabeli będzie reprezentowana przez pustą nazwę.
  • Pamiętaj, że powiązane nagłówki wierszy lub kolumn nie nadają nazwy komórce cell; nazwą komórki w tabeli jest jej treść. Nagłówki są informacjami uzupełniającymi.
checkbox wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Jeśli jest oparte na type="checkbox", użyj elementu label.
  • W przeciwnym razie odwołaj się do widocznej treści za pomocą aria-labelledby.
code zabronione
columnheader Wymagane tylko wtedy, gdy treść nie wystarcza.
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną
  • Jeśli rola columnheader wynika z elementu HTML th, atrybut HTML abbr może być użyty do określenia skróconej wersji nazwy, która jest ogłaszana tylko wtedy, gdy czytniki ekranu czytają komórki cell powiązane z table, grid lub treegrid.
combobox wymagana
  • Jeśli rola combobox jest zastosowana do elementu HTML select lub input, można ją nazwać za pomocą elementu HTML label.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
complementary zalecana
  • Nazwa jest konieczna, gdy na tej samej stronie znajdują się dwa lub więcej kluczowe obszary complementary.
  • Nazwa jest zalecana nawet wtedy, gdy istnieje kluczowy obszar complementary, aby pomóc użytkownikom zrozumieć cel treści obszaru podczas nawigowania między punktami orientacyjnymi (obszarami kluczowymi).
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz sekcję Uzupełniające punkty orientacyjne.
contentinfo uznaniowo
  • Niezbędne w rzadkiej sytuacji, gdy na tej samej stronie znajdują się dwa lub więcej kluczowe obszary contentinfo. W przeciwnym razie jest to opcjonalne.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie przy użyciu aria-label.
definition zalecana Odniesienie do zdefiniowanego terminu za pomocą role="term", przy użyciu aria-labelledby.
deletion Zabroniona
dialog wymagana Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
directory uznaniowo
  • Nazwa może pomóc użytkownikom zrozumieć cel katalogu.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
document uznaniowo Elementy z rolą document są zawarte w elemencie z rolą application, który musi mieć nazwę. Zazwyczaj nazwa elementu application zapewnia wystarczający kontekst i tożsamość elementu document. Ponieważ element application jest używany tylko do tworzenia nietypowych, niestandardowych widżetów, należy dokładnie ocenić, czy dodanie dostępnej nazwy jest korzystne.
emphasis Zabroniona
feed zalecana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel kanału.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy kanału informacyjnego.
figure zalecana
  • W przypadku HTML użyj elementów figure i figcaption. Element figcaption będzie służyć jako dostępna nazwa dla figure. Zobacz sekcję Nazewnictwo tabel i rysunków z podpisami.
  • Jeśli nie używasz HTML lub gdy modernizujesz starszy HTML, użyj aria-labelledby w znaczniku figure, wskazując na podpis figcaption.
  • Jeśli nie ma widocznego podpisu, można użyć aria-label.
form zalecana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel punktu orientacyjnego form.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz sekcję Punkt orientacyjny form.
generic Zabroniona
grid wymagana
  • Jeśli grid jest stosowana do elementu table, to dostępna nazwa może pochodzić z elementu caption.
  • Możesz użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
gridcell wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Pamiętaj, że nazwa nie jest wymagana; technologie wspomagające oczekują, że pusta komórka w siatce będzie reprezentowana przez pustą nazwę.
  • Zauważ, że powiązane nagłówki wierszy lub kolumn nie nazywają gridcell; nazwą komórki w siatce jest jej treść. Nagłówki są informacjami uzupełniającymi.
group uznaniowo
  • Gdy używany jest element HTML fieldset, dostępna nazwa może pochodzić z elementu legend.
  • Gdy używany jest element HTML details, nie podawaj dostępnej nazwy dla tego elementu. Użytkownik wchodzi w interakcję z elementem summary, który może wywodzić swoją dostępną nazwę ze swojej treści.
  • Gdy używany jest element HTML optgroup, użyj atrybutu label.
  • Możesz użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
heading wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną
insertion Zabroniona
img wymagana Dla elementu HTML img użyj atrybutu alt. W przypadku innych elementów z rolą img użyj aria-labelledby lub aria-label.
link wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
list uznaniowo
  • Potencjalnie korzystne dla użytkowników czytników ekranu, które obsługują zarówno nazwy list, jak i nawigację między listami na stronie.
  • Potencjalnie źródło rozpraszającej lub niepożądanej szczegółowości czytnika ekranu, zwłaszcza jeśli jest zagnieżdżone w nazwanym kontenerze, takim jak obszar nawigacji.
  • Możesz użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
listbox wymagana
  • Jeśli rola listbox jest zastosowana do elementu HTML select (z atrybutem multiple lub atrybutem size o wartości większej niż 1), można ją nazwać elementem HTML label.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy pola listy.
listitem nie nazywaj Nazwa nie jest obsługiwana przez technologie wspomagające; konieczne jest uwzględnienie odpowiedniej treści w pozycji listy.
log uznaniowo Niektóre czytniki ekranu ogłaszają nazwę elementu dziennika przed ogłoszeniem treści elementu dziennika. W ten sposób aria-label zapewnia metodę poprzedzania widocznej treści elementu dziennika tekstem, który nie jest wyświetlany jako część elementu dziennika. Używanie aria-label jest funkcjonalnie równoważne z dostarczaniem tekstu pozaekranowego w treści elementu dziennika, z wyjątkiem tego, że tekst pozaekranowy byłby ogłaszany przez czytniki ekranu, które nie obsługują aria-label elementów log.
main uznaniowo
  • Potencjalnie pomocne w orientowaniu użytkowników technologii wspomagających, zwłaszcza w aplikacjach jednostronicowych, w których główne zmiany treści zachodzą bez generowania zdarzenia ładowania strony.
  • Może być nazwany za pomocą aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie za pomocą aria-label.
  • Zobacz sekcję Główny punkt orientacyjny.
marquee uznaniowo Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
math zalecana
  • Jeśli element math ma tylko prezentacyjne elementy podrzędne, a dostępna nazwa ma na celu przekazanie wyrażenia matematycznego, użyj, aria-label, aby podać ciąg reprezentujący wyrażenie.
  • Jeśli element math zawiera treść umożliwiającą nawigację, która przekazuje wyrażenie matematyczne, a dla wyrażenia jest widoczna etykieta, użyj aria-labelledby.
  • W przeciwnym razie użyj aria-label, aby nazwać wyrażenie, np. aria-label="Twierdzenie pitagorejskie".
menu zalecana
  • Użyj aria-labelledby, aby odnieść się do elementu menu lub przycisku, który steruje wyświetlaniem tego elementu.
  • W przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy menu lub paska menu .
menubar zalecana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel elementów menuitem w elemencie menubar. Nazywanie menubar jest porównywalne do nazywania przycisku menu. Nazwa przycisku button otwierającego menu przekazuje cel otwieranego menu. Ponieważ element menubar jest wyświetlany w sposób ciągły, nazwa menubar może służyć temu samemu celowi.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz menu lub pasek menu Wzorzec projektowy.
menuitem wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Uwaga: treść zawarta w dziecku menu jest automatycznie wykluczana z obliczania dostępnej nazwy.
  • Zobacz Wzorzec projektowy menu lub paska menu.
menuitemcheckbox wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Zobacz Wzorzec projektowy menu lub paska menu.
menuitemradio wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Zobacz Wzorzec projektowy menu lub paska menu.
meter wymagana
  • Jeśli jest oparty na elemencie HTML meter, może być nazwany za pomocą elementu HTML label.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
navigation zalecana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel punktu orientacyjnego nawigacji.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz sekcję Punkt orientacyjny navigation.
none Zabroniona Element z role="none" nie jest częścią drzewa dostępności (z wyjątkiem przypadków błędów). Nie używaj aria-labelledby, ani aria-label.
note uznaniowo
  • Nazwa jest opcjonalna, ale może pomóc użytkownikom czytników ekranu zrozumieć kontekst i cel notatki.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
option wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Zobacz Wzorzec projektowy combobox.
paragraph Zabroniona
presentation Zabroniona Element z role="presentation" nie jest częścią drzewa dostępności (z wyjątkiem przypadków błędów). Nie używaj aria-labelledby, ani aria-label.
progressbar wymagana
  • Jeśli rola progressbar jest zastosowana do elementu HTML progress, można go nazwać za pomocą elementu HTML label.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
radio wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Jeśli jest oparty na elemencie HTML z type="checkbox", użyj elementu label.
  • W przeciwnym razie odwołaj się do widocznej treści za pomocą aria-labelledby.
radiogroup wymagana
  • Zalecane, aby pomóc użytkownikom technologii wspomagających zrozumieć przeznaczenie grupy przycisków radio.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy grupy radiowej.
region wymagana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel punktu orientacyjnego.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz sekcję Punkt orientacyjny region.
row Wymagana tylko wtedy, gdy treść elementu nie wystarcza oraz można ustawić fokus na elemencie potomnym treegrid i na wierszu. Gdy elementy row można ustawić w siatce drzewa, czytniki ekranu ogłaszają całą treść wiersza podczas nawigowania po wierszu. Jest to zazwyczaj najbardziej odpowiednie zachowanie. Jednak w niektórych okolicznościach może być korzystna zmiana kolejności ogłaszania komórek lub wykluczenie ogłaszania niektórych komórek za pomocą odwołania aria-labelledby, które komórki mają być ogłaszane.
rowgroup Nie wymieniaj Nazwa nie jest obsługiwana przez technologie wspomagające.
rowheader wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Jeśli rola rowheader wynika z elementu HTML th, atrybut HTML abbr może być użyty do określenia skróconej wersji nazwy, która jest ogłaszana tylko wtedy, gdy czytniki ekranu czytają komórki cell powiązane z table, grid lub treegrid.
scrollbar uznaniowo
  • Nazwa jest opcjonalna, ale może pomóc użytkownikom czytników ekranu w zrozumieniu przeznaczenia paska przewijania. Cel jest również przekazywany za pomocą atrybutu aria-controls, który jest wymagany dla scrollbar.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie przy użyciu aria-label.
search zalecana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel punktu orientacyjnego search.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie przy użyciu aria-label.
  • Zobacz sekcję Punkt orientacyjny search.
searchbox wymagana
  • Jeśli rola searchbox jest zastosowana do elementu HTML input, można ją nazwać za pomocą elementu HTML label.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
separator uznaniowo
  • Zalecane, jeśli na stronie znajduje się więcej niż jeden element separator, na który można ustawić fokus.
  • Może pomóc użytkownikom technologii wspomagających zrozumieć cel separatora.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie przy użyciu aria-label.
slider wymagana
spinbutton wymagana
  • Jeśli rola spinbutton jest zastosowana do elementu HTML input, można go nazwać za pomocą elementu HTML label.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy Spinbutton.
status uznaniowo Niektóre czytniki ekranu ogłaszają nazwę elementu status przed ogłoszeniem treści elementu status. W ten sposób aria-label zapewnia metodę poprzedzania widocznej treści elementu statusu tekstem, który nie jest wyświetlany jako część elementu statusu. Użycie aria-label jest funkcjonalnie równoważne z dostarczaniem tekstu pozaekranowego w treści elementu status, z wyjątkiem tego, gdy tekst pozaekranowy byłby ogłaszany przez czytniki ekranu, które nie obsługują aria-label elementów status.
strong Zabroniona
subscript Zabroniona
superscript Zabroniona
switch wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Jeśli jest oparty na HTML type="checkbox", użyj elementu label.
  • W przeciwnym razie odwołaj się do widocznej treści za pomocą aria-labelledby.
tab wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
table wymagana
  • Jeśli używasz elementu HTML table, użyj elementu caption.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy tabeli.
tablist zalecana
  • Pomaga użytkownikom czytników ekranu zrozumieć kontekst i cel listy kart.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy karuzeli i Wzorzec projektowy kart.
tabpanel wymagana
term nie nazywaj Ponieważ termin jest zwykle nazwą elementu role="definition", może być mylące, jeśli sam termin ma również nazwę.
textbox wymagana
  • Jeśli rola textbox jest zastosowana do kodu HTML input lub elementu textarea, można go nazwać za pomocą elementu HTML label.
  • W przeciwnym razie użyj aria-labelledby, jeśli etykieta jest widoczna.
  • Użyj aria-label, jeśli nie ma widocznej etykiety.
time Nie wymieniaj Nazewa nie jest obsługiwana przez technologie wspomagające.
timer uznaniowo Niektóre czytniki ekranu ogłaszają nazwę elementu timer przed ogłoszeniem treści elementu timer. W ten sposób aria-label zapewnia metodę poprzedzania widocznej treści elementu timer tekstem, który nie jest wyświetlany jako część elementu timer. Używanie aria-label jest funkcjonalnie równoważne z dostarczaniem tekstu pozaekranowego w treści elementu timer, z wyjątkiem tego, gdy tekst pozaekranowy byłby ogłaszany przez czytniki ekranu, które nie obsługują aria-label elementów timer.
toolbar zalecana
  • Jeśli na stronie znajduje się więcej niż jeden element toolbar, nazwa jest wymagana.
  • Pomaga użytkownikom technologii wspomagających zrozumieć cel paska narzędzi, nawet jeśli na stronie znajduje się tylko jeden pasek narzędzi.
  • Użyj aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzór paska narzędzi.
tooltip wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
tree wymagana
treegrid wymagana
  • Jeśli treegrid zostanie zastosowana do elementu HTML table, dostępna nazwa może pochodzić z elementu tabeli caption.
  • Możesz też użyć aria-labelledby, jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label.
  • Zobacz Wzorzec projektowy Treegrid.
treeitem wymagana tylko wtedy, gdy treść elementu nie wystarcza
  • Ostrzeżenie! Użycie aria-label lub aria-labelledby ukryje treść elementów potomnych przed technologiami wspomagającymi.
  • Najlepiej, gdy nazwa jest nadana przez widoczną treść potomną.
  • Uwaga: treść zawarta w dziecku group jest automatycznie wykluczana z obliczania dostępnej nazwy.
  • Zobacz Wzorzec projektowy widoku drzewa.

Obliczanie dostępnej nazwy

Programy użytkownika konstruują dostępny ciąg nazw dla elementu, przechodząc przez listę potencjalnych metod nazewnictwa i używając pierwszej, która generuje nazwę. Algorytm, którym się kierują, jest zdefiniowany w specyfikacji dostępnych nazw. W przybliżeniu wygląda on następująco:

  1. Najpierw używana jest właściwość aria-labelledby, jeśli istnieje.

  2. Jeśli nazwa jest nadal pusta, używana jest właściwość aria-label, jeśli istnieje.

  3. Jeśli nazwa jest nadal pusta, używane są atrybuty lub elementy specyficzne dla języka hosta, jeśli istnieją. W przypadku HTML są to, w zależności od elementu:

    input, którego atrybut type ma wartość button, submit lub reset
    atrybut value.
    input, którego atrybut type ma wartość przycisku image
    img
    area
    atrybut alt.
    fieldset
    Pierwszy element potomny legend.
    Inne elementy formularza
    Powiązany(e) element(y) label.
    figure
    Pierwszy element potomny figcaption.
    table
    Pierwszy element potomny caption.
  4. Jeśli nazwa jest nadal pusta, to dla elementów z rolą, która obsługuje nadawanie nazw z treści potonmnej, używana jest treść elementu.

  5. Wreszcie, jeśli nazwa jest nadal pusta, używane są inne rezerwowe atrybuty lub elementy specyficzne dla języka hosta, jeśli istnieją. W przypadku HTML są to, w zależności od elementu:

    input, którego atrybut type ma wartość text, password, search, phone lub url
    textarea
    atrybut title. W przeciwnym razie atrybut placeholder.
    input, którego atrybut type ma wartość submit
    Zlokalizowany ciąg słowa „prześlij”.
    input, którego atrybut type ma wartość reset
    Zlokalizowany ciąg słowa „reset”.
    input, którego atrybut type ma wartość image przycisku
    atrybut title. W przeciwnym razie zlokalizowany ciąg wyrażenia „Prześlij zapytanie”.
    summary
    Słowo „Szczegóły”.
    Inne elementy
    atrybut title.

Ostatnim krokiem jest mechanizm awaryjny. Ogólnie rzecz biorąc, podczas etykietowania elementu należy użyć jednego z mechanizmów bezawaryjnych.

Podczas obliczania nazwy z treści program użytkownika przechodzi przez wszystkie węzły potomne, z wyjątkiem przypadków treeitem i menuitem opisanych poniżej. A gdy podąża za odwołaniami w atrybucie aria-labelledby, podobnie przechodzi drzewo każdego elementu, do którego się odwołuje. Tak więc algorytm nazewnictwa jest rekurencyjny. Poniższe dwie sekcje wyjaśniają nierekurencyjne i rekurencyjne przykłady działania algorytmu.

Podczas obliczania nazwy z treści dla roli treeitem, treść potomna elementów podrzędnych group nie jest uwzględniana. Na przykład poniżej nazwa pierwszego elementu drzewa tree to Owoce; Jabłka, Banany i Pomarańcze są automatycznie pomijane.

<ul role="tree">
  <li role="treeitem">Owoce
    <ul role="group">
      <li role="treeitem">Jabłka</li>
      <li role="treeitem">Banany</li>
      <li role="treeitem">Pomarańcze</li>
    </ul>
  </li>
</ul>

Podobnie podczas obliczania nazwy z treści dla roli menuitem, treść potomna elementów menu. Tak więc nazwa pierwszego rodzica menuitem poniższego menu to Owoce.

<ul role="menu">
  <li role="menuitem">Owoce
    <ul role="menu">
      <li role="menuitem">Jabłka</li>
      <li role="menuitem">Banany</li>
      <li role="menuitem">Pomarańcze</li>
    </ul>
  </li>
</ul>

Przykłady nierekurencyjnego obliczania dostępnych nazw

Rozważ element input, który nie ma powiązanego elementu label, a tylko atrybut name, a więc nie ma dostępnej nazwy (nie rób tego):

<input name="code">

Jeśli istnieje atrybut placeholder, to służy on jako mechanizm awaryjnego nazywania (unikaj tego):

<input name="code"
       placeholder="Kod jednorazowy">

Jeśli istnieje również atrybut title, to jest on używany jako dostępna nazwa zamiast placeholder, ale nadal jest to wyjście awaryjne (unikaj tego):

<input name="code"
       placeholder="123456"
       title="Kod jednorazowy">

Jeśli istnieje również element label (zalecane), to jest on używany jako dostępna nazwa, a atrybut title jest używany jako dostępny opis:

<label>One-time code
 <input name="code"
        placeholder="123456"
        title="Pobierz swój kod z aplikacji.">
</label>

Jeśli istnieje również atrybut aria-label (niezalecany, chyba że zwiększa to przejrzystość dla użytkowników technologii wspomagających), wówczas staje się on dostępną nazwą, zastępując element label:

<label>Code
 <input name="code"
        aria-label="Kod jednorazowy"
        placeholder="123456"
        title="Pobierz swój kod z aplikacji.">
</label>

Jeśli istnieje również atrybut aria-labelledby, który wygrywa z innymi elementami i atrybutami (atrybut aria-label należy usunąć, jeśli nie jest używany):

<p>Wpisz swój <span id="code-label">Kod jednorazowy</span> to log in.</p>
<p>
 <label>Kod
  <input name="code"
         aria-labelledby="etykieta kodu"
         aria-label="To jest ignorowane"
         placeholder="123456"
         title="Pobierz swój kod z aplikacji.">
 </label>
</p>

Przykłady rekurencyjnego obliczania dostępnych nazw

Algorytm obliczania dostępnej nazwy będzie wywoływany rekurencyjnie w razie potrzeby. Odwołanie aria-labelledby powoduje, że algorytm jest wywoływany rekursywnie, a podczas obliczania dostępnej nazwy z treści algorytm jest wywoływany rekurencyjnie dla każdego węzła potomnego.

W tym przykładzie etykieta przycisku jest obliczana cyklicznie w każdym węźle podrzędnym, co skutkuje nazwą Wyrzuć do kosza.

<button>Wyrzuć do <img src="/bin.svg" alt="kosza"></button>

Podczas podążania za odwołaniem aria-labelledby algorytm unika dwukrotnego podążania za tym samym odwołąniem, aby uniknąć nieskończonych pętli.

W tym przykładzie etykieta przycisku jest obliczana, najpierw w wyniku podążania za odwołaniem aria-labelledby do elementu nadrzędnego, a następnie obliczanie etykiety dla tego elementu z węzłów dzieci, najpierw odwiedzając ponownie element button, ale ignorując odwołanie aria-labelledby, a zamiast tego używając aria-label, a następnie odwiedzenie kolejnego dziecka (węzeł tekstowy). Otrzymana etykieta to Usuń spotkanie: Dzienny raport o stanie.

<div id="meeting-1">
  <button aria-labelledby="meeting-1" aria-label="Usuń spotkanie:">X</button>
  Dzienny raport o stanie
</div>

Techniki opisywania

Opisywanie poprzez odwołanie do treści za pomocą aria-describedby

Właściwość aria-describedby działa podobnie do właściwości aria-labelledby. Na przykład przycisk może być opisany przez akapit rodzeństwa.

<button aria-describedby="trash-desc">Wyrzuć do kosza</button>
...
<p id="trash-desc">Rzeczy z kosza będą trwale usunięte po 30 dniach.</p>

Opisy są zredukowane do ciągów tekstowych. Na przykład, jeśli opis zawiera element HTML img, obliczany jest tekstowy odpowiednik obrazu.

<button aria-describedby="trash-desc">Wyrzuć do <img src="/bin.svg" alt="kosz"></button>
...
<p id="trash-desc">Items in <img src="/bin.svg" alt="the trash"> will be permanently removed after 30 days.</p>

Podobnie jak w przypadku aria-labelledby, możliwe jest odwołanie się do elementu za pomocą aria-describedby, nawet jeśli ten element jest ukryty. Na przykład pole tekstowe w formularzu może mieć opis, który jest domyślnie ukryty, ale może zostać ujawniony na żądanie za pomocą widżetu ujawniającego. Do opisu można się również odwołać bezpośrednio z pola tekstowego za pomocą aria-describedby. W poniższym przykładzie dostępnym opisem elementu input jest Twoja nazwa użytkownika jest nazwą, której używasz do zalogowania się do tego serwisu.

<label for="username">Nazwa użytkownika</label>
<input id="nazwa użytkownika" name="username" aria-describedby="username-desc">
<button aria-expanded="false" aria-controls="username-desc" aria-label="Pomoc dotycząca nazwy użytkownika">?</button>
<p id="username-desc" hidden>
 Twoja nazwa użytkownika jest nazwą, której używasz do zalogowania się do tego serwisu.
</p>

Opisywanie tabel i rysunków za pomocą podpisów

W HTML, jeśli table jest nazwana za pomocą aria-label lub aria-labelledby, element potomny caption staje się dostępnym opisem. Na przykład, poprzedzający nagłówek może służyć jako odpowiednia dostępna nazwa, a element caption może zawierać dłuższy opis. W takiej sytuacji właściwość aria-labelledby może być użyta w table, aby ustawić dostępną nazwę na treść nagłówka, a caption stanie się dostępnym opisem.

<h2 id="events-heading">Nadchodzące wydarzenia</h2>
<table aria-labelledby="events-heading">
 <caption>
 Kalendarz nadchodzących wydarzeń, tygodnie od 27 do 31, przy czym każdy tydzień zaczyna się od poniedziałku. W pierwszej kolumnie znajduje się numer tygodnia. 
 </caption>
 <tr><th>Tydzień</th><th>Poniedziałek</th><th>Wtorek</th><th>Środa</th><th>Czwartek</th><th>Piątek</th><th>Sobota</th><th>Niedziela</th></tr>
 <tr><td>27</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
 <tr><td>28</td><td></td><td></td><td></td><td></td><td></td><td></td><td><a href="/events/9856"> Urodziny księżniczki</a></td></tr>
 <tr><td>29</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
 <tr><td>30</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
 <tr><td>31</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
</table>

Element HTML figure może uzyskać swoją dostępną nazwę ze swojego elementu figcaption, ale nie zostanie użyty jako dostępny opis, nawet jeśli nie został użyty jako dostępna nazwa. Jeśli element figcaption jest odpowiedni jako dostępny opis, a dostępna nazwa jest ustawiona przy użyciu aria-labelledby lub aria-label, wówczas figcaption może być jawnie ustawiony jako dostępny opis przy użyciu atrybutu aria-describedby.

<h2 id="neutron">Neutron</h2>
<figure aria-labelledby="neutron" aria-describedby="neutron-caption">
 <img src="/neutron.svg" alt="Wewnątrz neutronu znajdują się trzy kwarki (niebieski 'u'
 czerwony 'd', zielony 'd'), które są ze sobą połączone.">
 <figcaption id="neutron-caption">
  Zawartość kwarków w neutronie. Przypisanie koloru poszczególnym kwarkom jest  dowolne, ale wszystkie trzy kolory muszą być obecne. Siły pomiędzy kwarkami są  pośredniczone przez gluony.
 </figcaption>
</figure>

Opisy pochodzące z tytułów

Jeśli dostępny opis nie został zapewniony przy użyciu atrybutu aria-describedby lub jednego z podstawowych atrybutów lub elementów specyficznych dla języka hosta (np. elementu caption dla table), to w przypadku HTML, jeśli element ma atrybut title, jest on używany jako dostępny opis.

Widoczny opis wraz z aria-describedby jest ogólnie zalecany. Jeśli pożądany jest opis niewidoczny, wtedy atrybut title może być użyty dla każdego elementu HTML, który może mieć dostępny opis.

Zwróć uwagę, że atrybut title może być niedostępny dla niektórych użytkowników, w szczególności widzących, którzy nie korzystają z czytnika ekranu i urządzenia wskazującego, które obsługuje funkcję hover (np. mysz).

Na przykład element input z danymi wejściowymi ograniczonymi za pomocą atrybutu pattern może użyć atrybutu title do opisania, jakie są oczekiwane dane wejściowe.

<label> Numer części:
 <input pattern="[0-9][A-Z]{3}" name="part"
        title="Numer części to cyfra, po której następują trzy duże litery."/>
</label>

Atrybut title w tym przypadku może być pokazany użytkownikowi jako podpowiedź, gdy użytkownik wskazuje kontrolkę lub przenosi na nią fokus klawiatury, ale także jako część komunikatu o błędzie, gdy program użytkownika sprawdza poprawność formularza, jeśli wartość elementu input nie pasuje do pattern.

Inny przykład, link może używać atrybutu title do bardziej szczegółowego opisu linku.

<a href="http://twitter.com/W3C"
   title="Follow W3C on Twitter">
   <img src="/2008/site/images/Twitter_bird_logo_2012.svg"
        alt="Twitter" class="social-icon" height="40" />
</a>

Obliczanie dostępnego opisu

Podobnie jak obliczenie dostępnej nazwy, obliczenie dostępnego opisu generuje ciąg tekstowy.

Algorytm obliczania dostępnego opisu jest taki sam jak algorytm obliczania dostępnej nazwy, z wyjątkiem kilku punktów rozgałęzienia, które zależą od tego, czy obliczana jest nazwa czy opis. W szczególności podczas gromadzenia tekstu dla dostępnego opisu algorytm używa aria-describedby zamiast aria-labelledby.

Programy użytkownika tworzą dostępny łańcuch opisu dla elementu, przeglądając listę potencjalnych metod opisu i używając pierwszej, która generuje opis. Algorytm, którym się posługują, jest zdefiniowany w specyfikacji dostępnej nazwy. W przybliżeniu wygląda on następująco:

Właściwość aria-describedby jest używana, jeśli jest obecna.
  1. Najpierw używana jest właściwość aria-describedby, jeśli istnieje.

  2. Jeśli opis jest nadal pusty, używane są atrybuty lub elementy specyficzne dla języka hosta, o ile nie zostały jeszcze użyte jako dostępna nazwa. W przypadku HTML są to, w zależności od elementu:

    input, którego atrybut type ma wartość button, submit lub reset
    atrybut value.
    summary
    Poddrzewo elementu.
    table
    Pierwszy element potomny caption.
  3. Wreszcie, jeśli opis jest nadal pusty, to używane są inne atrybuty lub elementy specyficzne dla języka hosta, jeśli istnieją, o ile nie były już używane dla dostępnej nazwy. W przypadku języka HTML jest to atrybut title.

Pomóż ulepszyć tę stronę

Jeśli masz pomysł, propozycję poprawienia tej strony, napisz na adres Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript..

O tym dokumencie

Źródło: Providing Accessible Names and Descriptions, Copyright © 2022 W3C ® (MIT, ERCIM, Keio, Beihang) Permission to Use WAI Material.

Tłumaczenie: Stefan Wajda,
© 2022 Pracownia Dostępności Cyfrowej LepszyWeb.pl, Wszystkie prawa zastrzeżone