HTML Academy · Урок

Навигация с клавиатуры и порядок фокуса

Обеспечьте доступность всех функций и логичный порядок их вызова с клавиатуры

Урок 4 из 413 шагов

«Навигация с клавиатуры и порядок фокуса» — бесплатный урок 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" — элемент добавляется в естественный порядок перехода на своей позиции в DOM
  • tabindex="-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
});

Проверка навигации с клавиатуры

Как проверить доступность с клавиатуры:

  1. Уберите мышь и пользуйтесь только клавиатурой
  2. Нажмите Tab — можете ли Вы добраться до каждого интерактивного элемента?
  3. Всегда ли виден индикатор фокуса?
  4. Логичен ли порядок перехода по Tab?
  5. Можете ли Вы пользоваться всеми функциями (формами, модальными окнами, раскрывающимися списками) без мыши?
  6. Нажмите 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 — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужна доступность: уровни WCAG
  2. Иерархия заголовков для экранных дикторов
  3. Альтернативный текст изображений: когда и как
  4. Навигация с клавиатуры и порядок фокуса
← Назад к HTML Academy