:focus-visible
擬似クラスは、要素が :focus
擬似クラスに一致している時で、ユーザーエージェントが要素にフォーカスを明示するべきであると発見的に指定した場合 (多くのブラウザーではこの場合、「フォーカスリング」を表示します) に適用されます。
このセレクターは、ユーザーの入力方法 (マウスなのかキーボードなのか) によって異なるフォーカス表示を提供したい場合に便利です。
なお、 Firefox は似た機能をより古い接頭辞付きの擬似クラス、 :-moz-focusring
で対応しています。
構文
:focus-visible
例
基本的な例
この例では、 :focus-visible
セレクターはユーザーエージェントの動作を使用して一致するタイミングを判断します。マウスでそれぞれのコントロールをクリックしたときと、キーボードを使用してタブ移動したときとで、何が起こるかを比較してみてください。なお、 :focus
でスタイル付けされた要素との動作の違いに注意してください。
<input value="Default styles"><br>
<button>Default styles</button><br>
<input class="focus-only" value=":focus only"><br>
<button class="focus-only">:focus only</button><br>
<input class="focus-visible-only" value=":focus-visible only"><br>
<button class="focus-visible-only">:focus-visible only</button>
input, button {
margin: 10px;
}
.focus-only:focus {
outline: 2px solid black;
}
.focus-visible-only:focus-visible {
outline: 4px dashed darkorange;
}
フォーカスインジケーターの選択的な表示
カスタムコントロール、例えば カスタム要素ボタンなどは、 :focus-visible
を使用してキーボードフォーカスに対してのみフォーカスインジケーターを選択的に適用することができます。これは <button>
のようなコントロールのネイティブのフォーカスの動作に一致します。
<custom-button tabindex="0" role="button">Click Me</custom-button>
custom-button {
display: inline-block;
margin: 10px;
}
custom-button:focus {
/* Provide a fallback style for browsers
that don't support :focus-visible */
outline: none;
background: lightgrey;
}
custom-button:focus:not(:focus-visible) {
/* Remove the focus indicator on mouse-focus for browsers
that do support :focus-visible */
background: transparent;
}
custom-button:focus-visible {
/* Draw a very noticeable focus style for
keyboard-focus on browsers that do support
:focus-visible */
outline: 4px dashed darkorange;
background: transparent;
}
ポリフィル
focus-visible.js を使用して :focus-visible
のポリフィルにすることができます。
アクセシビリティの考慮
弱視
視覚的なフォーカスインジケーターが、弱視の人々からも見えるように確認してください。これは外光が明るい場所 (太陽の下の屋外など) で画面を使用するすべての人にも利益になります。 WCAG 2.1 SC 1.4.11 Non-Text Contrast は、視覚的なフォーカスインジケーターを少なくとも 3:1 にすることを要求しています。
- アクセシブルな視覚的フォーカスインジケーター: Give Your Site Some Focus! Tips for Designing Useful and Usable Focus Indicators
認知障碍
人が形式が混在した入力フィールドを使用している場合、フォーカスインジケーターが表示されたり消えたりする理由が明確に分からないかもしれません。認知的な懸念のあるユーザーや技術的なリテラシーの低いユーザーにとっては、対話的要素が一貫した動作をしていないと、混乱を招くかもしれません。
仕様書
仕様書 | 状態 | 備考 |
---|---|---|
Selectors Level 4 :focus-visible の定義 |
草案 | 初回定義 |
ブラウザーの互換性
BCD tables only load in the browser