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
).
- Opisywanie poprzez odwoływanie się do treści za pomocą
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:
- Przekazuje cel lub intencję elementu.
- 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 nazwy i obliczania 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
- przyciskcell
- komórkacheckbox
- pole wyborucolumnheader
- nagłówek kolumnygridcell
- komórka siatkiheading
- nagłóweklink
- łączemenuitem
- pozycja menu (treść zawarta w elemencie potomnymmenu
jest wykluczona.)menuitemcheckbox
- pole wyboru pozycji menumenuitemradio
- - pole opcji pozycji menuoption
- opcjaradio
- pole opcjirow
- wierszrowheader
- nagłówek wierszaswitch
- przełączniktab
- kartatooltip
- podpowiedźtreeitem
- drzewo (treść zawarta w elemencie podrzędnymgroup
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>
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.
-
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 stosowaniaaria-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. - 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. - 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. - 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 CSSdisplay: none
lub CSSvisibility: 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”.
- Właściwość
aria-labelledby
nie może być łączona łańcuchowo, tj. jeśli element zaria-labelledby
odwołuje się do innego elementu, który również maaria-labelledby
, to atrybutaria-labelledby
w elemencie odwołującym się zostanie zignorowany. - 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. - 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. - 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ływanaaria-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. - 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.
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 nieX
. Podobnie, jeśli zestaw linków nawigacyjnych w lewym pasku bocznym prowadzi do stron produktów w witrynie zakupowej, nazwij region nawigacyjnyProdukty
, a nieLewy
. -
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ń
iArchiwizuj
dla każdego kontaktu, wówczasEdytuj Jana Kowalskiego
,Usuń Jana Kowalskiego
iArchiwizuj Jana Kowalskiego
będą bardziej dostępne niżJan Kowalski edytuj
,Jana Kowalski usuń
iJana 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łowanawigacja
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
lubaria-labelledby
, treść zawarta w elemencie i jego potomkach jest ukryta przed użytkownikami technologii wspomagających, chyba że jest również przywoływana przezaria-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.
-
Wymagana tylko wtedy, gdy treść elementu nie wystarcza: Element z tą rolą jest nazwany przez jego treść podrzędną. Jeśli zastosowano
- 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 |
|
banner |
uznaniowo |
|
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 |
|
caption |
zabronione | |
cell |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
checkbox |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
code |
zabronione | |
columnheader |
Wymagane tylko wtedy, gdy treść nie wystarcza. |
|
combobox |
wymagana |
|
complementary |
zalecana |
|
contentinfo |
uznaniowo |
|
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 |
|
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 |
|
figure |
zalecana |
|
form |
zalecana |
|
generic |
Zabroniona | |
grid |
wymagana |
|
gridcell |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
group |
uznaniowo |
|
heading |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
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 |
|
list |
uznaniowo |
|
listbox |
wymagana |
|
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 |
|
marquee |
uznaniowo | Użyj aria-labelledby , jeśli etykieta jest widoczna, w przeciwnym razie użyj aria-label . |
math |
zalecana |
|
menu |
zalecana |
|
menubar |
zalecana |
|
menuitem |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
menuitemcheckbox |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
menuitemradio |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
meter |
wymagana |
|
navigation |
zalecana |
|
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 |
|
option |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
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 |
|
radio |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
radiogroup |
wymagana |
|
region |
wymagana |
|
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 |
|
scrollbar |
uznaniowo |
|
search |
zalecana |
|
searchbox |
wymagana |
|
separator |
uznaniowo |
|
slider |
wymagana |
|
spinbutton |
wymagana |
|
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 |
|
tab |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
table |
wymagana |
|
tablist |
zalecana |
|
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 |
|
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 |
|
tooltip |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
tree |
wymagana |
|
treegrid |
wymagana |
|
treeitem |
wymagana tylko wtedy, gdy treść elementu nie wystarcza |
|
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:
Najpierw używana jest właściwość
aria-labelledby
, jeśli istnieje.Jeśli nazwa jest nadal pusta, używana jest właściwość
aria-label
, jeśli istnieje.-
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 atrybuttype
ma wartośćbutton
,submit
lubreset
- atrybut
value
. input
, którego atrybuttype
ma wartość przyciskuimage
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
.
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.
-
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 atrybuttype
ma wartośćtext
,password
,search
,phone
luburl
textarea
- atrybut
title
. W przeciwnym razie atrybutplaceholder
. input
, którego atrybuttype
ma wartośćsubmit
- Zlokalizowany ciąg słowa „prześlij”.
input
, którego atrybuttype
ma wartośćreset
- Zlokalizowany ciąg słowa „reset”.
input
, którego atrybuttype
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>
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.
Najpierw używana jest właściwość
aria-describedby
, jeśli istnieje.-
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 atrybuttype
ma wartośćbutton
,submit
lubreset
- atrybut
value
. summary
- Poddrzewo elementu.
table
- Pierwszy element potomny
caption
.
-
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