Modyfikowanie kolejności DOM za pomocą parametru Tabindex

Dave Gash
Dave Gash
Meggin Kearney
Meggin Kearney
Alexandra Klepper
Alexandra Klepper

Domyślna kolejność kart związana z położeniem DOM semantycznych elementów HTML jest wygodna, ale czasami trzeba ją zmienić. Przenoszenie elementów w kodzie HTML jest idealne, ale może nie być możliwe. W takich przypadkach możesz użyć atrybutu HTML tabindex, aby wyraźnie ustawić pozycję karty elementu.

Obsługa przeglądarek

  • 1
  • 12
  • 1.5
  • ≤4

Źródło

tabindex można zastosować do dowolnego elementu, ale niekoniecznie w każdym z nich. Przyjmuje zakres wartości całkowitych. Za pomocą tabindex możesz określić wyraźną kolejność elementów strony, które można zaznaczyć, wstawić w kolejności kart element, którego nie można zaznaczyć, i usunąć elementy z tej kolejności. Na przykład:

tabindex="0": wstawia element w naturalnej kolejności tabulacji. Aby zaznaczyć element, naciśnij Tab. Można go zaznaczyć, wywołując jego metodę focus().

tabindex="-1": usuwa element z naturalnej kolejności kart, ale nadal można go zaznaczyć, wywołując jego metodę focus()

tabindex="5": każdy element tabindex większy niż 0 przenosi element na początek zwykłej kolejności tabulacji. Jeśli istnieje wiele elementów, których indeks tabulacji jest większy niż 0, kolejność kart zaczyna się od najniższej wartości większej niż 0 i przesuwa się w górę. Używanie indeksu tabindex większego niż 0 jest uznawane za antywzorce.

Dotyczy to zwłaszcza elementów, które nie są danymi do wprowadzania danych, takich jak nagłówki, obrazy czy tytuły artykułów. Jeśli to możliwe, najlepiej uporządkować kod źródłowy w taki sposób, aby sekwencja DOM zapewniała logiczną kolejność tabulatorów. Jeśli używasz elementu tabindex, ogranicz go do niestandardowych interaktywnych elementów sterujących, takich jak przyciski, karty, menu i pola tekstowe, czyli elementy, do których użytkownik może oczekiwać danych wejściowych.

Dodaj element tabindex tylko do interaktywnych treści. Nawet jeśli treść jest ważna, na przykład najważniejszy obraz, użytkownicy czytników ekranu mogą ją zrozumieć bez zaznaczania tekstu.

Zarządzanie zaznaczeniem na poziomie strony

Czasami do zapewnienia wygody użytkownikom wymagana jest właściwość tabindex. Na przykład gdy tworzysz rozbudowaną pojedynczą stronę z różnymi sekcjami treści, gdy nie wszystkie treści są widoczne jednocześnie. Może to oznaczać, że linki nawigacyjne zmieniają widoczną treść bez odświeżania strony.

W tym przypadku wskaż wybrany obszar treści, nadaj mu wartość tabindex o wartości -1 oraz wywołaj jego metodę focus. Dzięki temu treści nie będą wyświetlać się w naturalnej kolejności elementów tabulacji. Ta technika, zwana zarządzaniem skupieniem, pozwala synchronizować postrzegany przez użytkownika kontekst z treściami wizualnymi w witrynie.

Zarządzanie fokusem w komponentach

W niektórych przypadkach trzeba też kontrolować ostrość na poziomie sterowania, np. za pomocą komponentów niestandardowych.

Na przykład element select może zostać wyróżniony w sposób podstawowy, ale gdy już go znajdzie, możesz użyć klawiszy strzałek, aby wyświetlić dodatkowe opcje do wyboru. Jeśli utworzysz niestandardowy element select, musisz odtworzyć jego działanie, aby użytkownicy klawiatury mogli w dalszym ciągu korzystać z elementu sterującego.

Ustalenie, jakie zachowania klawiatury należy wdrożyć, może być trudne. Przewodnik po metodach tworzenia aplikacji z dostępem do Rich Internetu (ARIA) zawiera listę typów komponentów i obsługiwanych przez nie działań klawiatury.

Może pracujesz nad elementami niestandardowymi, które przypominają zestaw przycisków, ale różnią się wyglądem i działaniem.

<radio-group>
    <radio-button>Water</radio-button>
    <radio-button>Coffee</radio-button>
    <radio-button>Tea</radio-button>
    <radio-button>Cola</radio-button>
    <radio-button>Ginger Ale</radio-button>
</radio-group>

Aby dowiedzieć się, jakiej obsługi klawiatury potrzebują, przeczytaj przewodnik po metodach tworzenia ARIA. Sekcja 2 zawiera listę wzorców projektowych, w tym tabelę cech dla grup radiowych, czyli istniejący komponent, który najlepiej pasuje do nowego elementu.

Jedną z typowych funkcji klawiatury są klawisze strzałek w górę, w dół, w lewo i w prawo. Aby dodać takie zachowanie do nowego komponentu, stosujemy metodę przewijania tabindex.

Przepływowy tag Tabindex działa przez ustawienie zasady tabindex na -1 w przypadku wszystkich elementów podrzędnych z wyjątkiem aktywnego obecnie elementu.

<radio-group>
  <radio-button tabindex="0">Water</radio-button>
  <radio-button tabindex="-1">Coffee</radio-button>
  <radio-button tabindex="-1">Tea</radio-button>
  <radio-button tabindex="-1">Cola</radio-button>
  <radio-button tabindex="-1">Ginger Ale</radio-button>
</radio-group>

Komponent używa detektora zdarzeń klawiatury, aby określić, który klawisz naciśnie użytkownik. Gdy tak się dzieje, ustawia on wartość tabindex wcześniej wybranego elementu na -1, ustawia tabindex elementu tabindex na potrzeby skupienia na 0 i wywołuje metodę fokusu.

<radio-group>
    <!-- Assuming the user pressed the down arrow, we'll focus the next available child -->
    <radio-button tabindex="-1">Water</radio-button>
    <radio-button tabindex="0">Coffee</radio-button> // call .focus() on this element
    <radio-button tabindex="-1">Tea</radio-button>
    <radio-button tabindex="-1">Cola</radio-button>
    <radio-button tabindex="-1">Ginger Ale</radio-button>
</radio-group>

Gdy użytkownik dotrze do ostatniego (lub po raz pierwszy, w zależności od kierunku, w którym się porusza) dziecka, pętla powrót do pierwszego (lub ostatniego) elementu podrzędnego.

Skorzystaj z poniższego przykładu. Sprawdź element w Narzędziach deweloperskich, by zobaczyć, jak zmienia się indeks tabindex z jednej opcji do drugiej.

Moduły i pułapki na klawiaturę

Lepiej unikać ręcznego zarządzania ostrością, ponieważ może to prowadzić do skomplikowanych sytuacji. Może to być na przykład widżet autouzupełniania, który próbuje zarządzać zaznaczeniem i rejestruje zachowanie karty, ale uniemożliwia użytkownikowi zamknięcie okna, dopóki proces się nie zakończy. Jest to tak zwane pułapka na klawiaturze i może być bardzo frustrująca dla użytkownika.

Zgodnie z artykułem 2.1.2 ustawy WCAG zaznaczenie klawiatury nie powinno być zablokowane ani ograniczone do konkretnego elementu strony. Użytkownik powinien mieć możliwość przechodzenia do wszystkich elementów strony i z niego za pomocą samej klawiatury.

Wyjątkiem od tej reguły są pola modalne. Podczas tworzenia pliku modalnego należy jednak unikać używania właściwości tabindex. inert pozwala zapobiegać przypadkowemu wchodzeniu w interakcję z elementem (celową pułapką klawiatury). Użyj elementu <dialog>, który jest domyślnie bezczynny, do utworzenia interfejsu modalnego dla użytkowników, a jednocześnie do blokowania kliknięć i kart poza tym oknem. Dzięki temu użytkownik będzie mógł skupić się na wymaganym polu wyboru.