本文へ移動
easeweb
ご相談
トピックを検索

分割した欄それぞれに名前がない日付や電話番号の入力欄

生年月日を3つのドロップダウンで尋ねるとき、ラベルが最初の欄にしか結び付いていないと、スクリーンリーダーは月と日の欄を名前なしで読み上げてしまう

WCAG 2.2
SC 1.3.1ASC 3.3.2ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <label for="dob-year">
アクセシビリティの問題を示した図: 全盲:05は月? 日?
01

問題

スクリーンリーダーの利用者には月と日の欄が名前のないドロップダウンとして聞こえ、3つとも数字が入ると、どれが月の欄かを示すものが画面からなくなる

02

試してみる

Tabキーで生年月日の欄を順に移動し、それぞれの欄が何と読まれるか聞いてみましょう

日付は選択済みです。フォームの下で、各欄が名前付きで読まれるかを確かめてから、行を見てください。どれが月の欄でしょうか。

問題あり 修正できますか?

問題3つのドロップダウンの上に1つのラベル
/ /

スクリーンリーダーの読み上げ:

(Tabで生年月日へ移動)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

すべての欄に名前を付け、全体のラベルを全部の欄に結び付ける

修正前
問題3つのドロップダウンの上に1つのラベル
<label for="dob-year" class="field-label">生年月日</label><div class="date-parts">  <select id="dob-year" name="dob-year">    <option value="">年</option>    <option>2026</option>    …  </select>  /  <select name="dob-month">    <option value="">月</option>    <option>01</option>    …  </select>  /  <select name="dob-day">    <option value="">日</option>    <option>01</option>    …  </select></div>
問題点3点

最初のドロップダウンには「生年月日」という名前があります。問題はそれ以外です。

  • 月と日のドロップダウンには名前がなく、スクリーンリーダーは「コンボボックス」と値しか読みません。
  • 3つをまとめるものがないため、月や日の欄で「生年月日」は読まれません。
  • 「年」「月」「日」の文字は最初の選択肢にしかなく、値を選ぶと消えます。
修正後

Fieldsetと欄ごとのラベル

<fieldset class="date-parts">  <legend class="field-label">生年月日</legend>  <div class="date-part">    <label for="dob-year">年</label>    <select id="dob-year" name="dob-year">      <option value="">年</option>      <option>2026</option>      …    </select>  </div>  <div class="date-part">    <label for="dob-month">月</label>    <select id="dob-month" name="dob-month">      <option value="">月</option>      <option>01</option>      …    </select>  </div>  <div class="date-part">    <label for="dob-day">日</label>    <select id="dob-day" name="dob-day">      <option value="">日</option>      <option>01</option>      …    </select>  </div></fieldset>
修正の手順4ステップ
  1. 行をfieldsetにし、3つのドロップダウンを1つのグループにします。
  2. 「生年月日」をそのlegend、つまりグループの名前にします。フォーカスがグループに入ると、スクリーンリーダーは「生年月日、グループ、年、コンボボックス、1990」のように読みます。
  3. 各ドロップダウンにidと、見えるlabel(年、月、日)をそれぞれ付けます。値を選んだ後も画面に残り、音声操作で「月をクリック」と話せるようになります。
  4. 斜線は外します。斜線が示していたことは、ラベルが言葉で示します。

これで修正前の例は直り、1.3.1、3.3.2、4.1.2を満たします。英国政府のGOV.UKの日付入力(Date input)や、米国政府のUS Web Design SystemのMemorable dateと同じ、各欄の上にラベルを置く形です。

この方法を選ぶ理由:まずHTMLの要素を使う

混同しやすいもの
04

デザインの案

欄を分けても、どの欄にも言葉を残す

同じ生年月日を3通りに描きました。月と日は入力済みで、年は空です。それぞれをTabで移動して年を入力してみてください。2つはどの欄にも名前が残り、1つは入力するにつれて名前が消えます。

デザインファイルで

  • すべての欄を埋めた状態も描き、どの欄にも名前が見えるか確かめる。
  • 質問は欄の上に一度だけ、まとまりの見出しとして書く。
  • 欄は利用者が書き慣れた日付の順に並べ、順番にかかわらず名前を付ける。
  • 各欄のフォーカスの枠と、誤った1つの欄だけのエラー表示を描く。
  • ラベルの色の横にコントラスト比を書く。4.5:1以上が必要(1つ目の例では9.46:1)。

合格

  • 生年月日
    枠線の切れ目に置いたラベル 3つの枠付きの欄の、上の枠線の切れ目に名前を置きます。白地に13pxの#4a4541で9.46:1です。空でも入力後も名前はそこにあり、ラベルが動く必要はありません。1pxの#8f8882の枠線は3.49:1です。
  • 生年月日
    1つの枠を区切り、各区画に名前 3つの欄を、細い線で区切った淡い#f6f4f2の1つの枠として描き、各区画の上部に小さな名前(13pxの#4a4541、8.63:1)、その下に値を置きます。1つの答えに見えながら、どの部分にも名前があります。フォーカスの枠は区画ごとに付きます。

不合格

  • 生年月日
    同じ枠に「YYYY」「MM」「DD」だけWCAG 3.3.2 同じ枠の各区画に、灰色の「YYYY」「MM」「DD」(#5c5650、6.60:1)を置くだけで、名前はありません。数字を入力すると文字は消え、埋まった区画には05と12が並ぶだけで、どちらが月かを示すものが残りません。
05

修正の確認

4項目、マウス不要

確認方法: キーボード、スクリーンリーダー、拡大表示

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。共通の日付コンポーネントを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。スクリーンリーダーはフォーカスがグループに入ったときにグループの名前を読むため、下からShift + Tabキーで戻ると、年の欄ではなく日の欄で読まれます。スクリーンリーダーによっては、欄ごとに繰り返し読むこともあります。このガイドが扱うのは、いくつかの部分に分けて尋ねる日付です。ワンタイムコードのように1文字ずつ欄を分けた値は、貼り付けられないワンタイムコードの入力欄で扱います。1つの設問の下に並ぶラジオボタンやチェックボックスは、設問名がないラジオボタンとチェックボックスのグループで扱います。実際に使用する支援技術で、フォーム全体を確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る