PL EN

Aria atrybuty, które powinieneś znać

Obecnie gotowe biblioteki UI dobrze radzą sobie z dostępnością dostarczanych komponentów, ale nie zwalnia nas to z obowiązku pilnowania wymagań, które musimy spełnić tworząc rozwiązania dla biznesu. Atrybutów ARIA jest znacznie więcej, niż poniżej opisane, ale moim celem jest wskazanie tych najczęściej używanych. Sama świadomość o wymaganiach A11y pozwoli na samodzielną głębszą analizę, jeśli trafisz na bardziej specyficzny przypadek użycia.

aria-current

Pomaga użytkownikom z technologiami wspomagającymi wskazując na aktualnie wybrany element w kontekście wyświetlanych stron lub widoków aplikacji. Często powiązany jest z nawigacją, paginacją lub krokami w kilku etapowym formularzu.

<nav>
  <ul>
    <li><a href="/home">Home</a></li>
    <li><a href="/about" aria-current="page">About</a></li>
  </ul>
</nav>

aria-controls

Wskazuje na komponent, którego stan jest kontrolowany przez bieżący element, np. akordeon, widget.

<button aria-controls="info-box" aria-expanded="false">Toggle view</button>
<div id="info-box">
 ...
</div>

aria-expanded

Wskazuje, czy rozwijany element jest rozwinięty lub zwinięty. Przykład z kodem zgodnie z aria-controls.

aria-live

Wskazuje na komponent, którego zawartość jest dynamicznie aktualizowana informując czytniki ekranu o zmianie w treści. Jego użycie pojawia się podczas komunikacji o błędach, notyfikacjach lub czatach.

<div aria-live="polite">Please, verify your credentials</div>

W podanym przykładzie polite poczeka na zakończenie trwających interakcji, natomiast assertive ogłosi komunikat natychmiastowo.

aria-hidden

Ukrywa element wraz z jego komponentami zagnieżdżonymi przed użytkownikiem (ukrycie w accessibility tree). Nie używa się atrybutu hidden na elementy, które podlegają focusowi.

<a href="#" target="_blank" rel="noopener">
  <img src="/media-icon.svg" aria-hidden="true"/>
  <span>Social Media</span>
</a>

aria-haspopup

Informuje, że element może otworzyć dodatkowy widok, jak menu lub modal. Jego wartość określa typ pojawiającego się komponentu.

<button aria-haspopup="dialog" aria-controls="dialog-box">Open</button>

aria-label

Zapewnia etykietę dla elementu, która nie jest widoczna na ekranie, ale jest czytana przez technologie wspomagające.

<button aria-label="Close">X</button>

aria-labelledby

Wiąże element z innym, stając się etykietą dla powiązanego elementu.

<h2 id="heading-post">Very specific heading of a blog post</h2>
<div>
    <p>Lorem ipsum…</p>
    <a href="#" aria-labelledby="heading-post">Go to read more</a>
</div>

aria-describedby

Dostarcza dodatkowe informacje o danym elemencie.

<button aria-describedby="delete-info">Delete</button>
<p id="delete-info">
  Deleted item will be permanently removed from our database.
</p>

aria-invalid

Informuje o niepoprawnie nadanej wartości w elemencie. Komunikuje o błędach formularza podczas walidacji.

<input type="email" aria-invalid="true" />

aria-atomic

Określa czy cała zawartość elementu powinna być odczytana przez czytnik, nawet tylko po częściowej zmianie tekstu.

<button aria-live="polite" aria-atomic="true">
    Cart. <span id="items">3</span> <span class="visually-hidden">Items</span>
</button>

aria-busy

Informuje, że element jest w trakcie aktualizacji i nie powinien być w tym czasie odczytywany.

<div aria-busy="true">Loading...</div>

role

Określa rolę elementu w aplikacji i pomaga technologiom wspomagającym zrozumieć, jakiego typu jest to element.

 <button id="menubutton" aria-haspopup="true" aria-controls="menu">
    <img src="/menu-icon.svg" alt="Pages menu" />
  </button>
  <ul id="menu" role="menu" aria-labelledby="menubutton">
      <li><a href="/home">Home</a></li>
      <li><a href="/about" aria-current="page">About</a></li>
  </ul>

Aby ułatwić utrzymanie zasad dostępności w całej aplikacji, warto skorzystać z narzędzi, które automatycznie sprawdzą poprawność implementacji. Jednym z takich narzędzi jest eslint-plugin-jsx-a11y – plugin do ESLint, który pomaga przestrzegać zasad dostępności w aplikacjach React.

Powrót do artykułów