Gernar
Frontend DeveloperHTML и доступность

Интервью-вопрос

Что такое Accessibility

Accessibility это разработка интерфейсов, которыми можно пользоваться независимо от ограничений, устройства и способа ввода. На практике это влияет на HTML, фокус, клавиатуру, контраст, формы, динамический контент и качество пользовательского сценария.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше коротко объяснить Accessibility на интервью?

Вы хотите дать определение и сразу показать практический смысл для frontend.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

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 только если нативной семантики недостаточно.

Как выбирать решение

1Можно решить задачу нативным HTML?
Выбирайте нативный элемент: button, a, input, select, dialog. Он уже имеет базовую семантику и поведение.
2Нативного элемента не хватает из-за кастомного UI?
Добавляйте роль, состояния ARIA и клавиатурное поведение вместе. Одна роль без поведения опасна.
3Интерфейс меняет состояние без перезагрузки?
Проверьте фокус, заголовки, сообщения об ошибках и live region для важных статусов.
4Нужно доказать, что решение работает?
Проверьте клавиатурой, автоматическим инструментом и, если сценарий важный, 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. 1Начать с семантического HTML
  2. 2Проверить Tab, Enter, Space и Escape
  3. 3Сделать видимый фокус и понятные ошибки
  4. 4Добавить ARIA только там, где нужна дополнительная семантика
  5. 5Проверить сценарий вручную и инструментами
Опасный подход
  1. 1Собрать интерактивность на div и span
  2. 2Повесить только onClick без клавиатуры
  3. 3Спрятать outline без замены
  4. 4Добавить роли ARIA без состояний и поведения
  5. 5Поверить только зеленому отчету Lighthouse

Как проверять на практике

Хороший ответ не обещает абсолютную доступность после одного инструмента. Лучше назвать несколько уровней проверки.

  1. Семантика: кнопки являются кнопками, ссылки имеют href, заголовки идут в понятной структуре.
  2. Клавиатура: основной сценарий проходится без мыши, фокус виден и не попадает в скрытый контент.
  3. Визуальная читаемость: контраст, масштабирование, отсутствие смысла, который передается только цветом.
  4. Формы: label связан с полем, ошибки видимы и озвучиваются, подсказки не исчезают навсегда.
  5. Инструменты: axe, WAVE, Lighthouse и ручная проверка со screen reader для критичных сценариев.

На интервью это звучит практично. Вы показываете не только знание терминов, но и способ не пропустить баг в реальном продукте.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Заменять кнопку на div

    div с onClick не становится кнопкой автоматически. Он не получает правильную семантику, не всегда доступен с клавиатуры и может не озвучиваться как действие. Лучше использовать button, а кастомный вид делать через CSS.
  2. 2

    Считать ARIA волшебным исправлением

    ARIA сообщает assistive technologies смысл элемента, но не добавляет клики, фокус, обработку клавиш и валидацию. Если вы ставите role="button", вам все равно нужно реализовать клавиатурное поведение. Без этого интерфейс звучит как кнопка, но работает не как кнопка.
  3. 3

    Убирать outline без альтернативы

    Если убрать outline, пользователь клавиатуры может потерять позицию на странице. Это превращает простой сценарий в угадывание. Безопаснее оставить стандартный фокус или заменить его заметным стилем через :focus-visible.
  4. 4

    Не озвучивать ошибки формы

    Красная рамка вокруг поля не помогает пользователю screen reader понять, что именно не так. Ошибку нужно связать с полем через aria-describedby, обновить текст ошибки и не прятать его от assistive technologies. Иначе форма визуально понятна, но недоступна.
  5. 5

    Полагаться только на автоматический отчет

    Axe, WAVE и Lighthouse полезны, но они не проходят ваш пользовательский сценарий как человек. Они могут не заметить плохой порядок фокуса, непонятный текст кнопки или потерю контекста после SPA-навигации. Поэтому отчет нужно дополнять ручной проверкой.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми проверяют практическое понимание доступности во фронтенде.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание