OPZIONE 1: utilizzare la :focus-visible
pseudo-classe
La :focus-visible
pseudo-classe può essere utilizzata per eliminare i contorni sgradevoli e gli anelli di messa a fuoco sui pulsanti e sui vari elementi per gli utenti che NON navigano tramite tastiera (ovvero, tramite tocco o clic del mouse).
/**
* 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;
}
Avvertenza: a partire dal 2020, la :focus-visible
pseudo-classe non è ampiamente supportata da tutti i browser . Tuttavia il polyfill è molto facile da usare; vedere le istruzioni di seguito.
OPZIONE 2: utilizzare il .focus-visible
polyfill
Questa soluzione utilizza una normale classe CSS anziché la pseudo-classe sopra menzionata e ha un ampio supporto del browser perché è un polifill ufficiale basato su Javascript .
Passaggio 1: aggiungi le dipendenze Javascript alla tua pagina HTML
Nota: il polyfill con focus visibile richiede un polyfill aggiuntivo per diversi browser meno recenti che non supportano 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>
Passaggio 2: aggiungi il seguente CSS al tuo foglio di stile
La seguente è una versione modificata della soluzione CSS documentata in modo più approfondito sopra.
/**
* 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;
}
Passaggio 3 (facoltativo): utilizzare la classe 'focus-visible' ove necessario
Se hai elementi in cui vuoi effettivamente mostrare l'anello di messa a fuoco quando qualcuno fa clic o usa il tocco, aggiungi semplicemente la focus-visible
classe all'elemento 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>
Risorsa:
demo: