edubun
Русский

Работа со страницей с клавиатуры

Отключи мышь и нажимай Tab: каждая ссылка, кнопка и поле должны по очереди подсвечиваться в том порядке, в каком ты читаешь страницу.

Кто пользуется клавиатурой

Многие люди вообще не берут в руки мышь. Одни не могут твёрдо её держать; другие пользуются кнопкой-переключателем, ротовой палочкой или распознаванием речи, которое посылает нажатия клавиш; пользователи экранного диктора тоже в основном перемещаются клавиатурой. Критерий успешного применения 2.1.1 «Клавиатура» уровня A в WCAG 2.2 говорит, что всё на странице должно работать с клавиатуры. Критерий 2.1.2 «Отсутствие „клавиатурных ловушек“» добавляет: если фокус может попасть в какую-то часть страницы, он должен суметь выйти оттуда с клавиатуры.

Обычные клавиши. Tab переходит вперёд, Shift+Tab назад, Enter открывает ссылку или нажимает кнопку, Space нажимает кнопку или ставит флажок, стрелки перемещают внутри групп переключателей и меню.

Используй элементы, которые уже работают

Ссылки с href, button, input, select и textarea получают фокус сразу и реагируют на нужные клавиши. div с обработчиком щелчка так не умеет: до него не дойти клавишей Tab, Enter ничего не делает, а экранный диктор не объявляет его кнопкой. Совет MDN прост. Не используй tabindex, чтобы div вёл себя как кнопка; используй элемент button, у которого роль и поведение клавиатуры уже встроены.

Порядок фокуса и tabindex

Порядок Tab следует порядку элементов в исходном коде HTML. Критерий 2.4.3 «Перемещение указателя» (порядок фокуса) требует, чтобы этот порядок сохранял смысл и удобство страницы, поэтому самый простой способ исправить странный порядок состоит в том, чтобы переставить HTML. MDN перечисляет три вида значений tabindex. Ноль ставит элемент в обычный порядок. Отрицательное значение, обычно -1, убирает его из порядка Tab, но позволяет скрипту вызвать для него focus(), что полезно для диалога или сообщения об ошибке. Положительное значение ставит элемент впереди всех остальных, и MDN советует использовать только 0 и -1, потому что положительные значения делают порядок трудным для понимания.

Видно, где ты находишься

Пользователям клавиатуры нужно видеть, у какого элемента фокус. Критерий 2.4.7 «Видимый указатель» уровня AA требует видимого индикатора фокуса, поэтому правило таблицы стилей вроде outline: none без замены считается нарушением. В WCAG 2.2 добавлены два связанных критерия. 2.4.11 «Фокус не перекрыт (минимальные требования)» уровня AA говорит, что элемент с фокусом не должен быть полностью спрятан за тем, что добавил автор, например за закреплённым подвалом или баннером о cookie. 2.5.8 «Размер области для наведения указателя (минимальные требования)», тоже AA, требует, чтобы то, по чему щёлкают или нажимают пальцем, было не меньше 24 на 24 CSS-пикселя или имело достаточно места вокруг.

Очень помогает ещё один приём: ссылка для пропуска. На сайте с длинным меню пользователю клавиатуры приходится на каждой странице проходить клавишей Tab все пункты меню. Ссылка, поставленная первой на странице и ведущая к основному содержимому, позволяет перескочить меню одним нажатием. Её можно визуально скрыть, пока она не получит фокус.

Проверка занимает две минуты. Щёлкни в адресной строке и нажимай Tab, проходя всю страницу. Убедись, что до каждого элемента управления можно дойти, что порядок совпадает с порядком чтения, что всегда видно, где фокус, и что Enter и Space делают то же, что щелчок мыши. Потом нажимай Shift+Tab, чтобы вернуться. Любой элемент, до которого не дойти, или любое место, где фокус пропадает, является ошибкой.

WCAG 2.1.1Клавиатура (A): всё работает с клавиатуры
WCAG 2.1.2Отсутствие «клавиатурных ловушек» (A)
WCAG 2.4.7Видимый указатель (AA)
WCAG 2.4.11Фокус не перекрыт (минимальные требования), AA, новый в 2.2
WCAG 2.5.8Размер области для наведения указателя (минимальные требования): 24 на 24 CSS px, AA
tabindex="-1"Вне порядка Tab, фокус можно дать скриптом
Главное
  • Всё должно работать с клавиатуры, без ловушек (2.1.1, 2.1.2).
  • Используй button и a href вместо кликабельных div.
  • Порядок Tab следует HTML; используй только tabindex 0 и -1.
  • Фокус должен быть виден и не перекрыт; цели не меньше 24 на 24 CSS px.
  1. Какая клавиша переводит фокус на следующий элемент?
  2. У div есть обработчик onclick. Что не так?
    • До него нельзя дойти и нажать его с клавиатуры
    • Он слишком медленный
    • Его нельзя оформить
    • Ничего
  3. Что делает tabindex="0"?
    • Добавляет элемент в обычный порядок Tab
    • Ставит его первым в порядке Tab
    • Убирает его из порядка Tab
    • Отключает его
  4. Какие значения tabindex советует MDN?
    • Только 0 и -1
    • Любое положительное число
    • От 1 до 10
    • Никакие и никогда
  5. Таблица стилей задаёт outline: none каждому элементу в фокусе. Какой критерий нарушен?
    • 2.4.7 Видимый указатель
    • 1.1.1 Нетекстовый контент
    • 1.4.3 Контрастность (минимальные требования)
    • 3.3.2 Метки или инструкции
  6. Какой минимальный размер цели в CSS-пикселях на сторону требует 2.5.8?
  7. Закреплённый баннер о cookie полностью закрывает кнопку в фокусе. Какой это критерий WCAG 2.2?
    • 2.4.11 Фокус не перекрыт (минимальные требования)
    • 2.4.3 Перемещение указателя
    • 2.1.2 Отсутствие «клавиатурных ловушек»
    • 1.4.11 Контрастность нетекстовой информации
  8. Что делает ссылка для пропуска?
    • Перескакивает повторяющиеся меню к основному содержимому
    • Пропускает следующую страницу
    • Скрывает изображения
    • Выключает клавиатуру
  9. Какая клавиша ставит флажок в фокусе?
    • Space
    • Tab
    • Escape
    • Shift
  10. Фокус попадает в виджет, и Tab не может из него выйти. Какой критерий нарушен?
    • 2.1.2 Отсутствие «клавиатурных ловушек»
    • 2.4.6 Заголовки и метки
    • 1.4.1 Использование цвета
    • 2.5.8 Размер области для наведения указателя (минимальные требования)
Источники курса (9)
  • W3C, Web Content Accessibility Guidelines (WCAG) 2.2, W3C Recommendation first published 5 October 2023, current edition 12 December 2024 (w3.org/TR/WCAG22/, checked 2026-10-17, rechecked 2026-10-18)
  • W3C WAI, What's new in WCAG 2.2 (w3.org/WAI/standards-guidelines/wcag/new-in-22/, checked 2026-10-17)
  • W3C WAI, Images tutorial and alt decision tree (w3.org/WAI/tutorials/images/decision-tree/, checked 2026-10-17)
  • W3C, Using ARIA (w3.org/TR/using-aria/, Discontinued Draft 24 February 2026, rules 1 to 4, checked 2026-10-17)
  • W3C WAI-ARIA Authoring Practices Guide, Read Me First, "No ARIA is better than bad ARIA" (w3.org/WAI/ARIA/apg/practices/read-me-first/, checked 2026-10-17)
  • MDN Web Docs, tabindex (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/tabindex, checked 2026-10-17)
  • MDN, Heading elements, accessibility notes (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements, checked 2026-10-17)
  • MDN, autocomplete attribute (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete, checked 2026-10-17)
  • Every code exercise was checked with a Playwright probe against a reference solution.

Проверено: 2026-10-17