Навигация с клавиатуры и порядок фокуса
Обеспечьте доступность всех функций и логичный порядок их вызова с клавиатуры
«Навигация с клавиатуры и порядок фокуса» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Кому нужна навигация с клавиатуры?
Многие пользователи полагаются на навигацию с клавиатуры:
- Двигательные нарушения — невозможно пользоваться мышью
- Опытные пользователи — предпочитают сочетания клавиш
- Пользователи программ чтения с экрана — полностью управляют с клавиатуры
- Пользователи переключателей — используют кнопки, имитирующие нажатия клавиш
Элементы, автоматически доступные для фокуса
Следующие HTML-элементы по умолчанию доступны для фокусировки с клавиатуры:
<a href>— Tab переводит фокус на элемент, Enter активирует его<button>— Tab переводит фокус на элемент, Enter или Space активирует его<input>,<textarea>,<select>— Tab переводит фокус на эти элементы<details>/<summary>— Tab + Enter
Порядок перехода по Tab
Браузер определяет порядок перехода по Tab следующим образом:
- По умолчанию — в порядке DOM: фокус перемещается между элементами в порядке их появления в HTML
- Положительные значения tabindex — фокус сначала перемещается на эти элементы в порядке возрастания значений
tabindex="0"— элемент добавляется в естественный порядок перехода на своей позиции в DOMtabindex="-1"— элемент не входит в порядок перехода; сфокусировать его можно только с помощью скрипта
Естественный порядок Tab = порядок DOM
Порядок чтения HTML должен соответствовать визуальной структуре:
<!-- GOOD: DOM order matches visual left-to-right, top-to-bottom: -->
<header>...</header>
<nav>...</nav>
<main>...</main>
<aside>...</aside>
<footer>...</footer>
<!-- BAD: visually reordered with CSS, DOM order broken:
CSS flexbox order: doesn't affect tab order!
Screen readers and keyboard users follow DOM order, not CSS order -->Видимый индикатор фокуса
WCAG 2.4.7 (уровень AA): фокус клавиатуры должен быть видимым:
/* NEVER do this: */
* { outline: none; } /* removes all focus outlines */
/* GOOD: styled focus indicator: */
:focus-visible {
outline: 2px solid #0070f3;
outline-offset: 3px;
border-radius: 4px;
}
/* :focus-visible shows outline for keyboard only
mouse clicks don't trigger :focus-visible -->
/* But outline: none with :focus (not :focus-visible) hides for both */Пользовательские стили фокуса
Стили фокуса в дизайн-системе:
/* Replace outline with box-shadow for rounded elements: */
button:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgba(0, 112, 243, 0.4);
}
/* Always ensure 3:1 contrast ratio between
focus indicator and background (WCAG 2.4.11 Level AA) */Логичный порядок фокуса
Порядок фокуса должен быть логичным и предсказуемым — WCAG 2.4.3 (уровень A):
<!-- BAD: focus order jumps around the page -->
<!-- First: footer link (tabindex=5) -->
<!-- Then: sidebar (tabindex=3) -->
<!-- Then: header nav (tabindex=1) -->
<!-- GOOD: natural DOM order matches reading flow: -->
<!-- Header → Nav → Main Content → Sidebar → Footer -->Ссылки для пропуска
Ссылки для пропуска позволяют пользователям клавиатуры обходить повторяющуюся навигацию:
<a href="#main-content" class="skip-link">Skip to main content</a>
<!-- Visually hidden until focused: -->
.skip-link {
position: absolute;
top: -100%;
left: 0;
background: #0070f3;
color: white;
padding: 0.75rem;
z-index: 9999;
}
.skip-link:focus {
top: 0; /* visible when focused -->
}Ловушка фокуса в модальном окне
Модальные окна должны удерживать фокус, пока они открыты:
<!-- When modal opens:
1. Move focus to modal container or first interactive element
2. Tab stays within modal
3. When modal closes, return focus to the trigger button
-->
const modal = document.getElementById('modal');
const trigger = document.getElementById('open-modal');
function openModal() {
modal.removeAttribute('hidden');
modal.querySelector('button, [tabindex="0"]').focus();
}
function closeModal() {
modal.setAttribute('hidden', '');
trigger.focus();
}Сочетания клавиш
Реализуйте сочетания клавиш с помощью обработчиков событий:
document.addEventListener('keydown', (e) => {
// Close modal on Escape:
if (e.key === 'Escape') closeModal();
// Navigate tabs with arrow keys:
if (e.key === 'ArrowRight') focusNextTab();
if (e.key === 'ArrowLeft') focusPrevTab();
// Submit form on Enter (default behavior in inputs):
// Nothing needed — browser handles this
});Проверка навигации с клавиатуры
Как проверить доступность с клавиатуры:
- Уберите мышь и пользуйтесь только клавиатурой
- Нажмите Tab — можете ли Вы добраться до каждого интерактивного элемента?
- Всегда ли виден индикатор фокуса?
- Логичен ли порядок перехода по Tab?
- Можете ли Вы пользоваться всеми функциями (формами, модальными окнами, раскрывающимися списками) без мыши?
- Нажмите Shift+Tab, чтобы перемещаться назад
Быстрая проверка
Какое свойство CSS нельзя удалять у всех элементов, если Вы обеспечиваете доступность с клавиатуры?
Итоги: навигация с клавиатуры
Основные правила доступности с клавиатуры:
- До всех интерактивных элементов должен быть доступ с помощью Tab
- Порядок DOM = порядок перехода по Tab — он должен соответствовать визуальной структуре
- Никогда не удаляйте контуры фокуса — используйте
:focus-visibleдля пользовательских стилей - Ссылки для пропуска позволяют обходить повторяющуюся навигацию
- Устанавливайте ловушку фокуса в модальных окнах и возвращайте фокус после закрытия
- Проверяйте сайт, пользуясь только клавиатурой
Изучай HTML с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 40
- Уроки
- 159
Часто задаваемые вопросы
Урок «Навигация с клавиатуры и порядок фокуса» бесплатный?
Да — полный текст урока «Навигация с клавиатуры и порядок фокуса» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «Навигация с клавиатуры и порядок фокуса»?
Обеспечьте доступность всех функций и логичный порядок их вызова с клавиатуры Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Навигация с клавиатуры и порядок фокуса»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужна доступность: уровни WCAG
- Иерархия заголовков для экранных дикторов
- Альтернативный текст изображений: когда и как
- Навигация с клавиатуры и порядок фокуса