Wróć do wszystkich kryteriów

2.4.3 Kolejność fokusu (ang.) Focus Order

Specjalizacje:

  • Designer
  • Deweloper

Elementy:

  • Dialogi i warstwy
  • Formularze
  • Nawigacja
  • Przyciski i kontrolki

Poziomy:

  • A

Spis treści

    Istota i cel kryterium

    Nadrzędnym celem opisywanej wytycznej jest zapewnienie, aby użytkownicy obsługujący serwisy internetowe w sposób sekwencyjny – za pomocą klawiatury lub alternatywnych urządzeń wskazujących – mogli wchodzić w interakcję z elementami aktywnymi w logicznym, intuicyjnym i w pełni przewidywalnym porządku. Prawidłowo zaprojektowana ścieżka tabulacji musi wiernie odzwierciedlać naturalny przepływ informacji, gwarantując nienaruszone znaczenie oraz pełną funkcjonalność witryny. Chaos w kolejności aktywacji elementów drastycznie obniża użyteczność interfejsu i może całkowicie uniemożliwić realizację kluczowych procesów.

    Zastosuj tę regułę wszędzie tam, gdzie układ elementów na ekranie determinuje sens operacji lub wpływa na zrozumienie przekazu. Właściwe wdrożenie sprawia, że nawigacja staje się płynna i nie wymaga od użytkownika ciągłego domyślania się, gdzie w danym momencie znajduje się wskaźnik.

    Pamiętaj, że standard ten nie określa, które konkretnie elementy muszą lub nie powinny otrzymywać fokusu. Koncentruje się on wyłącznie na kolejności przemieszczania się punktu uwagi. Dopuszczalne jest ustawienie fokusu na elementach nieaktywnych (np. tekście statycznym), o ile nie utrudnia to obsługi strony i nie wprowadza chaosu nawigacyjnego.

    Definicja w j. angielskim

    Definicja dostępna pod adresem (link otworzy się w nowej karcie):
    https://www.w3.org/WAI/WCAG22/quickref/#focus-order

    Definicja w j. polskim

    Definicja dostępna pod adresem (link otworzy się w nowej karcie):
    https://www.w3.org/Translations/WCAG21-pl/#kolejnosc-fokusu

    Słownik pojęć

    Nawigacja sekwencyjna
    –

    proces przemieszczania punktu uwagi (fokusu) pomiędzy elementami interaktywnymi jeden po drugim, wywoływany najczęściej seryjnym naciskaniem klawisza Tabulatora (Tab) lub kombinacji Shift + Tab. Przykłady obejmują również dedykowane poruszanie się strzałkami wewnątrz złożonych komponentów (np. drzew czy struktur menu).

    (ang.) Document Object Model – DOM
    –

    struktura drzewiasta generowana przez przeglądarkę na podstawie kodu HTML, określająca domyślną kolejność, w jakiej technologie asystujące oraz systemy operacyjne przetwarzają komponenty interfejsu.

    Pułapka fokusu (ang.) focus trap
    –

    programistyczny mechanizm zabezpieczający, który blokuje możliwość wyjścia fokusu poza ściśle określony fragment witryny (np. aktywne okno modalne) i zapobiega przypadkowym interakcjom z elementami ukrytymi w tle.

    Wpływ na dostępność (Kogo wspierasz?)

    • Osoby z zaburzeniami poznawczymi (np. dysleksją czy trudnościami z koncentracją): Stabilna i łatwa do przewidzenia kolejność tabulacji wyraźnie ogranicza obciążenie psychiczne. Pamiętaj, że nieoczekiwane, chaotyczne przeskoki wskaźnika wywołują u tych odbiorców silną dezorientację oraz utratę wątku.
    • Użytkownicy czytników ekranu: Oprogramowanie syntezujące mowę podąża bezwzględnie za strukturą DOM. Gdy porządek kodu jest tożsamy z kompozycją graficzną, osoby niewidome bez trudu budują w wyobraźni właściwy obraz strony i bezbłędnie rozumieją kontekst funkcjonalny.
    • Użytkownicy powiększeń ekranowych (lup elektronicznych): Osoby słabowidzące korzystające z wysokich poziomów skalowania widzą w danym momencie jedynie mały wycinek ekranu. Jeśli fokus przeskakuje niespodziewanie w odległe, przypadkowe miejsce, użytkownik natychmiast traci orientację przestrzenną i nie wie, w jakim kontekście się znajduje.
    • Osoby z niepełnosprawnościami motorycznymi: Użytkownicy, którzy z racji ograniczeń fizycznych lub bolesnych schorzeń rezygnują z myszy komputerowej, polegają wyłącznie na klawiaturze. Precyzyjny i płynny system tabulacji chroni ich przed koniecznością wykonywania dziesiątek zbędnych kliknięć.
    • Wszyscy użytkownicy interfejsów: Logiczny podział i naturalne następowanie pól po sobie znacznie podnosi ergonomię pracy, pozwalając zaawansowanym użytkownikom na błyskawiczne wypełnianie formularzy bez odrywania dłoni od klawiatury.

    Zasady wdrażania i wymagania techniczne

    • Kategoryczny zakaz używania dodatnich wartości atrybutu tabindex: Unikaj wprowadzania deklaracji takich jak tabindex="1", tabindex="2" czy wyższych. Sztuczne modyfikowanie domyślnego zachowania przeglądarki jest powszechnym źródłem krytycznych błędów dostępności.
    • Projektowanie interfejsu w oparciu o naturalną strukturę DOM: Zawsze dbaj o to, aby kolejność występowania elementów interaktywnych w dokumencie HTML w pełni odpowiadała ich wizualnemu układowi na ekranie (w kulturze zachodniej: od lewej do prawej, od góry do dołu).
    • Dopuszczalna elastyczność względem kryterium 1.3.2: Kolejność fokusu nie musi być idealnie tożsama z programistyczną kolejnością odczytu treści, o ile użytkownik nadal bez problemu rozumie znaczenie i potrafi w pełni obsłużyć stronę.
    • Implementacja właściwości tabindex="0" dla kontrolek niestandardowych: Gdy zachodzi potrzeba stworzenia unikalnego komponentu od podstaw z użyciem niesemantycznych tagów (takich jak <div> lub <span>), które mają pełnić rolę np. przycisku, zastosuj regułę tabindex="0". W ten sposób włączysz dany obiekt do naturalnego i domyślnego cyklu tabulacji przeglądarki. Nie zapomnij jednak o konieczności przypisania właściwych ról ARIA oraz pełnego oprogramowania obsługi zdarzeń klawiatury przy użyciu klawiszy Enter oraz Spacji.
    • Kontrola dynamicznych zmian za pomocą tabindex="-1": Używaj wartości ujemnej, aby całkowicie wykluczyć określony element z sekwencyjnego obiegu klawiatury, zachowując jednocześnie możliwość natychmiastowego skierowania na niego uwagi w sposób programowy. Rozwiązanie to jest niezastąpione przy dynamicznym renderowaniu treści przez systemy JavaScript przy użyciu metody element.focus(), na przykład przy przenoszeniu uwagi użytkownika na nowo wyświetlony komunikat o błędzie nad formularzem.
    • Zaawansowane zarządzanie fokusem w modalach i oknach dialogowych: Dynamicznie otwierane warstwy nakładają na programistę obowiązek pełnego okiełznania ścieżki nawigacji. Wdrożenie musi realizować trzy kluczowe kroki:
      • Przeniesienie punktu uwagi: Natychmiast po zainicjowaniu otwarcia modala, przenieś fokus za pomocą skryptu do jego wnętrza (np. na pierwszy nagłówek lub pole formularza).
      • Uruchomienie pułapki fokusu: Zaimplementuj nasłuchiwanie zdarzeń klawiatury. Gdy użytkownik dotrze do ostatniej kontrolki w modalu i wciśnie klawisz Tab, kursor musi automatycznie przeskoczyć na pierwszy element interaktywny w tym oknie (analogicznie kombinacja Shift + Tab na pierwszym elemencie przenosi go na koniec). Zapobiegnie to „ucieczce” wskaźnika pod spód nakładki.
      • Przywrócenie pozycji wyjściowej: Po zamknięciu okna dialogowego (zarówno przyciskiem zamknij, jak i klawiszem Esc), bezwzględnie przekieruj fokus z powrotem na element wyzwalający (przycisk, który otworzył okno), aby użytkownik mógł bez przeszkód kontynuować przerwane przeglądanie.

    Wyjątki i sytuacje szczególne

    Zasada zachowania sztywnej kolejności sekwencyjnej dopuszcza pewne ustępstwa w ściśle określonych warunkach:

    • Zbiory elementów o niezależnym znaczeniu: Jeśli na stronie znajduje się rozbudowana siatka identycznych kart produktowych lub mozaika odnośników do artykułów, zmiana kierunku tabulacji (np. przemieszczanie się kolumnami pionowymi zamiast wierszami poziomymi) nie stanowi naruszenia kryterium, ponieważ zmiana kolejności zapoznawania się z tymi obiektami nie wypacza sensu całości i nie utrudnia wykonania żadnej operacji. W sytuacjach, gdy układ treści dopuszcza więcej niż jedną logiczną ścieżkę nawigacji (np. poruszanie się po komórkach tabeli najpierw rzędami lub najpierw kolumnami), poprawna implementacja dowolnej z nich jest wystarczająca do zaliczenia testu.
    • Interfejsy z dedykowanym systemem sterowania: Zaawansowane aplikacje webowe, takie jak internetowe edytory grafiki czy mapy, w których standardowy przepływ sekwencyjny uniemożliwiłby wygodną pracę, mogą korzystać z alternatywnych, zorientowanych na skróty klawiszowe mechanizmów nawigacji, o ile są one odpowiednio udokumentowane.

    Przykłady implementacji

    Najczęstsze błędy

    • F44: Niezgodność wynikająca z bezmyślnego użycia atrybutu tabindex z wartością dodatnią (np. tabindex="1", tabindex="2"). Tworzy to sztywną, sztucznie wymuszoną ścieżkę poruszania się kursora, która drastycznie zaburza naturalny obieg przeglądarki, uniemożliwia intuicyjną obsługę i generuje krytyczne błędy podczas późniejszej rozbudowy kodu.
    • F85: Sytuacja, w której dynamicznie otwierane okna dialogowe (dialogi) lub rozwijane menu nie są umieszczone bezpośrednio obok elementu wyzwalającego w sekwencyjnym porządku nawigacji. Brak natychmiastowego, skryptowego przeniesienia punktu uwagi (fokusu) do wnętrza wywołanego elementu zmusza użytkownika do uciążliwego przeklikania całej pozostałej zawartości strony.
    • Zjawisko zagnieżdżania struktur fokusowalnych: Umieszczanie jednego elementu interaktywnego wewnątrz drugiego, który również posiada właściwość przyjmowania fokusu (np. kod typu <div tabindex="0"><button>...</button></div>). Skutkuje to tym, że pojedyncza kontrolka wydaje się dla użytkownika klawiatury aktywować dwukrotnie, co wprowadza ogromny chaos i dezinformację.
    • Pozostawienie fokusu bez kontroli w elementach dynamicznych: Brak wdrożenia pułapki fokusu sprawia, że po przejściu przez okno modalne kursor zaczyna bezwiednie aktywować niewidoczne elementy ukryte pod nim, wywołując skrajną dezorientację.
    • Rażąca niespójność kodu HTML z layoutem wizualnym: Bezkrytyczne stosowanie właściwości CSS zmieniających położenie elementów na ekranie bez jednoczesnego zadbania o właściwą kolejność tych samych znaczników w dokumencie HTML.

    Najlepsze praktyki

    • Eliminowanie nieaktywnych elementów ze ścieżki tabulacji: Unikaj sytuacji, w których statyczne fragmenty tekstu lub ikony czysto dekoracyjne otrzymują fokus (tabindex="0"), mimo że nie da się na nich wykonać żadnej operacji ani akcji. Sprawia to, że praca z klawiaturą staje się monotonna i wyjątkowo męcząca.
    • Projektowanie w liniowym i czystym układzie: Dąż do maksymalnego upraszczania makiet funkcjonalnych. Im bardziej intuicyjny i zbliżony do struktury liniowej jest projekt graficzny, tym mniejsze ryzyko popełnienia błędu na etapie kodowania struktury HTML.
    • Wdrażanie linków przeskoku ((ang.) skip links): Umieszczaj na samym początku kodu ukryte wizualnie odnośniki (np. „Przejdź do treści głównej”), które stają się widoczne po pierwszym kliknięciu klawisza Tab. Umożliwia to błyskawiczne ominięcie powtarzalnych sekcji menu.

    Metody testowania

    • Testowanie w manualne (Klawiatura): Odłącz całkowicie mysz komputerową. Wykorzystaj wyłącznie klawisz Tab do poruszania się w przód oraz kombinację Shift + Tab do cofania. Przejdź całą ścieżkę krytyczną serwisu, upewniając się, że wskaźnik przemieszcza się płynnie, nie znika i trafia we wszystkie elementy interaktywne w logicznej kolejności.
    • Narzędzie deweloperskie (ang.) Developer Tools: Zbadaj strukturę w drzewie DOM. Upewnij się, czy kolejność tagów HTML odpowiada logice biznesowej. Skorzystaj z funkcji takich jak wizualizacja ścieżki tabulacji dostępnych w panelach dostępności nowoczesnych przeglądarek.
    • NVDA: Uruchom program NVDA i nawiguj po interfejsie za pomocą klawiatury przy wyłączonym monitorze. Przeanalizuj, czy syntezator mowy odczytuje opcje w przewidywalny sposób i czy właściwie komunikuje moment wejścia oraz wyjścia z elementów dynamicznych.

    Sprawdź swoją wiedzę

    W linku poniżej znajduje się 5 przykładów różnych interfejsów. Twoim zadaniem jest sprawdzenie, czy przy nawigowaniu za pomocą klawiatury fokus wędruje w sposób logiczny, przewidywalny i zachowuje prawidłowy sens operacji.

    Jak to sprawdzić?

    1. Użyj klawisza Tab, aby nawigować pomiędzy elementami na stronie.
    2. Sprawdź, czy obramowanie (fokus) przesuwa się po ekranie w logiczny sposób (z góry na dół, z lewej do prawej).
    3. Po wywołaniu nowych elementów (np. po rozwinięciu menu), zweryfikuj czy uwaga (fokus) trafia prosto w nowo otwarty kontekst.
    4. Jeśli nawigacja staje się chaotyczna, skacze losowo lub ucieka na ślepo poza ekran – to błąd WCAG!

    Notatka: Zanim zajrzysz do rozwiązania, przetestuj i zapisz swoje wnioski na kartce.
    Proponowane narzędzia: Klawiatura ( Tab , Enter ), Narzędzie deweloperskie (ang.) Developer Tools

    Link: https://pdc.ambiscale.com/training/wcag-2-4-3/

    #1 BŁĄD

    Problem: Atrybut tabindex ma przypisane wartości dodatnie (1, 2, 3), wbrew układowi na ekranie.
    Dlaczego: Użytkownik przeskakuje najpierw na przycisk „Zaloguj się” (bo ma indeks = 1), potem na pole „Email” (indeks = 2), a na końcu na „Hasło” (indeks = 3). Taki układ jest całkowicie sprzeczny z intuicją i utrudnia użycie formularza (Technika F44 z dokumentacji WCAG).
    Naprawa: Obowiązuje kategoryczny zakaz używania dodatnich wartości atrybutu tabindex. Usuń te atrybuty, aby przywrócić przeglądarce pełną i naturalną kontrolę nad strukturą kodu.


    #2 DOBRZE

    Dlaczego: Elementy ułożone są naturalnie w strukturze HTML i nie posiadają żadnej sztucznej ingerencji z zewnątrz. Tabulacja przebiega precyzyjnie i intuicyjnie: od góry do dołu.


    #3 BŁĄD

    Problem: Rażąca niespójność kodu HTML z ułożeniem wizualnym. Reguła CSS w postaci flex-direction: column-reverse; odwraca wyświetlanie na ekranie.
    Dlaczego: Użytkownik widzi najpierw „Krok 1” na górze, a „Krok 3” na dole. Niestety przeglądarka odczytuje fizyczny kod DOM, dlatego po kliknięciu Tab kursor idzie od dołu („Krok 3”) w stronę góry („Krok 1”). Rozbieżność między wzrokiem a działaniem klawiatury jest potężna.
    Naprawa: Projektuj interfejsy tak, aby porządek dokumentu zbiegał się w pełni z logiką wizualną. Unikaj właściwości w CSS, które tylko powierzchownie przemeblowują układ elementów, lub zamień tagi HTML na prawidłowe miejsca.


    #4 BŁĄD

    Problem: Wyzwolenie okna modalnego bez przeniesienia punktu uwagi oraz zaniechanie jego izolacji (brak focus trapu). Złamane zostały wytyczne techniki F85 oraz zarządzania fokusem.
    Dlaczego: Po otwarciu komunikatu, uwaga klawiatury pozostaje na przycisku. Gdy użytkownik chce z niej skorzystać i wciska klawisz Tab, nie znajduje się on w oknie komunikatu. Co gorsza, brak pułapki na fokus sprawia, że zaczyna on bezwiednie poruszać się po niewidocznych pod nakładką elementach (np. „Przykład 5”), wykonując operacje w ciemno.
    Naprawa: Po otwarciu nakładki przenieś fokus do jej wnętrza metodą element.focus(), zablokuj ucieczkę Tabem na boki (zbuduj focus trap) i zaprogramuj przycisk Esc oraz zamykający do zwrócenia kursora z powrotem na obiekt wyzwalający.


    #5 DOBRZE

    Dlaczego: Programista wzorowo zapanował nad otwarciem dynamicznej warstwy oraz ucieczką z niej. Kiedy rozwijamy listę „Wybierz akcję”, wbudowany skrypt wyłapuje to zdarzenie i natychmiast przenosi uwagę użytkownika (focus()) na pierwszy element potomny „Edytuj profil”. Co równie istotne, menu inteligentnie pilnuje swojego stanu – zamknięcie następuje nie tylko za pomocą klawisza ESC lub po kliknięciu na zewnątrz, ale ukrywa menu nawet wtedy, gdy użytkownik przekroczy opcje tabulatorem (obsługa zdarzenia focusout). Praca z systemem jest zachowana w prawidłowej sekwencji i unika dezinformacji.

    Źródła

    Wróć do wszystkich kryteriów