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

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

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

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

Синтаксис

Селектор:focus-visible { … }

Пример

Код примера скопирован в буфер
<!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