要素のtabindexはゼロより大きくしないでください
修正方法
値が 0 より大きい tabindex
の使用を避ける主な方法は二つあります。一つ目は、 tabindex
の値を 0 に変更することです。これは、ユーザーが要素間をタブ移動する際の順序が変わる可能性があることに注意してください。二つ目は、tabindex
を全体的に削除し、意図した順序でユーザーが要素間をタブ移動できるよう、ページの構成を調整することです。
三つ目として、tabindex を tabindex="-1"
に変更し、JavaScript を追加する方法があります。これは JavaScript を使って "-1" を "0" に変更するまで、要素をタブ順序から除外します。
tabindex="0"
あるいは tabindex="-1"
+ JavaScript を使ってアイテムをタブ順序に含める
通常の条件では、リンクとフォーム要素のみがタブフォーカスを受け取ることができます。ほとんどの場合、他のアイテム (例えば <p>
、<th>
、<span>
など) はタブフローの中に含めないようにしたほうが良いですが、複雑でインタラクティブな JavaScript ウィジェットなどの例外的な状況では、通常タブフォーカスを受け取らないアイテムをタブフローの中に含めることに意味がある場合があります。これを実施するには、2つの方法があります:
tabindex="0"
-
tabindex="-1"
+ JavaScript
方法 | 効果 |
---|---|
tabindex="0" |
アイテムを通常のタブフローに追加する。 |
tabindex="-1" + JavaScript |
JavaScript のメソッドがタブフォーカスを許可し、値を変更する (例:tabindex 値を0もしくは正数に変更する) まで、アイテムを通常のタブフローから除外する |
選択する修正方法に関わらず、最終的なタブ順序がユーザーの観点から合理的なパターンに従っていることを確認してください。タブ順序は見た目の順序ではなく、DOM 内の要素の順序によって決定されることに注意してください。デフォルトのタブ順序 = ソースコードの順序 = スタイルを切った時の順序であることを忘れないようにしましょう。
注意: 次の CSS スタイルは要素の視覚的な位置を変更できるため、混乱しやすいタブ順序を作る可能性があります:
position: absolute;
position: relative;
float: left;
float: right;
なぜ重要なのか
0 より大きい値の tabindex
を使用すると、解決するのと同じくらいの問題が発生する可能性があります。これは予期せぬタブ順序を作るため、ページの直感性が低下し、特定の要素が完全にスキップされるように見えることがあります。
(1 かそれ以上の値を持った) tabindex
が起こす一部の問題は次の通りです:
- 予期せぬタブ順序:ユーザーから見ると、
tabindex
は予期しない方法でデフォルトのタブ順序を変更するため、混乱する可能性があります。 - アイテム全体がスキップされたように見える:アイテムはタブ順序の中で、一度しか現れません。ユーザーが
tabindex
のついたアイテムを通り過ぎて web ページの残りの部分に進んだ場合、いずれユーザーはtabindex
のついたアイテムの位置に到達しますが、タブ移動の過程でこれらのリンクは、ユーザーが最初のタブサイクルの開始時にタブ移動済みのため、スキップされます。誤ったタブ順序は、ユーザーがアイテムにアクセスできないともどかしく、また、再度それらのリンクにアクセスするには、ページ内の一連のリンク全体を一巡する必要があることを知らないかもしれません。 tabindex
がついたすべてのアイテムはtabindex
がついていないアイテムより先にタブ移動します。最初のアイテムとページ後半のセクションのタブ順序を変更したい場合、変更されたセクションの終わりまでのすべてのアイテムのtabindex
値を設定しなければならなくなります。極端には、ページにリンクが20個あり、それらのリンクの1つのtabindex
をtabindex="100"
にすると、たとえページ内にあるリンクの数が 100 個以下の場合でも、ユーザーは最初にそのリンクにタブ移動します。ページの後半にあるセクションのタブ順序を調整する方法は存在しないため、そのセクションの前にあるすべてのリンクに手動でタブ順序を指定する必要があります。
ルールの説明
tabindex
属性は、一部の要素が完全にスキップされるように見せる予期しないタブ順序を防ぐため、0 より大きい値を持ってはなりません。
仕組みについて (簡単に言うと)
0 より大きい明示的な tabindex
属性が使用されていないことを確認します。