Работа со страницей с клавиатуры
Отключи мышь и нажимай Tab: каждая ссылка, кнопка и поле должны по очереди подсвечиваться в том порядке, в каком ты читаешь страницу.
Кто пользуется клавиатурой
Многие люди вообще не берут в руки мышь. Одни не могут твёрдо её держать; другие пользуются кнопкой-переключателем, ротовой палочкой или распознаванием речи, которое посылает нажатия клавиш; пользователи экранного диктора тоже в основном перемещаются клавиатурой. Критерий успешного применения 2.1.1 «Клавиатура» уровня A в WCAG 2.2 говорит, что всё на странице должно работать с клавиатуры. Критерий 2.1.2 «Отсутствие „клавиатурных ловушек“» добавляет: если фокус может попасть в какую-то часть страницы, он должен суметь выйти оттуда с клавиатуры.
Используй элементы, которые уже работают
Ссылки с 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.
- Какая клавиша переводит фокус на следующий элемент?
- У div есть обработчик onclick. Что не так?
- До него нельзя дойти и нажать его с клавиатуры
- Он слишком медленный
- Его нельзя оформить
- Ничего
- Что делает tabindex="0"?
- Добавляет элемент в обычный порядок Tab
- Ставит его первым в порядке Tab
- Убирает его из порядка Tab
- Отключает его
- Какие значения tabindex советует MDN?
- Только 0 и -1
- Любое положительное число
- От 1 до 10
- Никакие и никогда
- Таблица стилей задаёт outline: none каждому элементу в фокусе. Какой критерий нарушен?
- 2.4.7 Видимый указатель
- 1.1.1 Нетекстовый контент
- 1.4.3 Контрастность (минимальные требования)
- 3.3.2 Метки или инструкции
- Какой минимальный размер цели в CSS-пикселях на сторону требует 2.5.8?
- Закреплённый баннер о cookie полностью закрывает кнопку в фокусе. Какой это критерий WCAG 2.2?
- 2.4.11 Фокус не перекрыт (минимальные требования)
- 2.4.3 Перемещение указателя
- 2.1.2 Отсутствие «клавиатурных ловушек»
- 1.4.11 Контрастность нетекстовой информации
- Что делает ссылка для пропуска?
- Перескакивает повторяющиеся меню к основному содержимому
- Пропускает следующую страницу
- Скрывает изображения
- Выключает клавиатуру
- Какая клавиша ставит флажок в фокусе?
- Space
- Tab
- Escape
- Shift
- Фокус попадает в виджет, и 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