要約
視覚的な表現に頼らずに、フォームが理解しやすく操作しやすいようにします。
テクニック
-
フォームコントロールの使用方法についてラベルを付け、説明を提供します。[[WCAG-3.3.2]]
-
チェックボックスやラジオボタンなどの関連するコントロールのセットをグループ化します。[[WCAG-1.3.1]]
-
必須のフォームフィールドを識別します。[[WCAG-3.3.2]]
-
フォーム入力エラーを特定して説明します。
解説
フォームを効果的に使用するための最大の障害の 1 つは、フォームのレイアウトを理解し操作することです。ユーザーを支援するために、フォームコントロールには常に label
要素を使用してラベルを明確に付けてください。
<label id="label" for="fname">First name:</label>
<input type="text"
id="fname"
name="first-name"/>
for
属性は、ラベルをそのコントロールに明示的に関連付けるために使用されます。 label
にコントロールが含まれている場合でも、この属性を含める必要があります。
<label id="label" for="q1a">
<input type="radio"
id="q1a"
name="q1-answer"/> a. Apples
</label>
注記
フォームコントロールがlabel
によって識別されない場合は、コントロールのaria-labelledby
属性を使用して、ラベルを含む要素を識別します。
追加の指示(テキスト制限や文字制限など)を含める場合は、ラベル内にそれらを含めて、ユーザーがすぐに情報を利用できるようにしてください。これが不可能な場合は、追加の指示を含む要素を識別するコントロールにaria-describedby
属性を追加します。
<label for="uname">User name:</label>
<input type="text"
id="uname"
name="username"
aria-describedby="req" />
<span id="req">
User names must be between 8 and 16 characters in
length and contain only alphanumeric characters.
</span>
視覚的な手がかりがない場合でも支援技術を使用するユーザーが認識できるように、必須フィールドには必ず HTML5 のrequired
属性を付加する必要があります。
<input type="text"
id="uname"
name="username"
aria-describedby="req"
required="required"
aria-required="true"/>
注記
すべての支援技術が新しい HTML5 属性を認識するとは限らないため、 aria-required
属性を含めることが推奨されます。
検証
フォームにユーザーによる修正が必要な無効なデータが含まれている場合、各フィールドにaria-invalid
属性を追加することで、支援技術によってフィールドをすばやく識別してユーザーをそのフィールドに移動できるようにします。
if (country.value == 'US' && zip.value = '') {
zip.setAttribute('aria-invalid', true);
}
else {
zip.setAttribute('aria-invalid', false);
}
デフォルトでは、フォーム要素にaria-valid
をつけないでください。ユーザーがフォームを送信するまで、フォーム内のフィールドは有効でも無効でもありません。
すべてのユーザーの体験向上のため、フォームフィールドに、シンプルな構文で検証できる新しい HTML5の pattern
属性を使用することを検討してください。ユーザーは、送信するまで待つ必要がなく、問題があればすぐに警告されます。 pattern
検証を使用する場合は、要件を説明するためにtitle
属性も必ずつける必要があります。ユーザー名フィールドでは、次のように文字数と文字の種類を制限できます。
<input type="text"
id="uname"
name="username"
aria-labelledby="username-label"
pattern="[A-Za-z0-9]{8,16}"
title="User names must be 8 to 16 alphanumeric characters"
required="required"
aria-required="true" />