WCAG 1.3.1: Informacje i relacje

Wprowadzenie

Kryterium sukcesu WCAG 1.3.1 „Informacje i relacje” (Info and Relationships) na poziomie A, jest jednym z fundamentalnych wymogów dotyczących dostępności treści internetowych. Jego głównym celem jest zapewnienie, że informacje, struktura i relacje, które są przekazywane wizualnie poprzez prezentację graficzną, są również dostępne programowo (czyli w kodzie) lub w tekście. Oznacza to, że użytkownicy technologii wspomagających, takich jak czytniki ekranu, powinni mieć dostęp do tych samych informacji o strukturze i znaczeniu treści, co użytkownicy widzący stronę.

Dlaczego kryterium 1.3.1 jest ważne? (Wpływ na dostępność)

To kryterium ma kluczowe znaczenie dla wielu grup użytkowników z niepełnosprawnościami:

  • Osoby niewidome i słabowidzące (używające czytników ekranu): Czytniki ekranu interpretują kod strony, aby przekazać użytkownikowi jej zawartość. Jeśli struktura (np. nagłówki, listy, relacje między elementami formularza) nie jest programowo zdefiniowana, czytnik ekranu nie jest w stanie przekazać tych informacji, co uniemożliwia zrozumienie kontekstu i nawigację.
  • Osoby z niepełnosprawnościami poznawczymi: Spójna i logiczna struktura pomaga w lepszym zrozumieniu treści i łatwiejszej nawigacji. Brak jasnych relacji może prowadzić do dezorientacji.
  • Osoby z dysleksją: Poprawna struktura semantyczna, np. użycie nagłówków, ułatwia skanowanie i przetwarzanie tekstu.
  • Osoby korzystające z alternatywnych metod nawigacji: Użytkownicy korzystający z klawiatury, przełączników lub innych technologii wspomagających polegają na programowej strukturze do efektywnego poruszania się po stronie i interakcji z jej elementami.

Ignorowanie tego kryterium sprawia, że strona staje się chaotyczna i niezrozumiała dla wielu użytkowników, którzy nie mogą polegać na wizualnych wskazówkach.

Wymagania kryterium sukcesu 1.3.1

Kryterium to wymaga, aby „Informacje, struktura i relacje przekazywane przez prezentację mogły być programowo określone lub dostępne w tekście.”

Programowo określone relacje

Oznacza to, że informacje o strukturze i relacjach powinny być zakodowane w HTML (lub innej technologii webowej) w sposób zrozumiały dla przeglądarek i technologii wspomagających. Przykłady obejmują:

  • Semantyczne znaczniki HTML: Używanie nagłówków (<h1> do <h6>), list (<ul>, <ol>, <dl>), tabel (<table>, <th>, <caption>), formularzy (<label>, <fieldset>, <legend>), itp.
  • Atrybuty WAI-ARIA: Kiedy natywne HTML nie jest wystarczające do przekazania wszystkich relacji lub ról (np. w przypadku złożonych widżetów UI), można użyć atrybutów ARIA (role, aria-labelledby, aria-describedby, aria-controls, itp.).

Dostępne w tekście relacje

W rzadkich przypadkach, gdy programowe określenie relacji jest niemożliwe lub niepraktyczne (np. w przypadku starszych technologii), informacje o strukturze i relacjach muszą być jawnie opisane w tekście, aby każdy użytkownik mógł je zrozumieć. Jest to jednak rozwiązanie mniej preferowane niż semantyczne kodowanie.

Praktyczne wytyczne dotyczące zgodności

1. Struktura nagłówków

Używaj nagłówków HTML (<h1> do <h6>) w logicznej i hierarchicznej kolejności, aby określić strukturę treści. Nie pomijaj poziomów nagłówków i nie używaj ich wyłącznie do stylizacji.

<h1>Tytuł główny strony</h1>
<p>Wprowadzenie do tematu.</p>
<h2>Pierwszy główny rozdział</h2>
<p>Treść rozdziału...</p>
<h3>Podrozdział A</h3>
<p>Treść podrozdziału A...</p>
<h2>Drugi główny rozdział</h2>
<p>Treść rozdziału...</p>

<h1>Tytuł główny strony</h1>
<p>Wprowadzenie do tematu.</p>
<h4>Pierwszy główny rozdział (skok z h1 do h4)</h4>
<p>Treść rozdziału...</p>
<div style="font-size: 20px; font-weight: bold;">To wygląda jak nagłówek, ale nim nie jest</div>
<p>Treść podrozdziału...</p>

2. Listy

Używaj semantycznych znaczników list (<ul> dla list nieuporządkowanych, <ol> dla list uporządkowanych, <dl> dla list definicji), aby poprawnie przekazać relacje między elementami list.

<ul>
  <li>Element pierwszy</li>
  <li>Element drugi</li>
  <li>Element trzeci</li>
</ul>

<ol>
  <li>Krok 1</li>
  <li>Krok 2</li>
</ol>

<p>&#8226; Element pierwszy</p>
<p>&#8226; Element drugi</p>

<p>1. Krok 1</p>
<p>2. Krok 2</p>

3. Tabele danych

Dla tabel zawierających dane, używaj znaczników <th> do nagłówków kolumn i/lub wierszy, oraz atrybutu scope (col lub row) do jasnego określenia ich relacji z komórkami danych. Dodaj <caption> dla ogólnego opisu tabeli.

<table>
  <caption>Sprzedaż produktów w Q1 2023</caption>
  <thead>
    <tr>
      <th scope="col">Produkt</th>
      <th scope="col">Styczeń</th>
      <th scope="col">Luty</th>
      <th scope="col">Marzec</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Laptop X</th>
      <td>120</td>
      <td>150</td>
      <td>130</td>
    </tr>
    <tr>
      <th scope="row">Smartfon Y</th>
      <td>200</td>
      <td>180</td>
      <td>220</td>
    </tr>
  </tbody>
</table>

<table>
  <tr>
    <td style="font-weight: bold;">Produkt</td>
    <td style="font-weight: bold;">Styczeń</td>
    <td style="font-weight: bold;">Luty</td>
    <td style="font-weight: bold;">Marzec</td>
  </tr>
  <tr>
    <td>Laptop X</td>
    <td>120</td>
    <td>150</td>
    <td>130</td>
  </tr>
</table>

4. Formularze

Zapewnij, że wszystkie pola formularza są powiązane z odpowiednimi etykietami (<label>) za pomocą atrybutu for i id. Używaj <fieldset> i <legend> do grupowania powiązanych kontrolek formularza.

<form>
  <fieldset>
    <legend>Informacje kontaktowe</legend>
    <label for="imie">Imię:</label>
    <input type="text" id="imie" name="imie"><br>

    <label for="email">E-mail:</label>
    <input type="email" id="email" name="email"><br>
  </fieldset>

  <fieldset>
    <legend>Preferowany sposób kontaktu</legend>
    <input type="radio" id="telefon" name="kontakt" value="telefon">
    <label for="telefon">Telefon</label><br>
    
    <input type="radio" id="email_pref" name="kontakt" value="email">
    <label for="email_pref">E-mail</label>
  </fieldset>
</form>

<form>
  <p>Imię:</p>
  <input type="text" name="imie"><br>

  <p>E-mail:</p>
  <input type="email" name="email"><br>

  <div>Preferowany sposób kontaktu</div>
  <input type="radio" name="kontakt" value="telefon">Telefon<br>
  <input type="radio" name="kontakt" value="email">E-mail
</form>

5. Orientacja i nawigacja (Elementy ARIA i Regiony punktów orientacyjnych)

Używaj semantycznych znaczników HTML5 takich jak <nav>, <main>, <aside>, <header>, <footer> oraz, jeśli to konieczne, ról ARIA (np. role="navigation", role="main", role="complementary") do identyfikowania głównych sekcji strony. Pomaga to użytkownikom czytników ekranu szybko zrozumieć układ strony i nawigować między jej regionami.

<header>
  <h1>Logo Strony</h1>
  <nav aria-label="Główna nawigacja">
    <ul>
      <li><a href="/">Strona główna</a></li>
      <li><a href="/o-nas">O nas</a></li>
    </ul>
  </nav>
</header>
<main>
  <h2>Treść główna</h2>
  <p>...</p>
</main>
<aside>
  <h2>Dodatkowe informacje</h2>
  <p>...</p>
</aside>
<footer>
  <p>© 2023 Moja Firma</p>
</footer>

6. Wyróżnienia wizualne

Upewnij się, że wszelkie informacje przekazywane wizualnie (np. kolor, rozmiar, styl czcionki) mają swoje programowe odpowiedniki lub są wspierane tekstem.

<p>Elementy <span style="color: red;">wymagane</span> są oznaczone na czerwono.</p>
<!-- Bez dodatkowego wskaźnika, jak np. "* Wymagane" -->
<label for="field1">Nazwa:</label>
<input type="text" id="field1"> <!-- Jeśli to pole jest wymagane, tylko kolor nie wystarczy -->

<p>Elementy <span style="color: red;"><strong>wymagane</strong></span> są oznaczone na czerwono i pogrubione.</p>
<!-- LUB -->
<p><span class="required-indicator">*</span> Pole wymagane.</p>
<label for="field1">Nazwa <span class="required-indicator">*</span>:</label>
<input type="text" id="field1" required aria-required="true">

Najlepsze praktyki i typowe pułapki

  • Zawsze używaj semantycznego HTML: To podstawa. Zanim sięgniesz po ARIA, sprawdź, czy natywny element HTML nie spełnia Twoich potrzeb.
  • Nie polegaj wyłącznie na wyglądzie: Wizualna prezentacja jest ważna, ale zawsze upewnij się, że ta sama informacja lub relacja jest dostępna w kodzie. Na przykład, nie używaj tylko pogrubienia do oznaczania nagłówka – użyj znacznika <h1> do <h6>.
  • Testuj z czytnikami ekranu: Regularne testowanie strony za pomocą popularnych czytników ekranu (np. NVDA, JAWS, VoiceOver) jest najlepszym sposobem na zweryfikowanie, czy struktura i relacje są poprawnie interpretowane.
  • Używaj ARIA rozważnie: Atrybuty ARIA są potężne, ale mogą być skomplikowane i łatwo ich nadużyć. Niewłaściwe użycie ARIA może pogorszyć dostępność, zamiast ją poprawić. Przestrzegaj zasady „First Rule of ARIA Use”: Jeśli element HTML ma już semantykę i jest dostępny, nie używaj ARIA, aby to powielać lub zmieniać.
  • Spójność: Utrzymuj spójną strukturę i terminologię na całej stronie. Pomaga to wszystkim użytkownikom w orientacji.

Podsumowanie

Kryterium WCAG 1.3.1 jest fundamentem dostępności, gwarantującym, że struktura i znaczenie treści są zrozumiałe dla technologii wspomagających i tym samym dla wszystkich użytkowników. Poprawne stosowanie semantycznego HTML, a w razie potrzeby uzupełnianie go o odpowiednie atrybuty ARIA, jest kluczowe dla stworzenia włączającej i użytecznej witryny internetowej. Koncentrując się na programowym określaniu informacji i relacji, deweloperzy mogą znacząco poprawić doświadczenia użytkowników z różnymi potrzebami.

Przegląd prywatności

Ta strona korzysta z ciasteczek, aby zapewnić Ci najlepszą możliwą obsługę. Informacje o ciasteczkach są przechowywane w przeglądarce i wykonują funkcje takie jak rozpoznawanie Cię po powrocie na naszą stronę internetową i pomaganie naszemu zespołowi w zrozumieniu, które sekcje witryny są dla Ciebie najbardziej interesujące i przydatne.