Интервью-вопрос
Что такое Accessibility
Accessibility это разработка интерфейсов, которыми можно пользоваться независимо от ограничений, устройства и способа ввода. На практике это влияет на HTML, фокус, клавиатуру, контраст, формы, динамический контент и качество пользовательского сценария.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
Accessibility, или доступность, отвечает на простой вопрос: сможет ли человек выполнить задачу в интерфейсе, если он не пользуется мышью, плохо видит, использует screen reader, увеличивает масштаб, не различает часть цветов или работает с другим устройством ввода.
На интервью не стоит отвечать как словарь. Лучше сразу связать определение с фронтендом. Доступность появляется в HTML-разметке, CSS, обработке событий, формах, маршрутизации, модальных окнах и сообщениях об ошибках.
Короткая формулировка может быть такой:
Accessibility это практика разработки интерфейсов, которыми могут пользоваться разные люди в разных условиях. Во фронтенде это означает семантический HTML, доступность с клавиатуры, видимый фокус, достаточный контраст, понятные тексты и корректную поддержку assistive technologies.
Что это меняет в коде
Доступность часто ломается не из-за сложных стандартов, а из-за простых решений в коде. Например, интерактивный div выглядит как кнопка, но для клавиатуры и screen reader это может быть просто блок текста.
<!-- Плохо: выглядит как кнопка, но не является кнопкой -->
<div class="button" onclick="openDialog()">Open settings</div>
<!-- Лучше: нативный элемент уже имеет базовое поведение -->
<button type="button" onclick="openDialog()">
Open settings
</button>В первом варианте легко забыть фокус, Enter, Space, роль и имя элемента. Итог простой. Пользователь клавиатуры может не открыть модальное окно, а screen reader не сообщит, что перед ним действие. Во втором варианте браузер уже дает большую часть ожидаемого поведения. Поэтому на интервью полезно сказать: сначала выбираю правильный HTML, потом добавляю ARIA только если нативной семантики недостаточно.
Как выбирать решение
Выбирайте нативный элемент: button, a, input, select, dialog. Он уже имеет базовую семантику и поведение.Добавляйте роль, состояния ARIA и клавиатурное поведение вместе. Одна роль без поведения опасна.Проверьте фокус, заголовки, сообщения об ошибках и live region для важных статусов.Проверьте клавиатурой, автоматическим инструментом и, если сценарий важный, screen reader.WCAG, ARIA и нативная семантика
WCAG это набор критериев, который помогает понять, насколько интерфейс доступен. В коротком ответе достаточно назвать идею и уровни A, AA, AAA. Часто продуктовые интерфейсы ориентируют на AA, но конкретные требования зависят от продукта, страны, договора и аудитории.
ARIA это способ добавить семантику там, где HTML не может выразить нужное состояние или роль. Но ARIA не исправляет плохую интерактивность автоматически. Если элемент объявлен как кнопка через role="button", вам все равно нужны фокус, обработка клавиш и понятное доступное имя.
Сильная формулировка:
Я не начинаю с ARIA. Сначала проверяю, можно ли решить задачу нативным HTML. Если делаю сложный кастомный компонент, тогда добавляю роли, состояния и клавиатурное поведение по паттерну, а потом проверяю это вручную.
Клавиатура и фокус
Если сценарий нельзя пройти клавиатурой, он недоступен для части пользователей. Это касается не только людей с моторными ограничениями. Клавиатурой пользуются power users, пользователи временно сломанной мыши, некоторые пользователи screen reader и люди с нестандартными устройствами ввода.
Минимальная проверка: открыть страницу, нажимать Tab, Shift+Tab, Enter, Space и Escape. Фокус должен идти в логичном порядке, быть видимым и не проваливаться в скрытые элементы. Модальное окно должно получать фокус при открытии и возвращать его назад при закрытии.
Плохой признак в CSS:
/* Плохо: пользователь клавиатуры теряет ориентир */
*:focus {
outline: none;
}Безопаснее оставить стандартный фокус или задать свой заметный стиль через :focus-visible. Если дизайн требует кастомного фокуса, проверьте его на темном и светлом фоне, при масштабировании и в состоянии ошибки.
Динамический интерфейс и SPA
В SPA пользователь может нажать кнопку, а страница изменится без полной перезагрузки. Визуально это понятно, но screen reader может не сообщить о важном изменении. Поэтому для статусов, ошибок и результатов действий нужно продумать, как пользователь узнает, что произошло.
<p id="save-status" role="status" aria-live="polite"></p>
<script>
document.getElementById("save-status").textContent = "Profile saved";
</script>Такой пример подходит для ненавязчивого статуса. Для ошибок формы часто важнее связать сообщение с конкретным полем через aria-describedby и показать текст рядом с полем. Для модальных окон и переходов между экранами важнее управление фокусом, иначе пользователь остается в старом контексте.
- 1Начать с семантического HTML
- 2Проверить Tab, Enter, Space и Escape
- 3Сделать видимый фокус и понятные ошибки
- 4Добавить ARIA только там, где нужна дополнительная семантика
- 5Проверить сценарий вручную и инструментами
- 1Собрать интерактивность на div и span
- 2Повесить только onClick без клавиатуры
- 3Спрятать outline без замены
- 4Добавить роли ARIA без состояний и поведения
- 5Поверить только зеленому отчету Lighthouse
Как проверять на практике
Хороший ответ не обещает абсолютную доступность после одного инструмента. Лучше назвать несколько уровней проверки.
- Семантика: кнопки являются кнопками, ссылки имеют
href, заголовки идут в понятной структуре. - Клавиатура: основной сценарий проходится без мыши, фокус виден и не попадает в скрытый контент.
- Визуальная читаемость: контраст, масштабирование, отсутствие смысла, который передается только цветом.
- Формы: label связан с полем, ошибки видимы и озвучиваются, подсказки не исчезают навсегда.
- Инструменты: axe, WAVE, Lighthouse и ручная проверка со screen reader для критичных сценариев.
На интервью это звучит практично. Вы показываете не только знание терминов, но и способ не пропустить баг в реальном продукте.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Заменять кнопку на div
divсonClickне становится кнопкой автоматически. Он не получает правильную семантику, не всегда доступен с клавиатуры и может не озвучиваться как действие. Лучше использоватьbutton, а кастомный вид делать через CSS. - 2
Считать ARIA волшебным исправлением
ARIA сообщает assistive technologies смысл элемента, но не добавляет клики, фокус, обработку клавиш и валидацию. Если вы ставитеrole="button", вам все равно нужно реализовать клавиатурное поведение. Без этого интерфейс звучит как кнопка, но работает не как кнопка. - 3
Убирать outline без альтернативы
Если убратьoutline, пользователь клавиатуры может потерять позицию на странице. Это превращает простой сценарий в угадывание. Безопаснее оставить стандартный фокус или заменить его заметным стилем через:focus-visible. - 4
Не озвучивать ошибки формы
Красная рамка вокруг поля не помогает пользователю screen reader понять, что именно не так. Ошибку нужно связать с полем черезaria-describedby, обновить текст ошибки и не прятать его от assistive technologies. Иначе форма визуально понятна, но недоступна. - 5
Полагаться только на автоматический отчет
Axe, WAVE и Lighthouse полезны, но они не проходят ваш пользовательский сценарий как человек. Они могут не заметить плохой порядок фокуса, непонятный текст кнопки или потерю контекста после SPA-навигации. Поэтому отчет нужно дополнять ручной проверкой.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми проверяют практическое понимание доступности во фронтенде.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Что такое тег header 😎
Тег <header> обозначает вводную часть страницы или отдельного раздела. Разбираем, когда его использовать, чем он отличается от div и какие ошибки вредят семантике и доступности.
Что такое body 😎
Body в HTTP - это тело запроса или ответа, где передаются данные. Разбираем, когда оно бывает пустым, как связаны body и Content-Type, и какие ошибки часто ломают работу с API во фронтенде.