Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【HTML Living Standard】tabindex属性の使い方

tabindex属性の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

tabindexプロパティは、HTML要素がキーボードナビゲーションにおいてフォーカスを受けられるかどうか、およびそのフォーカス順序を制御するためのグローバル属性であるプロパティです。このプロパティは、キーボードのみでウェブページを操作するユーザー、特にアクセシビリティを考慮する上で非常に重要です。

tabindexには整数値を設定します。値が負の値(例: -1)の場合、その要素はタブキーによるナビゲーションからは除外されますが、JavaScriptなどのプログラムからフォーカスを設定することは可能です。これは、視覚的には存在するが、通常のタブ順序ではスキップしたい要素に利用されます。

値が 0 の場合、その要素はタブキーでのナビゲーション順序に含まれます。このときのフォーカス順序は、HTMLドキュメント内での要素の出現順序に従います。通常、ボタンやリンクなどのインタラクティブな要素は自動的にフォーカス可能ですが、divspan などの非インタラクティブな要素にプログラムでフォーカスを当てたい場合に tabindex="0" を設定します。

値が正の値(例: 1 以上)の場合、その要素はタブキーでのナビゲーション順序に含まれ、tabindexの値が小さい要素から順にフォーカスされます。同じ値を持つ複数の要素がある場合、それらの要素間ではドキュメント内での出現順序が適用されます。この機能は、特定の要素に優先的にフォーカスさせたい場合に利用できますが、通常の順序を乱す可能性があるため、慎重な利用が推奨されます。

tabindexプロパティを適切に使用することで、キーボード操作のみでウェブサイトを利用するユーザーの利便性が大幅に向上し、ウェブコンテンツ全体のアクセシビリティが向上します。

公式リファレンス: HTML tabindex global attribute

構文(syntax)

1<button tabindex="0">Example Button</button>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

HTML tabindex属性でフォーカス操作を制御する

1<!DOCTYPE html>
2<html lang="ja">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>tabindex属性のサンプル</title>
7    <style>
8        /* フォーカスされた要素の視認性を高めるためのスタイル */
9        *:focus {
10            outline: 2px solid blue;
11            background-color: #e0f2f7;
12        }
13        div {
14            margin: 10px 0;
15            padding: 10px;
16            border: 1px solid #ccc;
17        }
18        button, a, input {
19            margin: 5px 0;
20            display: block;
21        }
22    </style>
23</head>
24<body>
25    <p>Tabキーを押して、要素間のフォーカス移動を確認してください。</p>
26
27    <!-- デフォルトでフォーカス可能な要素 -->
28    <a href="#">リンク要素 (デフォルトでフォーカス可能)</a>
29    <button type="button">ボタン要素 (デフォルトでフォーカス可能)</button>
30    <input type="text" placeholder="テキスト入力 (デフォルトでフォーカス可能)">
31
32    <h2>tabindex="0" の例</h2>
33    <!-- 通常フォーカスできない要素をタブ順序に含める -->
34    <div tabindex="0">
35        この DIV 要素は <code>tabindex="0"</code> が設定されているため、Tabキーでフォーカス可能です。
36    </div>
37
38    <h2>tabindex="-1" の例</h2>
39    <!-- 通常フォーカス可能な要素をタブ順序から除外する -->
40    <button type="button" tabindex="-1">
41        このボタンは <code>tabindex="-1"</code> が設定されているため、Tabキーではスキップされます。
42        (JavaScriptなどでプログラム的にフォーカスを当てることは可能です)
43    </button>
44</body>
45</html>

tabindex属性は、HTML要素がキーボードのTabキーでフォーカス可能であるかどうか、またそのフォーカス順序を制御するためのグローバル属性です。これは、キーボード操作でWebサイトを利用するユーザー(特にアクセシビリティを必要とする方々)にとって非常に重要です。この属性には引数や戻り値はありません。

サンプルコードでは、主に二つのtabindexの値が示されています。

まず、tabindex="0"を設定すると、通常はTabキーでフォーカスできない要素(例えば、単なる<div>要素など)もフォーカス可能になります。これにより、キーボード操作でそれらの要素にアクセスできるようになります。この場合、フォーカス順序はHTML文書内での要素の出現順序に従います。

次に、tabindex="-1"を設定すると、通常はTabキーでフォーカス可能な要素(例えば、ボタンやリンクなど)であっても、Tabキーでのフォーカス順序からは除外されます。つまり、Tabキーを押してもその要素はスキップされます。ただし、JavaScriptなどのプログラムを使って、明示的にこの要素にフォーカスを当てることは可能です。

このようにtabindex属性を使用することで、Webページのキーボードナビゲーションをより柔軟に、そしてユーザーにとって使いやすく調整することができます。

tabindexは、キーボード操作による要素へのフォーカス順序を制御する重要なグローバル属性です。tabindex="0"を設定すると、本来Tabキーでフォーカスできない要素もドキュメントの出現順に沿ってフォーカス可能になります。一方、tabindex="-1"は、本来フォーカス可能な要素をTabキーによる順序から除外しますが、JavaScriptなどのプログラムからはフォーカスを当てられます。アクセシビリティを損なわないため、正の整数値(例:tabindex="1")の使用は極力避け、HTMLの自然な要素配置順序を尊重してください。不適切な使用は、キーボード操作を主とするユーザーの利便性を著しく低下させる可能性があるため、実装後は必ずキーボードでの動作を確認しましょう。

HTML tabindex 効かないときの動作例

1<!DOCTYPE html>
2<html lang="ja">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>tabindex 属性の動作確認</title>
7    <style>
8        /* フォーカスされた要素を視覚的に強調するためのスタイル */
9        *:focus {
10            outline: 2px solid blue;
11            outline-offset: 2px;
12        }
13        div, p, button, a {
14            margin: 10px;
15            padding: 10px;
16            border: 1px solid #ccc;
17            display: inline-block; /* インライン要素のように横並びにする */
18        }
19    </style>
20</head>
21<body>
22    <h1>tabindex 属性の動作確認</h1>
23    <p>キーボードの「Tab」キーを押して、要素間のフォーカス移動を確認してください。</p>
24    <p>「tabindexが効かない」と感じる場合の動作例を含みます。</p>
25
26    <h2>デフォルトでフォーカス可能な要素</h2>
27    <!-- button要素はデフォルトでフォーカス可能です。 -->
28    <button>ボタン (tabindexなし)</button>
29    <!-- tabindex="0": デフォルトのキーボードナビゲーション順序に含めます。
30         元々フォーカス可能な要素なので、設定しても動作は変わりません。 -->
31    <button tabindex="0">ボタン (tabindex="0")</button>
32    <!-- tabindex="-1": キーボードナビゲーションから除外します。
33         タブキーではフォーカスされなくなりますが、JavaScriptなどからプログラム的にフォーカスできます。
34         これが「tabindexが効かない」と感じられる一因かもしれません。 -->
35    <button tabindex="-1">ボタン (tabindex="-1", タブでフォーカス不可)</button>
36    <a href="#link" role="button">リンク (tabindexなし)</a>
37    <a href="#link" role="button" tabindex="0">リンク (tabindex="0")</a>
38    <a href="#link" role="button" tabindex="-1">リンク (tabindex="-1", タブでフォーカス不可)</a>
39
40    <h2>デフォルトでフォーカスできない要素</h2>
41    <!-- div要素はデフォルトでフォーカスできません。 -->
42    <div>DIV要素 (tabindexなし, タブでフォーカス不可)</div>
43    <!-- tabindex="0": デフォルトでフォーカスできない要素をキーボードナビゲーションに含めます。
44         この設定により、タブキーでフォーカスできるようになります。 -->
45    <div tabindex="0">DIV要素 (tabindex="0", タブでフォーカス可能)</div>
46    <!-- tabindex="-1": デフォルトでフォーカスできない要素に設定しても、キーボードナビゲーションからは除外されます。 -->
47    <div tabindex="-1">DIV要素 (tabindex="-1", タブでフォーカス不可)</div>
48
49    <h2>tabindex の順序指定 (推奨されない利用法)</h2>
50    <p>tabindexに正の整数を指定すると、その値が小さい順にフォーカスされます。しかし、HTMLの自然な順序を乱すため、アクセシビリティの観点から推奨されません。</p>
51    <!-- 自然な順序より先にフォーカスされます。小さい値から順にフォーカスされます。 -->
52    <button tabindex="3">ボタン 3</button>
53    <button tabindex="1">ボタン 1</button>
54    <button tabindex="2">ボタン 2</button>
55    <!-- tabindex="0" は、正の整数の要素の後に、自然な順序でフォーカスされます。 -->
56    <button tabindex="0">ボタン 0 (自然な順序)</button>
57    <!-- tabindexなしの要素は、tabindex="0" の要素の後に、自然な順序でフォーカスされます。 -->
58    <button>ボタン (tabindexなし, 自然な順序)</button>
59
60    <p>↑上記の要素をタブキーで順に移動すると、1 → 2 → 3 → 0 → (tabindexなし) の順にフォーカスされることが確認できます。</p>
61</body>
62</html>

HTMLのtabindex属性は、キーボードのTabキーを使ってWebページの要素間を移動する際のフォーカス順序を制御するグローバル属性です。この属性には引数がなく、属性値に指定する整数によってその挙動が変わります。

tabindex="0"を設定すると、元々キーボードでフォーカス可能な要素(ボタンやリンクなど)は、HTMLに記述された自然な順序でフォーカスされます。また、通常はフォーカスできない要素(divpなど)にtabindex="0"を設定すると、Tabキーでフォーカスできるようになります。

tabindex="-1"を設定した要素は、キーボードのTabキーによるフォーカス順序から完全に除外されます。そのため、Tabキーを押してもその要素は選択されません。これが「tabindexが効かない」と感じられる主な理由の一つですが、JavaScriptなどのプログラムからはこの要素に強制的にフォーカスを当てることが可能です。

tabindexに正の整数(例: tabindex="1", tabindex="2")を指定すると、その値が小さい順に要素がフォーカスされます。これにより、HTMLの自然なドキュメント順序とは異なる順番でフォーカス移動を強制できます。しかし、この方法はアクセシビリティの観点からユーザー体験を損なう可能性があるため、特別な事情がない限りは推奨されません。

tabindexを何も指定しない場合、ボタンやリンクのように元々フォーカス可能な要素は自然な順序でフォーカスされますが、divpのように元々フォーカスできない要素は、Tabキーではフォーカスされません。tabindex属性は、キーボードでの操作性を向上させ、すべてのユーザーがWebページを快適に利用できるよう、アクセシビリティを高める上で重要な役割を果たします。

tabindex属性は、キーボードのタブキーによる要素間のフォーカス移動順序を制御します。tabindex="0"は、通常フォーカスできないdivなどの要素をタブ移動の対象にしたり、デフォルトの順序でフォーカスさせたい場合に利用します。一方、tabindex="-1"を設定すると、その要素はタブキーでのフォーカス移動から除外されます。そのため、タブでフォーカスされない場合に「効かない」と感じることがありますが、JavaScriptなどからプログラム的にフォーカスすることは可能です。

また、tabindexに正の整数を設定すると、その値が小さい順にフォーカスされますが、HTMLの自然な順序を乱し、アクセシビリティを損ねるため強く非推奨です。極力避け、HTMLの記述順でフォーカス順序を制御することを心がけてください。

関連コンテンツ

関連IT用語