Фокус¶
Понимание важности фокуса в веб-приложениях. Вы узнаете, как управлять фокусом и как сделать так, чтобы путь по странице был удобен как для людей, пользующихся мышью, так и для тех, кто использует клавиатуру для навигации.
CSS подкаст
018: Фокус
На веб-странице пользователь нажимает на ссылку, которая переводит его к основному содержанию сайта. Такие ссылки часто называют пропускными или якорными. Когда эта ссылка активизируется с клавиатуры клавишами Tab и Enter, вокруг контейнера с основным содержимым появляется кольцо фокуса. Почему так происходит?
Это связано с тем, что <main> имеет значение атрибута tabindex="-1", а значит, может быть программно сфокусирован. Когда на <main> нацеливаются — поскольку #main-content в строке URL браузера совпадает с id — он получает программный фокус. В таких ситуациях возникает соблазн убрать стили фокусировки, но правильное и осторожное обращение с фокусом помогает создать хороший, доступный пользовательский опыт. Это также может стать отличным местом для придания интереса взаимодействию.
Почему фокус важен?¶
Ваша работа как веб-разработчика заключается в том, чтобы сделать сайт доступным и инклюзивным для всех. Создание доступных состояний фокуса с помощью CSS является частью этой задачи.
Стили фокуса помогают людям, использующим такие устройства, как клавиатура или переключатель управления, осуществлять навигацию и взаимодействие с веб-сайтом. Если элемент получает фокус, а визуальная индикация отсутствует, пользователь может потерять трек, на котором он находится. Это может создать проблемы с навигацией и привести к нежелательному поведению, если, например, перейти не по той ссылке.
Подробнее о важности фокуса для обеспечения доступности читайте в Изучам доступность: Фокус, а о том, как управлять фокусом в HTML — в Изучаем HTML: Фокус.
Как элементы получают фокус¶
Некоторые элементы автоматически фокусируются; это элементы, которые принимают взаимодействие и ввод, такие как <a>, <button>, <input> и <select>. Короче говоря, все элементы форм, кнопки и ссылки. Обычно для навигации по фокусируемым элементам сайта используется клавиша tab для перемещения вперед по странице и shift + tab для перемещения назад.
Существует также HTML-атрибут tabindex, который позволяет изменять индекс табуляции — порядок фокусировки элементов — каждый раз, когда кто-то нажимает клавишу Tab, или фокус смещается при изменении хэша в URL или по событию JavaScript. Если tabindex для HTML-элемента установлен в 0, то он может получать фокус по клавише Tab и будет соблюдать глобальный индекс табуляции, который определяется порядком источника документа.
Если задать tabindex равным -1, то он сможет получать фокус только программно, то есть только при наступлении JavaScript-события или изменении хэша (совпадении id элемента с URL). Если задать tabindex больше 0, то он будет удален из глобального индекса вкладок, определяемого порядком источника документа. Порядок табуляции теперь будет определяться значением tabindex, поэтому элемент с tabindex="1" будет получать фокус, например, перед элементом с tabindex="2".
Соблюдение порядка следования документов очень важно, и менять порядок следования фокусов следует только в том случае, если это абсолютно необходимо. Это касается как установки tabindex так и изменения визуального порядка с помощью CSS-макетов, таких как flexbox и grid. Все, что создает непредсказуемый порядок фокуса в Интернете, может создать недоступные для пользователя условия.
Стилизация фокуса¶
По умолчанию, когда элемент получает фокус, в браузере появляется кольцо фокуса. В разных браузерах и операционных системах это кольцо может быть разным.
Это поведение можно изменить с помощью CSS, используя псевдоклассы :focus, :focus-within и :focus-visible, о которых вы узнали в уроке pseudo-classes. Важно задать стиль фокуса, который контрастирует со стилем элемента по умолчанию. Например, распространенным подходом является использование свойства outline.
1 2 3 | |
Свойство outline может оказаться слишком близко к тексту ссылки, но свойство outline-offset может помочь в этом, поскольку оно добавляет дополнительную визуальную "подложку", не влияя на геометрический размер, который заполняет элемент. Положительное значение числа для outline-offset выдвигает контур наружу, отрицательное — внутрь.
В настоящее время в некоторых браузерах, если для элемента задан border-radius и используется outline, он не будет соответствовать контуру — контур будет иметь острые углы. В связи с этим возникает соблазн использовать box-shadow с небольшим радиусом размытия, поскольку box-shadow фиксирует форму, соблюдая border-radius, но такой стиль не будет отображаться в режиме Windows High Contrast Mode. Это связано с тем, что режим высокой контрастности Windows не применяет тени и в основном игнорирует фоновые изображения, чтобы отдать предпочтение настройкам пользователя.
В заключение¶
Создание состояния фокуса, контрастирующего с состоянием элемента по умолчанию, невероятно важно. Стили браузера по умолчанию уже делают это за вас, но если вы хотите изменить это поведение, помните следующее:
- Избегайте использования
outline: noneдля элементов, которые могут получать фокус клавиатуры. - Не заменяйте стили
outlineнаbox-shadow, поскольку они не отображаются в режиме высокой контрастности Windows. - Устанавливайте положительное значение
tabindexдля HTML-элемента только в случае крайней необходимости. - Убедитесь, что состояние фокуса очень четко отличается от состояния по умолчанию.
Источник — Focus