要約
すべての入力フォームとカスタムコントロールには、その目的を明確に説明するラベルを付けます。
テクニック
-
入力フォームにラベルを付けます。[[WCAG-3.3.2]]
-
期待される値の説明を提供します。[[WCAG-3.3.2]]
-
個々のコントロールにラベルを付けます。[[WCAG-4.1.2]]
-
コントロールのグループにラベルを付けます。[[WCAG-4.1.2]]
例
label
の関連付けfor
属性は、ラベルが記述する要素のIDを参照するために使用されます。 for
属性を使用すると、ラベルは要素の前または後のどこにでも付けられます。
<tr>
<td>
<input type="text" id="name"/>
</td>
<td>
<label for="name">Full name</label>
</td>
</tr>
label
のラッピングlabel
に、入力/コントロールとラベルの両方を組み込める場合には for
属性は省略します。
<label>
<input type="text" id="name"/>
Full name
</label>
fieldset
を使用するlegend
要素で、コントロール/入力のセットのラベルを提供します。
<fieldset>
<legend>Accessibility Features</legend>
<label>
<input type="checkbox" name="a11yFeature"
value="alternativeText"/> Alternative text
</label>
<label>
<input type="checkbox" name="a11yFeature"
value="longDescription"/> Extended descriptions
</label>
…
</fieldset>
aria-labelledby
を使用して名前を識別するaria-labelledby
属性を、生年月日フィールドのセットの最初のinput
を参照するために使用します。これらの入力はラベルとして機能します。
<fieldset>
<legend>Birth Date</legend>
<select id="y" aria-labelledby="yr">
<input value="year" id="yr">Year</input>
…
<select>
<select id="m" aria-labelledby="mo">
<input value="month" id="mo">Month</input>
…
<select>
<select id="d" aria-labelledby="day">
<input value="day" id="day">Day</input>
…
<select>
</fieldset>
aria-labelledby
属性を、あいまいさを避けるために、アドレスタイプとフィールド名の両方を参照するために使用します。
<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>
各部分に目に見えるラベルがないため、 aria-label
属性を電話番号フィールドの各部分を識別するために使用します。
<fieldset>
<legend>Phone Number</legend>
<input type="text" id="country" aria-label="country code"/>
<input type="text" id="area" aria-label="area code"/>
<input type="text" id="local" aria-label="number"/>
</fieldset>
解説
入力フォームとカスタムスクリプトコントロールにアクセシブルな名前を付けることは、ユーザーがその目的を理解できるようにするために不可欠です。ラベルが提供されると、支援技術によって各コントロールの名前が処理され、ユーザーはそれぞれの目的をすぐに理解できるようになります。
ただし、フォームのレイアウト方法により、ユーザーに入力フィールドの説明ラベルが表示される前にそのフィールドに到達してしまったり、フィールドよりかなり前にラベルが表示されてしまうことはよくあります。ラベルが提供されていない場合は、動的コンテンツを操作したりフォームに入力したりする操作がわかりにくくなることがあります。
HTMLには、ラベルをコントロールに関連付けるための二つのネイティブ要素が用意されています。
-
label
-
label
要素は、個々のコントロールのアクセシブルな名前を識別するために使用します。コントロールとそのラベルを囲むか(例 1を参照)、コントロールのIDを参照するfor
属性を追加できます(例 1を参照)。 -
fieldset
-
fieldset
要素は、関連するコントロールのセットをグループ化するために使用します。子のlegend
要素にはラベルを付与できます。(例 3 を参照)。
これらのネイティブメソッドには二つの短所があります。一つは、単一のラベルしか付けられないこと、もう一つは、ラベルがページの表示部分にある必要があり、テキストがlabel
要素によってキャプチャされることです。より複雑なケースは、次のARIA属性で対応できます。
関連リンク
- HTML —
label
要素 - HTML —
fieldset
要素 - ARIA — aria-label(プロパティ)
- ARIA — aria-labelledby(プロパティ)