2021年1月〜3月に各ブラウザでfocus-visible周りの動きがあったのでまとめた
1末から2月にかけて、:focus-visible
周りのブラウザ実装が進んだのでまとめました。
:focus-visibleのおさらい
:focus-visibleは、タブ移動時のみ要素のoutline
を表示させることができる疑似クラスです。
:focus
だと要素にタブ移動時にフォーカスした際だけではなく、クリック時などにもoutline
が表示されるので、outline
を消しがちだったがそれを避けることができます。
outline
を消しちゃうとアクセシビリティ上よくないので、:focus-visible
を使用します。
Chrome
Chromeで:focus-visibleがUA style sheetのデフォルトになります。
この変更はChrome 90から入るようです。
Chrome 86から:focus-visible
は使用できていたが、UA style sheetは:forcus
だったので、下記のような記述が必要でした。
:focus:not(:focus-visible) {
outline: 0;
}
今回の変更で:focus-visible
がUA style sheetのデフォルトになったので上記の記述は不要になります。
Firefox
Firefox 85で:focus-visibleが有効にになりました。
いままで:-moz-focusring
の疑似クラスを使用していたが、Firefox 85で:focus-visible
が実装されました。
FirefoxDevToolsでスタイルの切り替えもできるようになっています。
Safari
IgaliaがOpen Prioritizationを通して、WebKitに:focus-visibleを実装協力
IgaliaがOpen Prioritizationというクラウドファンディングを通して、WebKitに:focus-visible
を実装することになり、実装するためにWPTのテストを実装したり、実装するにあたった課題を報告している記事です。
今回の記事の冒頭で紹介しているChromeで:focus-visible
がUA style sheetのデフォルトになっていないIssueを報告をしているのもIgaliaの人なのですが、このPJを通して発見されたものになります。
Safariはinput系のDOMはShadow DOMで構成されています。
これがあるので:focus-visible
実装の壁になってるようです。
Igaliaは今後もWebKitに:focus-visible
を実装するレポート記事を出してくれるようです。
2020/3/12追記
Release Notes for Safari Technology Preview 122で記載されていますが、STPで:focus-visible
が実装されたようです!
Safariで使えるようになるのも目前ですね!
さいごに
早く全ブラウザで:focus-visible
が使えるようになってほしいですね。
#サイボウズフロントエンドマンスリーで同様のことを喋ってるのでよければご覧ください。
Discussion