ВАРИАНТ 1: Используйте :focus-visible
псевдокласс
:focus-visible
Псевдо-класс может быть использован , чтобы убить неприглядные очертания и фокус кольца на кнопках и различных элементах для пользователей , которые не плывут с помощью клавиатуры (то есть, с помощью прикосновения или мышей).
/**
* The default focus style is likely provided by Bootstrap or the browser
* but here we override everything else with a visually appealing cross-
* browser solution that works well on all focusable page elements
* including buttons, links, inputs, textareas, and selects.
*/
*:focus {
outline: 0 !important;
box-shadow:
0 0 0 .2rem #fff, /* use site bg color to create whitespace for faux focus ring */
0 0 0 .35rem #069 !important; /* faux focus ring color */
}
/**
* Undo the above focused button styles when the element received focus
* via mouse click or touch, but not keyboard navigation.
*/
*:focus:not(:focus-visible) {
outline: 0 !important;
box-shadow: none !important;
}
Предупреждение. Начиная с 2020 года :focus-visible
псевдокласс не широко поддерживается в разных браузерах . Однако полифилл очень прост в использовании; см. инструкции ниже.
ВАРИАНТ 2: использовать .focus-visible
полифилл
Это решение использует обычный класс CSS вместо псевдокласса, упомянутого выше, и имеет широкую поддержку браузера, потому что это официальный полифилл на основе Javascript .
Шаг 1. Добавьте зависимости Javascript на свою HTML-страницу.
Примечание: видимый в фокусе полифилл требует дополнительного полифилла для нескольких старых браузеров, которые не поддерживают classList :
<!-- place this code just before the closing </html> tag -->
<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Element.prototype.classList"></script>
<script src="https://unpkg.com/focus-visible"></script>
Шаг 2. Добавьте следующий CSS в таблицу стилей.
Ниже приведена модифицированная версия решения CSS, более подробно описанная выше.
/**
* Custom cross-browser styles for keyboard :focus overrides defaults.
*/
*:focus {
outline: 0 !important;
box-shadow:
0 0 0 .2rem #fff,
0 0 0 .35rem #069 !important;
}
/**
* Remove focus styles for non-keyboard :focus.
*/
*:focus:not(.focus-visible) {
outline: 0 !important;
box-shadow: none !important;
}
Шаг 3 (необязательно): при необходимости используйте класс focus-visible
Если у вас есть какие-либо элементы, для которых вы действительно хотите показать кольцо фокусировки, когда кто-то щелкает или использует касание, просто добавьте focus-visible
класс в элемент DOM.
<!-- This example uses Bootstrap classes to theme a button to appear like
a regular link, and then add a focus ring when the link is clicked --->
<button type="button" class="btn btn-text focus-visible">
Clicking me shows a focus box
</button>
Ресурс:
Демо-версия: