OPTION 1: utilisez la :focus-visible
pseudo-classe
La :focus-visible
pseudo-classe peut être utilisée pour éliminer les contours disgracieux et concentrer les anneaux sur les boutons et divers éléments pour les utilisateurs qui ne naviguent PAS via le clavier (c'est-à-dire via le toucher ou le clic de la souris).
/**
* 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;
}
Avertissement: à partir de 2020, la :focus-visible
pseudo-classe n'est pas largement prise en charge par les navigateurs . Cependant, le polyfill est très facile à utiliser; voir les instructions ci-dessous.
OPTION 2: utilisez le .focus-visible
polyfill
Cette solution utilise une classe CSS normale au lieu de la pseudo-classe mentionnée ci-dessus, et prend en charge un large navigateur car il s'agit d' un polyfill officiel basé sur Javascript .
Étape 1: ajoutez les dépendances Javascript à votre page HTML
Remarque: le polyfill visible sur le focus nécessite un polyfill supplémentaire pour plusieurs navigateurs plus anciens qui ne prennent pas en charge 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>
Étape 2: ajoutez le CSS suivant à votre feuille de style
Ce qui suit est une version modifiée de la solution CSS documentée plus en détail ci-dessus.
/**
* 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;
}
Étape 3 (facultative): utilisez la classe «focus-visible» si nécessaire
Si vous avez des éléments où vous souhaitez réellement afficher la bague de mise au point lorsque quelqu'un clique ou utilise tactile, ajoutez simplement la focus-visible
classe à l'élément 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>
Ressource:
Démo: