アクセシビリティ・見て分かる工夫

キーボードだけで使えるページ

マウスを使わず、Tabキーでページを操作する人がいます。その人の「いまどこ?」を示すフォーカスの輪を、消さずに、かっこよく整えます。

マウスが使えない人や、キーボード操作のほうが速い人は、Tabキーでリンクやボタンを順番に移動してページを使います。このとき「いまどこにいるか」を教えてくれるのが、要素を囲むフォーカスの輪(フォーカスリング)です。

体験してみよう

まず、Tabキーでの操作を体験してみましょう。

オレンジの輪が「いまここ」を教えてくれます。EnterかSpaceで、その場所を押せます。

やってはいけない:outline: none

フォーカスの輪の正体は、CSSのoutlineです。既定の見た目が野暮ったいからと、こう消してしまうサイトがあります。

button:focus {
  outline: none;   /* ❌ 絶対にやらない */
}

見た目はすっきりしますが、キーボードの人はカーソルを失います。「消す」のではなく、次のように「きれいに描き直す」のが正解です。

べんりワザリセットCSSはどれを使う?リセットCSSって何?という人はこちら

正解:focus-visibleで描き直す

button:focus-visible {
  outline: 3px solid #e5967a;
  outline-offset: 2px;
}
部分意味
:focus-visibleキーボード操作のときだけ輪を出すセレクタ
outline: 3px solid …輪の太さ・種類・色(ブランドカラーでOK)
outline-offset: 2px要素と輪の間にすきまを空けて見やすく

:focusではなく:focus-visibleを使うのがいまの定番。マウスでクリックしたときは輪が出ず、Tabで来たときだけ出る——両方の使い勝手が両立します。

そもそもTabで届くのは「押せるタグ」だけ

Tabキーで止まってくれるのは、<a><button><input>のようなもともと押せるタグだけです。<div><span>にクリックの動きをつけて(JavaScriptで)ボタンのように見せても、Tabでは素通り——キーボードの人には存在しないのと同じになります。

<div onclick="send()">送信</div>       <!-- ❌ Tabで届かない -->
<button onclick="send()">送信</button> <!-- ○ Tabで止まり、Enterでも押せる -->
Tabを押すと輪はbuttonにしか止まりません。divは押せる見た目でも、キーボードでは素通りされてしまいます。

押せるものは押せるタグで作る。HTMLコースで学んだ「意味のとおりに書く」が、キーボード操作の土台にもなっています。

HTMLボタンと入力欄buttonタグの基本はこの回

Tabの順番はHTMLの順番

フォーカスはHTMLに書いた順に移動します。見た目の並びと書いた順がずれていると、輪が画面上を飛び回って混乱のもと。レイアウトはCSSで動かしても、HTMLは読む順・操作する順に書く——この原則を守れば自然に正しくなります。

このレッスンのまとめ

  1. フォーカスの輪はキーボードの人のカーソルoutline: noneで消さない
  2. 消すかわりに:focus-visibleoutlineきれいに描き直す
  3. Tabの移動順=HTMLの順。読む順に書くのが土台

よくある質問

:focusと:focus-visibleは何がちがうの?
:focusはマウスクリックでもキーボードでも輪が出ますが、:focus-visibleはキーボード操作のときだけ輪を出します。クリック時の輪が気になって消したくなる問題を解決したのが:focus-visibleです。
outlineとborderはどうちがうの?
outlineは要素の外側に描かれ、レイアウトに影響しません。borderは要素の一部なので、太くするとまわりの配置がずれます。フォーカスの輪には、付け外ししてもレイアウトが動かないoutlineが向いています。
フォーカスの輪は何色にすればいい?
背景としっかり差がつく色なら、サイトのブランドカラーでかまいません。太さは2〜3px、outline-offsetで少しすきまを空けると見つけやすくなります。