Псевдокласс :focus-visible

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

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

  • :focus работает для получивших фокус элементов без каких-либо оговорок и условий. Это значит, что не имеет значения, каким образом элемент получил фокус — :focus сработает всегда.
  • :focus-visible работает при определённых условиях — браузер определяет, как элемент получил фокус и в зависимости от этого применяет стили или нет. К примеру, при использовании мыши текстовые поля стилизуются, а кнопки нет. При получении фокуса с помощью клавиатуры стилизуется и кнопка.

Синтаксис

Селектор:focus-visible { … }
Описание Пример
<тип> Указывает тип значения. <размер>
A && B Значения должны выводиться в указанном порядке. <размер> && <цвет>
A | B Указывает, что надо выбрать только одно значение из предложенных (A или B). normal | small-caps
A || B Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. width || count
[ ] Группирует значения. [ crop || cross ]
* Повторять ноль или больше раз. [,<время>]*
+ Повторять один или больше раз. <число>+
? Указанный тип, слово или группа не является обязательным. inset?
{A, B} Повторять не менее A, но не более B раз. <радиус>{1,4}
# Повторять один или больше раз через запятую. <время>#

Пример

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>:focus-visible</title> <style> .b1:focus { outline: 2px solid orange; /* Оранжевый контур */ } .b2:focus-visible { outline: 2px solid green; /* Зелёный контур */ } </style> </head> <body> <p>Кнопки с :focus</p> <p><button class="b1">Кнопка</button> <button class="b1">Кнопка</button> <button class="b1">Кнопка</button></p> <p>Кнопки с :focus-visible</p> <p><button class="b2">Кнопка</button> <button class="b2">Кнопка</button> <button class="b2">Кнопка</button></p> </body> </html>

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

Спецификация

Selectors Level 4

Браузеры

86 86 72 15.4 85
86 85 61 15.4

В таблице браузеров применяются следующие обозначения.

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

Число указывает версию браузреа, начиная с которой элемент поддерживается.