要素のタブインデックスは0より大きくすべきではありません
修正方法
0より大きい値を持つ tabindex
の使用を回避するには、主に2つの方法があります。最初の方法は、 tabindex
を0に変更することです。これにより、ユーザーが要素間をタブ移動する順序が変わる可能性があることに注意してください。2番目の方法は、 tabindex
を完全に削除し、ページの構造を変更して、ユーザーが要素間をタブ移動したときに、当初希望した順序で要素に到達できるようにすることです。
3番目の方法は、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
を使用すると、解決される問題と同じだけ問題が発生する可能性があります。ページの直感性が低下し、特定の要素が完全にスキップされているように見える場合があり、予期しないタブ順序が作成されます。
tabindex
(値が1以上) によって発生する問題の一部を以下に示します。
-
予期しないタブ順序:
tabindex
は既定のタブ順序を予期しない方法で変更し、ユーザーの方向感覚が失われる可能性があります。 -
項目が完全にスキップされているように見える場合があります: 項目はタブ順序に1回だけ表示されます。ユーザーが
tabindex
項目をタブキーで過ぎてWebページの残りの部分に進むと、ある時点でユーザーはtabindex
項目の場所に到達しますが、タブ プロセスではこれらのリンクはスキップされます。これは、ユーザーがサイクルの始めにすでにこれらのリンクをタブで通過しているためです。タブの順序が間違っていると、ユーザーが項目にアクセスするのが困難になり、それらのリンクに再度アクセスするにはページ上のリンク セット全体を循環する必要があることに気付かない可能性があります。 -
すべての
tabindex
項目は、tabindex
以外の項目の前にタブ移動されます。最初の項目と、ページ内の後のセクションのタブ順序を変更する場合は、変更されたセクションの最後までのすべての項目にtabindex
値を設定する必要があります。少し極端な例ですが、ページに20個のリンクがあり、そのうちの1つのリンクのtabindex
をtabindex="100"
に設定すると、ページ上のリンクが100個未満であっても、ユーザーは最初にそのリンクにタブ移動します。そのセクションの前のすべてのリンクのタブ順序を手動で設定しない限り、ページの後のセクションのタブ順序を変更する方法はありません。
ルールの説明
一部の要素が完全にスキップされているように見える予期しないタブ順序を防ぐため、 tabindex
属性の値は0より大きくしてはなりません。
仕組みについて (簡単に言うと)
tabindex
0より大きい明示的な属性が決して使用されないようにします