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

キーボードでは展開できない表の行

タスクの表で、サブタスクを開くには行の矢印をクリックするしかないため、キーボードでは開けず、スクリーンリーダーにはその行が開くことも伝わらない

WCAG 2.2
SC 1.3.1ASC 4.1.2ASC 2.1.1A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <span class="toggle"></span>
アクセシビリティの問題を示した図: 手の操作:サブタスクはどう見るの?
01

問題

キーボード利用者は表のタスクを開いてサブタスクにたどり着けず、スクリーンリーダー利用者には、どのタスクが開くのか、開いているのか、どの行がサブタスクなのかが伝わらない

02

試してみる

キーボードだけで「夏のセールを企画する」を開き、「メールマガジンの枠を押さえる」まで移動してみましょう

  • 問題1: Tabキーを押します。止まるのは表示中のタスクのリンクだけで、矢印には止まらないため、「夏のセールを企画する」を開けません。

  • 問題2: 同じ表に role="treegrid" を足しただけです。Tabキーは同じように2つの矢印を飛ばし、矢印キーを押しても何も起きず、下の欄では行の階層も、タスクが開いているかどうかも一度も読まれません。

  • 修正を適用します。 ボタンでは、Tabキーで各矢印に届き、Enterキーでタスクが開きます。ツリーグリッドでは、矢印キーで行を移動してタスクを開け、右矢印キーで行のセルへ入り、HomeとEndで端へ移動できます。

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

タスク

タスク担当者期限
春のカタログを公開するAna Ruiz3月14日
商品説明を書くBen Carter3月7日
商品写真を撮るDana Park3月10日
ドメインを更新するEli Novak3月20日
夏のセールを企画するChris Moreau4月2日
完了したタスク

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

(Tabで表へ移動)

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

03

修正方法

キーボードで行を開けるようにし、開閉の状態を伝える

修正前

クリックにしか反応しない矢印

<h2 id="tasks-title">タスク</h2><table class="tasks" aria-labelledby="tasks-title">  <thead>    <tr>      <th scope="col">タスク</th>      <th scope="col">担当者</th>      <th scope="col">期限</th>    </tr>  </thead>  <tbody>    <tr id="task-101" class="is-open">      <td>        <span class="toggle"></span>        <a href="/tasks/101">春のカタログを公開する</a>      </td>      <td>Ana Ruiz</td>      <td>3月14日</td>    </tr>    <tr class="subtask" data-parent="task-101">      <td>        <a href="/tasks/102">商品説明を書く</a>      </td>      <td>Ben Carter</td>      <td>3月7日</td>    </tr>    <tr class="subtask" data-parent="task-101">      <td>        <a href="/tasks/103">商品写真を撮る</a>      </td>      <td>Dana Park</td>      <td>3月10日</td>    </tr>    <tr>      <td>        <a href="/tasks/104">ドメインを更新する</a>      </td>      <td>Eli Novak</td>      <td>3月20日</td>    </tr>    <tr id="task-105">      <td>        <span class="toggle"></span>        <a href="/tasks/105">夏のセールを企画する</a>      </td>      <td>Chris Moreau</td>      <td>4月2日</td>    </tr>    <tr class="subtask" data-parent="task-105" hidden>      <td>        <a href="/tasks/106">割引を決める</a>      </td>      <td>Ana Ruiz</td>      <td>3月25日</td>    </tr>    <tr class="subtask" data-parent="task-105" hidden>      <td>        <a href="/tasks/107">メールマガジンの枠を押さえる</a>      </td>      <td>Ben Carter</td>      <td>3月28日</td>    </tr>  </tbody></table><a href="/tasks/completed">完了したタスク</a>
問題点3点
  • 矢印はフォーカスを受けないspanで、click にしか反応しないため、閉じたタスクのサブタスクにはキーボードで届きません。
  • タスクが開くことも、開いているかどうかも、マークアップのどこにも書かれていません。
  • 後に続く行がそのタスクのサブタスクであることも書かれていません。入れ子は余白でしかありません。
修正後

行にボタンを置き、サブタスクであることを名前で伝える

<h2 id="tasks-title">タスク</h2><table class="tasks" aria-labelledby="tasks-title">  <thead>    <tr>      <th scope="col">タスク</th>      <th scope="col">担当者</th>      <th scope="col">期限</th>    </tr>  </thead>  <tbody>    <tr id="task-101">      <td>        <button type="button" class="toggle" aria-label="サブタスク" aria-expanded="true"></button>        <a href="/tasks/101">春のカタログを公開する</a>      </td>      <td>Ana Ruiz</td>      <td>3月14日</td>    </tr>    <tr class="subtask" data-parent="task-101">      <td>        <a href="/tasks/102">商品説明を書く<span class="visually-hidden">、サブタスク</span></a>      </td>      <td>Ben Carter</td>      <td>3月7日</td>    </tr>    <tr class="subtask" data-parent="task-101">      <td>        <a href="/tasks/103">商品写真を撮る<span class="visually-hidden">、サブタスク</span></a>      </td>      <td>Dana Park</td>      <td>3月10日</td>    </tr>    <tr>      <td>        <a href="/tasks/104">ドメインを更新する</a>      </td>      <td>Eli Novak</td>      <td>3月20日</td>    </tr>    <tr id="task-105">      <td>        <button type="button" class="toggle" aria-label="サブタスク" aria-expanded="false"></button>        <a href="/tasks/105">夏のセールを企画する</a>      </td>      <td>Chris Moreau</td>      <td>4月2日</td>    </tr>    <tr class="subtask" data-parent="task-105" hidden>      <td>        <a href="/tasks/106">割引を決める<span class="visually-hidden">、サブタスク</span></a>      </td>      <td>Ana Ruiz</td>      <td>3月25日</td>    </tr>    <tr class="subtask" data-parent="task-105" hidden>      <td>        <a href="/tasks/107">メールマガジンの枠を押さえる<span class="visually-hidden">、サブタスク</span></a>      </td>      <td>Ben Carter</td>      <td>3月28日</td>    </tr>  </tbody></table><a href="/tasks/completed">完了したタスク</a>
修正の手順5ステップ
  1. 矢印を「サブタスク」という名前のHTML標準のボタンにします。Tabキーで届き、EnterキーとSpaceキーで、スクリプトがもともと待っているクリックとしてタスクを開けます。
  2. ボタンに aria-expanded を付け、クリックの処理で切り替えます。スクリーンリーダーは、タスク自身のリンクの直前で「サブタスク、ボタン、折りたたみ」や「展開」と読み上げます。
  3. 各サブタスクのリンクの最後に見えない言葉を加えます。Tabキーでたどり着いても、「タスク」の列を下へ移動しても「商品説明を書く、サブタスク」と読まれます。名前は画面上の言葉で始まったままなので、音声操作の利用者はその言葉で呼べます。
  4. 閉じたタスクの行には hidden を残し、Tabの順序から外します。開いたタスクの行はボタンのすぐ後に続くため、次のTabキーでその中を進みます。
  5. 表の見出しはそのまま残し、矢印はクラスではなく aria-expanded から描きます。

これで二つの修正前の例はどちらも直り、1.3.1、2.1.1、4.1.2を満たします。表のライブラリーには、すでにこの形で矢印を描くものもあります。たとえばElement Plusは、矢印を aria-expanded 付きのボタンとして出力します。

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

04

デザインの案

控えめに描いた行も、キーで開ける

サブタスクが開くタスクを5通りに描きました。それぞれをマウスで開いてから、マウスを使わずにTabで移動してみてください。3つはキーボードで開け、2つはマウスでしか開けません。

デザインファイルで

  • 開く行は、閉じた状態と開いた状態の2通りを、それぞれの向きの矢印とともに描く。
  • 矢印にフォーカスの枠を描き、ホバーしなくても矢印が見えるようにする。
  • 矢印の横に「サブタスク」のような名前を書く。スクリーンリーダーが読む名前になる。
  • タスクの下の行が子の行であることを、字下げだけでなく言葉でどう伝えるかを書く。

合格

不合格

05

修正の確認

5項目、マウス不要

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

5件中0件を確認済み

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

スクリーンリーダーでの aria-expandedの読まれ方

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。スクリプトは最小限の例で、ツリーグリッドにはPage UpとPage Down、選択、先頭文字での移動、必要なときのサブタスクの読み込みがありません。また、Tabキーを押すとどの行からでもグリッドの外へ出ます。パターンでは、同じ行に次のリンクがあれば、まずそこへ移ります。列のない、セクションとページのサイドバーはツリービューで、キーボードで開けず、階層も伝わらないツリービューで扱っています。セルをその場で編集する表は、キーボードでセルを移動・編集できないデータグリッドで扱っています。1つだけ開閉する部分は、開いているか伝わらない表示・非表示ボタンで扱っています。対象とする支援技術で、一連の操作全体をテストしてください。

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

EaseWebのサービス

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

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

サービス内容を見る