CSS-селектор focus visible — это функциональный инструмент, который позволяет разработчикам управлять внешним видом индикаторов фокуса на веб-элементах. Он предоставляет способ отображения стилей фокуса только тогда, когда пользователь взаимодействует с помощью клавиатуры или других устройств непрямого ввода. Реализуя это, вы гарантируете соблюдение стандартов доступности без загромождения визуального интерфейса для пользователей мыши, которые не зависят от состояний фокуса для навигации.
Какова цель Focus Visible?
Согласно документации MDN Web Docs, псевдокласс :focus-visible применяет индикаторы фокуса только тогда, когда модальности ввода пользователя, такие как клавиатура, указывают на необходимость стилизации видимого фокуса. Это различие важно для дизайнеров, которые хотят избежать стандартного кольца фокуса браузера, которое появляется даже тогда, когда пользователь щелкает по элементу мышкой. Многим пользователям стандартный контур кажется отвлекающим, когда они просто прокликивают сайт, однако пользователи клавиатуры считают его обязательным для отслеживания своего прогресса по интерактивным элементам.

Когда разработчик использует стандартный псевдокласс :focus, браузер применяет стиль для каждого метода взаимодействия. Это часто приводит к тому, что дизайнеры удаляют контур глобально с помощью правила outline: none, что создает серьезное препятствие для доступности. Селектор focus-visible разрешает этот конфликт, выступая в качестве условного привратника. Он сохраняет ваш интерфейс чистым для пользователей мыши, одновременно гарантируя, что пользователи, использующие только клавиатуру, получают необходимую визуальную обратную связь, чтобы понимать, где они находятся на странице.
Почему вам следует использовать это вместо стандартного фокуса?
Основная причина внедрения этого селектора — сбалансировать эстетические предпочтения с функциональными требованиями. Стандартные стили фокуса часто конфликтуют с современными дизайн-системами, которые полагаются на пользовательскую стилизацию кнопок и полей ввода. Используя :focus-visible, вы можете написать специальные CSS-правила, которые определяют контрастный и четкий индикатор для навигации с клавиатуры, оставляя взаимодействия с мышью нетронутыми. Этот подход предотвращает проблему «двойного фокуса», когда кнопка может одновременно отображать состояние наведения и контур.
Рассмотрите влияние на пользователей, которые переключаются между методами ввода. Пользователь может начать задачу с помощью трекпада, а затем переключиться на сочетания клавиш для заполнения сложной формы. Если ваш CSS правильно обрабатывает фокус, переход между этими двумя режимами будет естественным и предсказуемым. вы не просто добавляете стилистический выбор; вы предоставляете структурное руководство для пользователей, которые полагаются на клавишу Tab для эффективного перемещения по вашим веб-страницам.

| Тип селектора | Когда применяется | Вариант использования |
|---|---|---|
| :focus | Каждое событие фокуса | Широкая визуальная обратная связь |
| :focus-visible | Только когда модальность ввода этого требует | Фокус доступности |
| :focus-within | Когда дочерний элемент в фокусе | Выделение родительских контейнеров |
Как Alien Road применяет Focus Visible?
В Alien Road мы интегрируем селектор focus-visible в нашу библиотеку стандартных компонентов, чтобы гарантировать соответствие каждой сборки ожиданиям доступности. Во время типичного клиентского проекта наши разработчики сначала определяют базовый набор стилей фокуса, которые соответствуют фирменному стилю. Мы гарантируем, что эти стили применяются строго к состоянию :focus-visible. Это гарантирует, что когда пользователь переходит с помощью табуляции в меню навигации или на кнопку призыва к действию, появляется четкая контрастная граница.
Мы следуем единому процессу для каждого сайта, которым управляем. Во-первых, мы глобально удаляем стандартный контур браузера с помощью базового сброса. во-вторых, мы применяем специфическое, хорошо заметное кольцо фокуса, которое активируется только при вводе с клавиатуры. В-третьих, мы проводим ручной аудит, используя только клавиатуру, чтобы убедиться, что каждый интерактивный элемент доступен. Этот процесс устраняет неопределенность стандартного поведения браузера и позволяет нам контролировать пользовательский опыт до пикселя.
Лучшие практики реализации
- Всегда определяйте контрастный индикатор фокуса, который выделяется на фоне ваших цветов.
- Избегайте использования только изменения цвета для фокуса, так как это не работает для пользователей с дальтонизмом.
- Убедитесь, что ваши кольца фокуса имеют достаточную толщину (обычно не менее 2 пикселей), чтобы их было легко заметить.
- Протестируйте свой макет с различными устройствами ввода, чтобы убедиться, что CSS срабатывает правильно.
- Сохраняйте стиль фокуса единообразным на протяжении всего проекта, чтобы создать предсказуемый опыт.
Распространенные ошибки, которых следует избегать
Одна из основных ошибок — полное удаление контура без предоставления замены. Хотя на скриншоте это может выглядеть чище, это делает сайт невозможным для использования многими людьми. Другая распространенная ошибка — использование низкоконтрастных цветов для кольца фокуса, например, светло-серого на белом фоне, что сводит на нет саму цель наличия индикатора. вы должны убедиться, что ваши стили фокуса соответствуют стандартным требованиям контрастности.
Разработчики также иногда сталкиваются с конфликтами специфичности. Если у вас есть старый CSS, ориентированный на :focus, он может переопределить ваши новые правила :focus-visible. Всегда проверяйте инструменты разработчика вашего браузера, чтобы увидеть, какой стиль имеет приоритет. Используйте инспектор для симуляции состояния :focus-visible, что позволяет вам видеть ваши стили в действии без необходимости постоянно переходить по всей странице во время цикла разработки.
Шаги для аудита ваших текущих состояний фокуса
- Откройте свой сайт в современном браузере и используйте клавишу Tab для навигации по всем интерактивным элементам.
- Убедитесь, что каждая ссылка, кнопка и поле ввода отображают четкое визуальное изменение при получении фокуса.
- Проверьте, остается ли стиль фокуса видимым при щелчке по элементу мышкой, и отрегулируйте при необходимости.
- Используйте инструменты разработчика браузера для переключения состояния focus-visible, чтобы проверить ваши свойства CSS.
- Задокументируйте любые отсутствующие состояния фокуса в таблице, чтобы отслеживать ваш прогресс по архитектуре сайта.
Часто задаваемые вопросы
Работает ли focus-visible во всех браузерах?
Современные браузеры обеспечивают надежную поддержку этого псевдокласса. Хотя некоторые очень старые браузеры могут его не распознавать, стандартный подход заключается в использовании стратегии прогрессивного улучшения. вы можете предоставить базовый стиль фокуса для старых браузеров и использовать :focus-visible, чтобы обеспечить более изысканный опыт для современных, совместимых браузеров, которые понимают селектор.
Могу ли я использовать focus-visible с пользовательскими кнопками?
Да, он отлично работает с пользовательскими кнопками, включая те, которые созданы с помощью тегов div или span. Тем не менее, вы должны убедиться, что ваши элементы доступны с клавиатуры, добавив атрибут tabindex. Как только элемент становится доступным для фокуса, селектор :focus-visible правильно определяет, когда пользователь выбрал его с помощью клавиатуры, что позволяет вам стилизовать его соответствующим образом.
Как он взаимодействует с box-shadow?
Вы можете использовать box-shadow для создания очень креативных и хорошо видимых колец фокуса, которые не мешают макету. В отличие от свойства outline, которое иногда может вызывать смещение или движение элементов во время фокуса, box-shadow позволяет индикатору располагаться снаружи или внутри элемента, не влияя на поток документа или окружающие компоненты.
Достаточно ли focus-visible для доступности?
Хотя это важная часть доступности, это лишь одна часть головоломки. вы также должны убедиться, что ваш сайт имеет логический порядок табуляции, достаточный цветовой контраст для всего текста и правильные семантические теги HTML. Индикатор фокуса жизненно важен, но он работает лучше всего в сочетании с этими другими фундаментальными веб-практиками для полноценного опыта.
С чего начать на этой неделе
Начните с определения пяти наиболее важных интерактивных компонентов на вашем сайте, таких как основная навигация, строка поиска и кнопки формы обратной связи. Примените четкий контрастный стиль фокуса к этим элементам, используя псевдокласс :focus-visible. Как только вы увидите, как это улучшает навигацию, внедрите ту же логику для остальных компонентов вашего сайта. Последовательный, намеренный стиль фокуса сразу сделает ваш сайт более профессиональным и инклюзивным для ваших посетителей.
Читайте далее: Веб-дизайн и разработка · Веб-дизайн