tabindex i accesskey
Kontrolować kolejność nawigacji klawiaturą i skróty klawiaturowe.
tabindex i accesskey to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 3 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.
Nawigacja za pomocą klawiatury
Użytkownicy, którzy nie korzystają z myszy, polegają na klawiszu Tab podczas nawigowania po elementach interaktywnych:
- Elementy, które naturalnie mogą otrzymać fokus:
<a href>,<button>,<input>,<select>,<textarea> - Elementy nieinteraktywne (
<div>,<span>) nie należą do kolejności tabulatora - Atrybut
tabindexokreśla, czy i w którym miejscu element pojawia się w kolejności tabulatora
tabindex="0"
tabindex="0" dodaje nieinteraktywny element do naturalnej kolejności tabulatora:
<div tabindex="0" role="button" onclick="handleClick()">
Custom Button
</div>
<!-- Now Tab navigates to this div -->
<!-- It receives focus at the natural position in the DOM -->
<!-- Better: use a real button instead! -->
<button onclick="handleClick()">Real Button</button>tabindex="-1"
tabindex="-1" umożliwia programowe ustawienie fokusu na elemencie, ale usuwa go z kolejności tabulatora:
<div id="modal" tabindex="-1" role="dialog">
<!-- modal content -->
</div>
<script>
// Open modal and send focus to it:
document.getElementById('modal').focus();
// Modal is now focused but not in the normal tab sequence
</script>Dodatnie wartości tabindex — unikaj ich
Dodatnie wartości tabindex (np. tabindex="3") ustawiają niestandardową kolejność tabulatora — należy ich unikać:
<!-- BAD: positive tabindex creates unpredictable order -->
<input tabindex="3">
<input tabindex="1">
<input tabindex="2">
<!-- The tab order becomes: 1, 2, 3, then all tabindex=0 elements -->
<!-- This almost always confuses users and fails WCAG 2.4.3 -->
<!-- Fix the DOM order instead of using positive tabindex -->Zarządzanie fokusem w SPA
Aplikacje jednostronicowe muszą ręcznie zarządzać fokusem:
// When navigating to a new route:
document.querySelector('#main-content').focus();
// When opening a modal:
const modal = document.getElementById('modal');
modal.removeAttribute('hidden');
modal.querySelector('[autofocus], button, [tabindex]').focus();
// When closing a modal: return focus to the trigger
document.getElementById('open-btn').focus();Pułapka fokusu w oknach modalnych
Utwórz pułapkę fokusu wewnątrz otwartego okna modalnego, aby klawisz Tab pozostawał w jego obrębie:
function trapFocus(element) {
const focusable = element.querySelectorAll(
'a, button, input, textarea, select, [tabindex]:not([tabindex="-1"])'
);
const first = focusable[0];
const last = focusable[focusable.length - 1];
element.addEventListener('keydown', e => {
if (e.key === 'Tab') {
if (e.shiftKey && document.activeElement === first) {
e.preventDefault(); last.focus();
} else if (!e.shiftKey && document.activeElement === last) {
e.preventDefault(); first.focus();
}
}
});
}Atrybut accesskey
Atrybut accesskey przypisuje elementowi skrót klawiaturowy:
<button accesskey="s">Submit</button>
<!-- On Windows: Alt+S focuses/activates the button -->
<!-- On Mac: Control+Option+S -->
<!-- On Firefox: Shift+Alt+S -->
<a href="/" accesskey="h">Home</a>Ograniczenia accesskey
Atrybut accesskey ma istotne wady:
- Klawisze aktywujące różnią się w zależności od przeglądarki i systemu operacyjnego
- Wchodzą w konflikt ze skrótami przeglądarki (np. Alt+F = menu Plik)
- Domyślnie nie są ogłaszane przez czytniki ekranu
- W praktyce są rzadko używane — jeśli z nich korzystasz, udokumentuj je
Widoczne wskaźniki fokusu
Nigdy nie ukrywaj obrysów fokusu — są niezbędne dla użytkowników klawiatury:
/* BAD: removes focus outline for everyone */
* { outline: none; }
/* Better: style focus outlines, don't remove them */
:focus-visible {
outline: 2px solid #0070f3;
outline-offset: 2px;
border-radius: 3px;
}
/* :focus-visible only shows outline for keyboard navigation -->
/* Mouse clicks do not trigger :focus-visible in modern browsers */Wzorzec odnośnika pomijania
Odnośnik pomijania pozwala użytkownikom klawiatury przejść poza powtarzalną nawigację:
<a href="#main-content" class="skip-link">Skip to main content</a>
<nav>... long navigation ...</nav>
<main id="main-content" tabindex="-1">... content ...</main>
<!-- CSS: -->
<!--
.skip-link {
position: absolute;
top: -100%;
}
.skip-link:focus {
top: 0;
}
-->Atrybut autofocus
Atrybut autofocus przenosi fokus na element podczas wczytywania strony:
<input type="search" autofocus placeholder="Search...">
<!-- Useful on search pages or forms with a single primary field -->
<!-- Use sparingly: it can disrupt users who rely on the page top for orientation -->
<!-- Only one element per page should have autofocus -->Szybkie sprawdzenie
Jaka wartość tabindex umożliwia ustawienie fokusu na elemencie za pomocą JavaScript, ale pomija go podczas zwykłej nawigacji klawiszem Tab?
Podsumowanie: tabindex i accesskey
Najważniejsze informacje o dostępności klawiaturowej:
tabindex="0"— dodaje element do naturalnej kolejności tabulatoratabindex="-1"— umożliwia programowe ustawienie fokusu, ale element nie znajduje się w kolejności tabulatora- Unikaj dodatnich wartości tabindex
- Nigdy nie usuwaj obrysów
:focus-visible - Implementuj odnośniki pomijania dla użytkowników klawiatury
accesskeyjest dostępny, ale z powodu konfliktów rzadko bywa praktyczny
Często zadawane pytania
Czy lekcja „tabindex i accesskey” jest bezpłatna?
Tak — pełny tekst „tabindex i accesskey” 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 „tabindex i accesskey”?
Kontrolować kolejność nawigacji klawiaturą i skróty klawiaturowe. Ć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 3 z 4.
Ile czasu zajmuje lekcja „tabindex i accesskey”?
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
- id, class, style i title
- Atrybut hidden
- tabindex i accesskey
- Własne atrybuty danych data-*