【フォーカスマネジメント】

フォーカスマネジメント とは?

💡 「今どこにいるか」を見失わせない、キーボードユーザーの道しるべ
📌 このページのポイント
フォーカスマネジメント ― フォーカストラップの例 ページ本体(モーダル中は操作不可) ボタンA ボタンB モーダルダイアログ テキスト入力欄 OK キャンセル Tab フォーカス中 Tabキーでモーダル内だけを巡回(トラップ)
フォーカスマネジメントのイメージ
ひよこ ひよこ

フォーカスマネジメントって、マウスを使わない人のための技術?

ペンギン先生 ペンギン先生

そうだよ。Tabキーでページ内を移動する人にとって、フォーカスが今どこにあるかは命綱なんだ。目が見える人はマウスで好きな場所をクリックできるけど、キーボードユーザーやスクリーンリーダー利用者はフォーカスの位置がすべてなんだよ

ひよこ ひよこ

フォーカストラップって何?

ペンギン先生 ペンギン先生

モーダルダイアログを開いたとき、フォーカスがモーダルの外に出ないように閉じ込める仕組みだよ。Tabキーを連打してもモーダル内の要素だけを巡回する。もし閉じ込めないと、モーダルの裏にあるボタンにフォーカスが飛んでしまって、スクリーンリーダーのユーザーは混乱してしまうんだ

ひよこ ひよこ

tabindexって数字を付けるやつだよね?

ペンギン先生 ペンギン先生

tabindex="0"は通常のTab順序に参加させる、tabindex="-1"はTabでは飛ばすけどJavaScriptでfocusできるようにする、という2つが基本だよ。tabindex="1"以上の正の値は使わないのが鉄則。無理やり順序を変えるとHTMLの構造と食い違ってカオスになるんだ

ひよこ ひよこ

SPAだとフォーカスの問題が起きやすいって本当?

ペンギン先生 ペンギン先生

本当だよ。従来のページ遷移ではブラウザがフォーカスをリセットしてくれるけど、SPAではJavaScriptで画面を書き換えるからフォーカスはそのまま残る。ページ遷移後にフォーカスを新しいコンテンツの先頭や見出しに移動させないと、スクリーンリーダーのユーザーは「画面が変わった」ことすら分からないんだ

ひよこ ひよこ

フォーカスの見た目が消されてることあるけど、あれはいいの?

ペンギン先生 ペンギン先生

outline: noneでフォーカスリングを消すのは、アクセシビリティ的にはアウトだよ。代わりに:focus-visibleを使えば、キーボード操作のときだけフォーカスリングを表示して、マウスクリック時は非表示にできる。デザインとアクセシビリティの両立はこのセレクターで解決する時代になったね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「フォーカスマネジメント」って出てきたら「キーボード操作で迷子にならないようにする仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Focus Management」 = フォーカス(入力焦点)の管理
💬 フォーカスは「焦点」という意味で、カメラのフォーカスと同じ語源。Webでは「今キーボード入力を受け取る要素」のことを指すよ
← 用語集にもどる