要約
タブ順序をコンテンツ内の論理的な順序と一致させ、すべてのフォームおよびスクリプトコントロールにアクセスできるようにします。
テクニック
-
タブ順序を論理的な順番にします。[[WCAG-2.4.3]]
例
次の例は、配送先住所と請求先住所を並べて配置するためのテーブルレイアウトの一部を示しています。フォームフィールドから次のフォームフィールドへの論理的な順序を保証するためにtabindex
属性を使用しています。
<table>
<tr>
<td>
<span id="shipping">Shipping Address</span>
</td>
<td>
<span id="billing">Billing Address</span>
<label>
<input type="checkbox" id="bill-sameas" tabindex="8"/>
Use shipping address for billing
</label>
</td>
</tr>
<tr>
<td>
<span class="label" id="str">Street</span>
<input type="text" id="ship-street"
aria-labelledby="shipping str" tabindex="1"/>
</td>
<td>
<span class="label">Street</span>
<input type="text" id="bill-street"
aria-labelledby="billing str" tabindex="9"/>
</td>
</tr>
<tr>
<td>
<span class="label" id="city">City</span>
<input type="text" id="ship-city"
aria-labelledby="shipping city" tabindex="2"/>
</td>
<td>
<span class="label">City</span>
<input type="text" id="bill-city"
aria-labelledby="billing city" tabindex="10"/>
</td>
</tr>
…
</table>
次の例では、スクリプト化された画像ボタンをタブ順序に組み込むためにtabindex
属性を0
に設定しています。
<img src="controls/start.png"
id="start"
role="button"
tabindex="0"
alt="Start"/>
次の例では、スクリプトによってポップアップ ダイアログボックスが開かれるまで、ユーザーがタブキーでポップアップ ダイアログボックスに移動できないように、 tabindex
属性を-1
に設定しています。
<div role="dialog" aria-modal="true" aria-label="Results"
tabindex="-1" >
…
</div>
解説
キーボードのタブボタンは、ハイパーリンク、スクリプトコントロール、フォームなどのインタラクティブな要素間を移動するためのショートカットを提供します。ユーザーがタブキーを押したときにこれらの要素がフォーカスを取得する順序は、タブ順序と呼ばれます。
デフォルトでは、ネイティブHTMLコントロール(例:a
、button
、input
)は、マークアップで記載されている順序に従ってタブキーによるフォーカスを受け取ります。多くの場合、これで意味のあるタブ順序を提供できますが、複雑なレイアウトやカスタムコントロールのスクリプトがあると、順序の問題が発生する場合があります。
たとえば、フォームを二つの横並びの列としてレイアウトするためにテーブルレイアウトを使用することがあります(例1を参照)。この場合、一つのフィールドから次のフィールドにタブ移動すると、ユーザーは一つの列を上から下に移動してから次の列に移動するのではなく、二つの列間(つまり、各行の一つのセルから次のセル)で移動してしまいます。
同様に、スクリプト コントロールを作成した場合、ブラウザーと支援技術はタブキーを介して要素にアクセスできないので、そのタブ順序を明示的に指定する必要があります。
このような問題を解決するには、 tabindex
属性を使って、要素のデフォルトのタブ順序を変更したり、またはタブ順序に要素を追加します。属性の値は、次のいずれかでなければなりません。
-
-1
— 値-1
は、要素をタブ順序から除外するために使用されます。この値は、スクリプトによって要素がフォーカス可能になるような場合に最もよく使用されます。任意の負の数を使用できますが、効果は同じです(つまり、優先順位や順序は付与されません)。 -
0
— 値0
は、マークアップ内の位置に応じて要素をタブ順序に配置するために使用されます。この値を使うと、フォーカス可能なすべての要素に対して番号付きのシーケンスを作成しなくてすむので、スクリプトコントロールをタブ順序に追加するような場合に最もよく使用されます。 - 任意の正の数値— 正の数値が使用される場合、その数値はコントロールに移動する順序を示します。数値
1
はタブ順序の最初のコントロールを示し、数値2
は二番目のコントロールを示します。以下同様です。順序のギャップは無視されます(つまり、間に値がない場合、フォーカスは1
から10
に移動します)。順序付けられたすべてのコントロールを移動した後、明示的なtabindex
値を持たないコントロールに移動します。
一般的に、フォーカス可能な要素がマークアップ内で正しい順序になっているようにして、正のtabindex
値を使用しなくても良いようにするのが最善です。シーケンスの作成は簡単な作業のように見えるかもしれませんが、これを行うと予期しない結果が生じることがよくあります。たとえば、ファイルの末尾にあるフォームフィールドに対してタブ順序を作成する必要がある場合、フォームの前のすべてのフォーカス可能な要素(すべてのハイパーリンクなど)にtabindex
値が割り当てられていないと、ユーザーは最初にTabキーを押したときにフォームに移動されてしまいます。並べ替えられたフォーカス可能な要素の長いシーケンスを維持することも面倒です。
関連リンク
- HTML —
tabindex