HTML Academy · Lekcja

aria-selected i wzorce kart

Implementowanie interfejsów kart dostępnych z klawiatury

Lekcja 2 z 413 kroki

aria-selected i wzorce kart to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Omówienie wzorca kart

Interfejs kart składa się z trzech komponentów ARIA:

  • role="tablist" — kontener wszystkich kart
  • role="tab" — pojedynczy przycisk karty
  • role="tabpanel" — panel zawartości danej karty

Struktura kart ARIA

Kompletny dostępny kod kart:

<div role="tablist" aria-label="Account Settings">
  <button role="tab" id="tab-1" aria-selected="true"
          aria-controls="panel-1">Profile</button>
  <button role="tab" id="tab-2" aria-selected="false"
          aria-controls="panel-2" tabindex="-1">Security</button>
  <button role="tab" id="tab-3" aria-selected="false"
          aria-controls="panel-3" tabindex="-1">Notifications</button>
</div>

<div id="panel-1" role="tabpanel" aria-labelledby="tab-1">
  Profile content...
</div>
<div id="panel-2" role="tabpanel" aria-labelledby="tab-2" hidden>
  Security content...
</div>

aria-selected

aria-selected wskazuje aktualnie aktywny element w kontekście wyboru:

<!-- In a tablist: -->
<button role="tab" aria-selected="true">Active Tab</button>
<button role="tab" aria-selected="false">Other Tab</button>

<!-- In a listbox: -->
<ul role="listbox">
  <li role="option" aria-selected="false">Option 1</li>
  <li role="option" aria-selected="true">Option 2</li>
</ul>

Wzorzec obsługi kart z klawiatury

Wzorce ARIA definiują określone zachowanie klawiatury dla kart:

  • Tab — przenosi fokus na wybraną kartę w tabliście
  • Klawisze strzałek — przechodzenie między kartami
  • Ponowne naciśnięcie Tab — przenosi fokus poza tablistę, do aktywnego panelu
  • Home — przejście do pierwszej karty
  • End — przejście do ostatniej karty

Implementacja obsługi kart z klawiatury

Nawigacja po kartach za pomocą klawiszy strzałek:

const tabs = document.querySelectorAll('[role="tab"]');

tabs.forEach((tab, i) => {
  tab.addEventListener('keydown', (e) => {
    let target;
    if (e.key === 'ArrowRight') target = tabs[(i + 1) % tabs.length];
    if (e.key === 'ArrowLeft') target = tabs[(i - 1 + tabs.length) % tabs.length];
    if (e.key === 'Home') target = tabs[0];
    if (e.key === 'End') target = tabs[tabs.length - 1];

    if (target) {
      activateTab(target);
      target.focus();
    }
  });
});

Funkcja activateTab

Funkcja przełączająca karty i aktualizująca ARIA:

function activateTab(selectedTab) {
  // Deactivate all tabs:
  document.querySelectorAll('[role="tab"]').forEach(tab => {
    tab.setAttribute('aria-selected', 'false');
    tab.setAttribute('tabindex', '-1');
    document.getElementById(tab.getAttribute('aria-controls')).hidden = true;
  });

  // Activate selected tab:
  selectedTab.setAttribute('aria-selected', 'true');
  selectedTab.setAttribute('tabindex', '0');
  document.getElementById(selectedTab.getAttribute('aria-controls')).hidden = false;
}

Wzorzec roving tabindex

Grupy kart używają roving tabindex, aby tylko jedna karta znajdowała się w kolejności tabulacji:

<!-- Only the selected tab has tabindex=0 -->
<button role="tab" aria-selected="true" tabindex="0">Active</button>
<button role="tab" aria-selected="false" tabindex="-1">Other</button>
<button role="tab" aria-selected="false" tabindex="-1">Another</button>

<!-- When user arrows to a new tab:
     1. Set new tab tabindex=0
     2. Set old tab tabindex=-1
     3. Focus new tab -->

aria-selected a aria-checked

aria-selected a aria-checked — różne konteksty:

  • aria-selected — używane w widgetach wyboru: kartach, opcjach listbox oraz elementach drzewa
  • aria-checked — używane w elementach, które można zaznaczyć: polach wyboru i elementach menu z oznaczeniem wyboru

Fokus panelu kart

Po aktywowaniu karty panel staje się widoczny, ale fokus pozostaje na karcie:

// Users can then Tab to move into the panel content
// The panel should not automatically receive focus

// Exception: if the panel is very long, consider moving focus
// to the panel heading for long-form content tabs

// Panel should have tabindex=-1 for programmatic focus:
<div id="panel-1" role="tabpanel" aria-labelledby="tab-1" tabindex="-1">

Aktywowanie automatyczne a ręczne

Dwa modele aktywowania kart:

  • Automatyczne — karty są aktywowane, gdy użytkownik przechodzi między nimi za pomocą klawiszy strzałek (prostsza obsługa)
  • Ręczne — po przejściu za pomocą klawiszy strzałek użytkownik musi nacisnąć Enter/Spację, aby aktywować kartę (lepsze rozwiązanie, gdy zawartość karty wymaga ładowania)

Stylowanie dostępnych kart

CSS dla stanu wybranej dostępnej karty:

[role="tab"] {
  border-bottom: 3px solid transparent;
  padding: 0.75rem 1rem;
  cursor: pointer;
}

[role="tab"][aria-selected="true"] {
  border-bottom-color: #0070f3;
  font-weight: bold;
}

/* :focus-visible for keyboard users: */
[role="tab"]:focus-visible {
  outline: 2px solid #0070f3;
  outline-offset: -2px;
}

Szybkie sprawdzenie

Jak powinna działać nawigacja za pomocą klawiatury wewnątrz tablisty?

Podsumowanie: aria-selected i karty

Najważniejsze informacje o wzorcu kart:

  • tablist → tab (aria-selected) → tabpanel (aria-labelledby)
  • Klawisze strzałek służą do przechodzenia między kartami, a klawisz Tab do wejścia do panelu
  • Roving tabindex: tylko aktywna karta ma tabindex=0
  • Aktywna karta ma aria-selected="true"
  • Nieaktywne panele używają atrybutu hidden
Bezpłatny start

Ucz się HTML dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
40
Lekcje
159

Często zadawane pytania

Czy lekcja „aria-selected i wzorce kart” jest bezpłatna?

Tak — pełny tekst „aria-selected i wzorce kart” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „aria-selected i wzorce kart”?

Implementowanie interfejsów kart dostępnych z klawiatury Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „aria-selected i wzorce kart”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. aria-expanded i aria-controls dla przełączników
  2. aria-selected i wzorce kart
  3. Live regions — aria-live, aria-atomic i aria-relevant
  4. Testowanie za pomocą czytników ekranu
← Powrót do HTML Academy