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

キーボードで選べず、読み上げもされない座席表

座席がクリックにしか反応しない空のdivか名前のないボタンで、空席・選択中・予約済みの違いも色だけで示している

WCAG 2.2
SC 1.4.1ASC 2.1.1ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <div class="seat taken"></div>
アクセシビリティの問題を示した図: 全盲:空いている席はどこ?
01

問題

キーボード利用者は座席を選べず、スクリーンリーダー利用者にはどれがどの座席か、空いているかが分からず、赤と緑を見分けにくい人には空席と予約済みの区別がつかない

02

試してみる

キーボードだけで、C列の隣り合う空席を2つ選んでみましょう

  • 問題1: Tabキーを押します。フォーカスはすべての座席を飛ばして「次へ」へ進み、どの座席も読まれません。シミュレーションをオンにすると、空席と予約済みが同じように見えます。

  • 問題2: 同じ座席をボタンにしただけです。Tabは各座席に止まりますが、どの座席も「ボタン」としか読まれず、選んでも色が変わるだけです。

  • 修正を適用します。 チェックボックスでは、Tabで空席を順に移動し、Spaceキーで選べます。グリッドでは、Tabを1回押すと座席表に入り、矢印キーで座席と列の間を移動できます。

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

座席を選択

A〜B列 $10・C〜D列 $14

  • 空席
  • 選択中
  • 予約済み
スクリーン
A
B
C
D

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

(Tabで座席へ移動)

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

03

修正方法

座席に名前を付け、キーボードで選べるようにし、状態に印を付ける

修正前

クリックに反応するdivの座席

<h2>座席を選択</h2><p>A〜B列 $10・C〜D列 $14</p><ul class="legend">  <li>    <span class="key"></span>    空席  </li>  <li>    <span class="key chosen"></span>    選択中  </li>  <li>    <span class="key taken"></span>    予約済み  </li></ul><div class="seat-map">  <div class="screen">スクリーン</div>  …  <div class="row">    <span class="row-name">C</span>    <div class="seat"></div>    <div class="seat"></div>    <div class="seat taken"></div>    <div class="seat taken"></div>    <div class="seat"></div>    <div class="seat"></div>  </div>  …</div><button type="button" class="continue">次へ</button>
問題点4点
  • 座席は click にしか反応せず、フォーカスも受けないため、Tabは座席表を飛ばし、キーボードではどの座席も選べません。
  • 座席は空のdivのため、スクリーンリーダーは列の文字を読むだけで、その間には何も読みません。
  • 空席・予約済み・選択中の区別はクラスだけで、支援技術には伝わりません。
  • 画面上でも、違いは塗りの色だけです。
修正後

座席ごとのチェックボックス

<h2>座席を選択</h2><p>A〜B列 $10・C〜D列 $14</p><ul class="legend">  <li>    <span class="key"></span>    空席  </li>  <li>    <span class="key chosen"></span>    選択中  </li>  <li>    <span class="key taken"></span>    予約済み  </li></ul><div class="seat-map">  <div class="screen">スクリーン</div>  …  <div class="row">    <span class="row-name">C</span>    <label class="seat">      <input type="checkbox" name="seats" value="C1">      <span class="visually-hidden">C列1番、$14</span>    </label>    <label class="seat">      <input type="checkbox" name="seats" value="C2">      <span class="visually-hidden">C列2番、$14</span>    </label>    <label class="seat">      <input type="checkbox" name="seats" value="C3" disabled>      <span class="visually-hidden">C列3番、$14</span>    </label>    <label class="seat">      <input type="checkbox" name="seats" value="C4" disabled>      <span class="visually-hidden">C列4番、$14</span>    </label>    <label class="seat">      <input type="checkbox" name="seats" value="C5">      <span class="visually-hidden">C列5番、$14</span>    </label>    <label class="seat">      <input type="checkbox" name="seats" value="C6">      <span class="visually-hidden">C列6番、$14</span>    </label>  </div>  …</div><button type="button" class="continue">次へ</button>
修正の手順5ステップ
  1. 各座席をlabelの中のチェックボックスにし、列、番号、料金を伝える隠したテキストを付けます。Tabが止まり、Spaceキーで選べ、スクリーンリーダーは「C列5番、$14、チェックボックス、チェックなし」と読み上げます。
  2. 予約済みの座席のチェックボックスは無効にします。Tabキーでは飛ばされますが、スクリーンリーダーで座席表を読み進めると「使用不可」や「淡色表示」と読み上げられます。
  3. appearance: none でチェックボックスそのものに座席を描き、色は :checked と :disabled から付けます。見た目と読み上げが食い違うことはありません。
  4. 座席にも凡例にも、選択中にはチェック、予約済みには×を描きます。枠線で描くため、Windowsのコントラスト テーマでも消えません。
  5. スクリプトは削除します。状態はチェックボックス自身が持ち、フォームの中に置けば、選んだ座席の値はコードなしで送信されます。

これで二つの修正前の例はどちらも直り、達成基準1.4.1、2.1.1、4.1.2を満たします。空席はすべてTabの移動先になり、列ごとに読む順にたどれます。

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

04

修正の確認

5項目、マウス不要

確認方法: キーボード、スクリーンリーダー、色覚シミュレーション、強制配色

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。座席表、その部品、ライブラリーを変更した際は、再度確認します。

スクリーンリーダーでの aria-pressed、role="grid", a button in each cellの読まれ方

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。グリッドのスクリプトは最小限の例で、Page UpとPage Downや、列の文字で列へ移動する方法はありません。大きな会場では、それらが必要になることがあります。NVDAでは、グリッドのセルの中のリンクへ矢印キーで移動するとフォーカスモードが解除され、矢印キーが読み上げのカーソルを動かすようになると報告されています。このボタンでも同じことが起きると、NVDAの利用者はInsert + Spaceで矢印キーを取り戻す必要があるため、特にNVDAでグリッドを確かめてください。映画館の一覧のように、会場を街の地図に示すものは、場所が地図でしか分からない店舗マップで扱っています。セルを選ぶのではなく編集するグリッドはキーボードでセルを移動・編集できないデータグリッドで、フォームの中の手作りのチェックボックスはキーボードでもスクリーンリーダーでも使えないカスタムチェックボックスで扱っています。上映を選んでから支払うまでの一連の操作全体を、対象とする支援技術でテストしてください。

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

EaseWebのサービス

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

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

サービス内容を見る