フォーカス順序とは?キーボード操作を迷わせないウェブアクセシビリティ設計

フォーカス順序とは、Tabキーでウェブページを操作したときに、リンク、ボタン、入力欄などへフォーカスが移る順番です。
順序が画面の構成や操作の流れと合っていれば、マウスを使わなくても次の操作対象を予測しやすくなります。

一方、フォーカスが離れた場所へ飛んだり、必要な項目を飛ばしたりすると、利用者は現在位置や次にすべき操作を見失います。
この記事では、HTMLの自然な並びを起点に、tabindexと動的な画面のフォーカスをどう整えるかを説明します。

フォーカス順序とは

フォーカスは、キーボード操作の対象になっている現在位置を示します。
フォームで入力欄を選んだときや、リンクを選択して実行しようとするとき、その要素にフォーカスが当たっています。

Tabキーを繰り返し押すと、通常はページ内の操作可能な要素へ順に移動します。
たとえば、フォームが「名前、メールアドレス、電話番号、送信ボタン」の順に表示されているなら、フォーカスも同じ流れで進むと、入力作業を理解しやすくなります。

順序が利用者に与える影響

  • 現在位置を把握しやすい:直前の項目と次の項目につながりがあれば、ページ内で迷いにくくなります。
  • 入力や確認を進めやすい:フォームの表示順と操作順がそろっていれば、項目の飛ばしや重複を減らせます。
  • キーボードだけでも操作しやすい:マウスを使わない利用者が、目的のリンクやボタンへ順に到達できます。

スクリーンリーダー利用時に混同しやすい点

スクリーンリーダーの読み上げはページの構造にも関わるため、キーボードのフォーカス順序だけですべてが決まるわけではありません。
ただし、スクリーンリーダーとキーボードを併用してリンクやフォームを操作する場面では、フォーカスが不自然に移ると、現在位置と次の操作対象をつかみにくくなります。

WCAGで扱われるフォーカスの順序

フォーカスの順序は、Web Content Accessibility Guidelines(WCAG)の達成基準2.4.3で扱われています。
詳しい基準の位置づけは、WCAG 2.2「2.4.3 フォーカスの順序」の解説も参照してください。

フォーカス順序を整える4つの方法

1. HTMLの並びを操作の流れに合わせる

ブラウザの基本的なフォーカス順序は、HTMLに記述された要素の並びを起点にします。
そのため、画面を見たときに自然な順序でHTMLを書くことが、最初の対策になります。

<header>
  <nav>
    <a href="...">サイト案内</a>
  </nav>
</header>

<main>
  <form>
    <label for="name">名前</label>
    <input id="name" name="name" type="text">

    <label for="email">メールアドレス</label>
    <input id="email" name="email" type="email">

    <button type="submit">送信</button>
  </form>
</main>

<footer>
  <a href="...">お問い合わせ</a>
</footer>

この例では、サイト案内のリンク、名前、メールアドレス、送信ボタン、お問い合わせのリンクという順に操作対象が並びます。
HTMLを読んだときの流れと、利用者が画面上で進みたい流れが一致しています。

2. 見た目の配置とHTMLの並びをそろえる

画面では左から右、上から下へ並んでいるのに、フォーカスだけが別の場所へ移ると、目で追っている位置とキーボードの現在位置がずれます。
フォームを「名前、メールアドレス、電話番号」の順に見せるなら、HTMLの並びとフォーカス順序も同じ流れにします。

レイアウトを変更したときは、見た目だけを確認して終えず、Tabキーでも同じ順序になるかを確かめます。

3. tabindexの役割を分けて使う

tabindexは、要素をTabキーの移動順に含めるかどうかを調整する属性です。
値ごとの役割を混同すると、HTMLの自然な順序を崩しやすくなります。

指定 役割 使うときの注意
指定なし リンク、ボタン、入力欄などをHTMLの並びに沿って操作します。 まずはこの状態で自然な順序になるようにHTMLを整えます。
tabindex="0" 要素を通常のTab順序に加えます。 本来は操作要素でないものを操作可能にする場合、役割や操作方法も含めて検討します。
tabindex="-1" 要素を通常のTab順序から外し、必要な場面でプログラムからフォーカスできるようにします。 通知先や動的に表示した領域など、目的を決めて使います。
正の値 正の値を指定した要素同士では、数値の小さい要素を先に移動させます。 HTMLの並びとは別の順序が生まれるため、基本の解決策にはせず、HTML自体を並べ直せないか先に検討します。

4. モーダルを開く前後の位置を管理する

モーダルのように画面の一部が動的に開く場合は、表示後に利用者が操作を始める位置と、閉じた後に戻る位置を決めます。
開いたときはモーダル内の適切な操作要素へフォーカスを移し、閉じたときはモーダルを開いたボタンへ戻す流れが分かりやすい設計です。

focus()を一度実行するだけでは、どの要素から操作を始めるのか、閉じた後にどこへ戻るのかが分かりません。
実装全体の考え方は、アクセシブルなモーダルダイアログの設計ガイドで確認できます。

Tabキーで確認する手順

  1. ページの先頭からTabキーを押し、最初の操作対象を確認します。
  2. リンク、フォーム、ボタンが画面の意味に沿った順序で移るかを追います。
  3. 表示上は近い項目なのに、フォーカスが離れた場所へ飛ばないかを確認します。
  4. 必要な操作要素が順序から抜けていないかを確認します。
  5. モーダルなどの動的な画面を開閉し、操作の開始位置と戻り先を確認します。

コードだけを見て判断せず、実際の画面をキーボードだけで一通り操作すると、順序の飛びや戻り先の不備を見つけやすくなります。

よくある問題と見直す場所

起きていること 見直す場所 修正の考え方
フォーム内で離れた項目へ飛ぶ HTMLの並び、正のtabindex 入力の流れに合わせてHTMLを並べ、数値による順序指定を減らします。
見た目の順序と操作順が違う レイアウトとHTMLの関係 画面上の配置とHTMLの並びを同じ流れにそろえます。
モーダルを閉じた後に現在位置を見失う 閉じる処理のフォーカス制御 モーダルを開いた操作要素へフォーカスを戻します。
必要なリンクやボタンへ到達できない 操作要素のHTMLとtabindex 対象がTab順序に含まれているかを確認します。

公開前の確認ポイント

  • HTMLの並びが、ページを利用する順序になっているか。
  • 見た目の配置とTabキーの移動が一致しているか。
  • 正のtabindexで順序を作り直していないか。
  • 動的な画面を開いた後と閉じた後のフォーカス位置が決まっているか。
  • リンク、ボタン、入力欄をキーボードだけで順に操作できるか。

フォーカス順序は、HTMLの並びを整えたうえで、実際の画面をTabキーで操作して確認します。
見た目と操作の流れをそろえることが、利用者を迷わせないページ設計につながります。


当社では、ウェブアクセシビリティを簡単に導入できるUUU ウェブアクセシビリティウィジェットツールを提供しています。
アクセシビリティ向上にご興味がある方は、詳細をご覧ください。

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)