diff --git a/src/pages/ui-ux/index.md b/src/pages/ui-ux/index.md index 64b816b6..dbfc0a91 100644 --- a/src/pages/ui-ux/index.md +++ b/src/pages/ui-ux/index.md @@ -2742,8 +2742,20 @@ Accessibility делает интерфейс usable для людей с раз **Полный ответ** -Accessibility делает интерфейс usable для людей с разными возможностями, устройствами и контекстами. Это не отдельная -надстройка, а часть качества пользовательского опыта. +Accessibility влияет на возможность **выполнить пользовательскую задачу**, а не только на формальное соответствие +стандартам. Интерфейс может быть визуально понятным, но непригодным для человека, который пользуется клавиатурой, screen +reader или увеличенным масштабом страницы. + +Например, в форме регистрации недостаточно красиво подсветить ошибку: нужна связанная с полем подпись, текст ошибки и +понятный способ перейти к исправлению. Иначе часть пользователей не сможет завершить сценарий, хотя его UI выглядит +законченным. + +Доступность не ограничивается постоянной инвалидностью: интерфейс используют и со сломанной мышью, на ярком солнце или +при временном ограничении подвижности. При этом одного checklist недостаточно — сложные сценарии проверяют вручную с +реальными способами ввода. + +На интервью важно показать связь **accessibility → успешность сценария → UX**, а не описывать доступность как работу +исключительно с ARIA. @@ -2759,8 +2771,21 @@ Keyboard navigation позволяет пользоваться интерфей **Полный ответ** -Keyboard navigation позволяет пользоваться интерфейсом с клавиатуры без мыши. Это важно для доступности, power users и -ситуаций, где мышь неудобна. +Браузер управляет последовательностью фокуса для нативных интерактивных элементов. Обычно `Tab` и `Shift+Tab` перемещают +фокус между контролами, `Enter` активирует ссылку или кнопку, `Space` активирует кнопку, а `Escape` закрывает +поддерживающие это взаимодействие всплывающие элементы. + +Для составных виджетов, например tabs, listbox или menu, могут действовать другие правила: `Tab` вводит фокус в +компонент, стрелки перемещают его внутри. Конкретный keyboard contract зависит от паттерна WAI-ARIA, а не придумывается +отдельно для каждого проекта. + +Практическая проверка: пройти регистрацию от первого поля до подтверждения, не используя мышь; проверить порядок, +видимость фокуса, открытие и закрытие диалогов, достижимость ошибок. `tabindex="0"` включит кастомный элемент в +последовательность, но **не добавит** ему нативную активацию или семантику. Положительные значения `tabindex` обычно +создают непредсказуемый порядок. + +На интервью полезно различать **tab sequence**, **keyboard activation** и **keyboard navigation внутри composite +widget**. @@ -2776,8 +2801,19 @@ Focus state показывает, какой элемент сейчас акт **Полный ответ** -Focus state показывает, какой элемент сейчас активен для клавиатуры. Без него пользователь не понимает, где находится в -интерфейсе. +DOM-фокус определяет элемент, который получает события клавиатуры: это можно проверить через `document.activeElement`. +Визуальный focus state показывает пользователю положение этого фокуса, но не должен подменять фактическое управление им. + +Обычно браузер применяет `:focus` к сфокусированному элементу, а `:focus-visible` позволяет показывать заметный +индикатор, когда он особенно нужен при клавиатурном взаимодействии. Однако правило не означает, что при каждом клике +мышью индикатор обязательно скрывается: решение принимает браузер с учетом контекста. + +Например, после открытия modal dialog фокус нужно перенести на подходящий элемент внутри. После закрытия — вернуть +инициатору, если он еще существует; если нет, выбрать логичное следующее место. Просто нарисовать рамку вокруг поля +недостаточно. + +Распространенная ошибка — менять визуальный класс `.focused`, не вызывая реальное перемещение фокуса. На интервью +свяжите **видимость, DOM-фокус и focus management**. @@ -2793,8 +2829,18 @@ style. **Полный ответ** -Outline часто является единственным видимым индикатором фокуса. Если его убрать, нужно дать равноценный и заметный focus -style. +`outline` — стандартный способ показать keyboard focus без изменения геометрии элемента. Глобальное правило +`*:focus { outline: none }` часто делает переходы по `Tab` невидимыми, даже если мышью интерфейс работает нормально. + +Если дизайн требует собственного индикатора, его можно задать через `:focus-visible`: например, контрастный +`outline: 2px solid currentColor` с `outline-offset: 2px`. Но конкретные цвет и толщина должны подходить реальному фону, +включая dark mode и разные состояния кнопки. + +Проверяйте индикатор на кнопках, ссылках, input, элементах внутри dialog и при системном режиме `forced-colors`. Один +лишь `box-shadow` может исчезнуть в high-contrast mode, поэтому системный outline часто надежнее. + +На интервью объясните отличие **визуальной кастомизации focus style** от **отключения focus indication**: первое +возможно, второе лишает пользователя ориентира. @@ -2810,8 +2856,19 @@ Semantic HTML использует элементы по смыслу: button д **Полный ответ** -Semantic HTML использует элементы по смыслу: button для действия, a для ссылки, label для поля, heading для структуры. -Это помогает браузеру, assistive technologies и разработчикам. +Semantic HTML передает браузеру **назначение и структуру**, а не только внешний вид. Нативный `