オプション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>
資源:
デモ: