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

キーボードでは系列を切り替えられないグラフの凡例

凡例の項目をクリックすると系列が隠れるが、項目はキャンバスに描いた絵かただのリストの項目なので、Tabキーでは移動できず、押せることも伝わらない

WCAG 2.2
SC 2.1.1ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり li.onclick = () => {
アクセシビリティの問題を示した図: 手の操作:先週の分を消すには?
01

問題

キーボードやスクリーンリーダーの利用者は、系列を隠してほかの系列を読めず、凡例が操作できることも伝わらない

02

試してみる

先週の棒をマウスで隠し、次にキーボードだけで試してみましょう

  • 問題1: グラフの上にある「先週」をクリックします。次にマウスを使わずにTabキーを押してみてください。フォーカスは凡例を通り過ぎ、「すべての注文を見る」へ移ります。

  • 問題2: 凡例がグラフの下に移りました。「先週」をクリックしてからTabキーを試し、下の欄を読んでみてください。ボタンとして読まれますか?オフになったことは伝わりますか?

  • 修正を適用します。 Tabキーで「先週」へ移動し、Spaceキーを押します。トグルボタンならEnterキーでも押せます。各項目をスクリーンリーダーがどう読むかは、下の欄に出ます。

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

日別の注文数

すべての注文を見る

グラフの後を読むと、スクリーンリーダーの読み上げ:

  1. すべての注文を見る、リンク

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

03

修正方法

凡例の各項目を、オンかオフかを伝えるコントロールにする

修正前

Chart.js がキャンバスに描く凡例

<section class="card">  <h2>Orders per day</h2>  <canvas id="orders" role="img" aria-label="…"></canvas>  <a href="/orders">View all orders</a></section>
問題点2点
  • 凡例はキャンバスに描かれているため、Tabキーは「This week」にも「Last week」にも止まらず、系列を隠せるキーもない。
  • 項目はピクセルでしかなく、スクリーンリーダーが読める名前も役割も状態もない。
修正後

系列ごとのトグルボタン

<section class="card">  <h2>Orders per day</h2>  <canvas id="orders" role="img" aria-label="…"></canvas>  <ul class="legend" id="legend" aria-label="Series shown"></ul>  <a href="/orders">View all orders</a></section>
修正の手順5ステップ
  1. Chart.js がキャンバスに描く凡例を plugins.legend.display: false でオフにし、凡例をページの中の一つだけにする。
  2. 各リストの項目に button を置き、名前は系列名の「This week」「Last week」だけにする。Tabキーで届き、EnterキーとSpaceキーで押せる。
  3. ボタンに aria-pressed="true" を付け、押すたびに、系列が表示されているかどうかに合わせて設定し直す。スクリーンリーダーは、たとえば「Last week、トグルボタン、押下」と読み、棒が隠れると「押下なし」と読む。
  4. 隠れた系列の取り消し線は、インラインのスタイルではなく aria-pressed="false" から描き、見た目と読み上げを一つの値から決める。
  5. リストに「Series shown」という名前を付け、どの系列が表示されているかを伝えるボタンのまとまりとして聞こえるようにする。

これで二つの修正前の例はどちらも直り、2.1.1と4.1.2を満たします。色の見本と名前、オフのときの取り消し線という凡例の見た目はそのままです。

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

04

修正の確認

4項目、マウス不要

確認方法: キーボード、スクリーンリーダー

4件中0件を確認済み

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

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

制限

このサンプルは、どのグラフでも同じ結果になることを保証するものではありません。Chart は Chart.js のことで、setDatasetVisibility は系列を隠すための Chart.js の機能です。ほかのライブラリーでは、それにあたる機能に置き換えてください。aria-pressed の読み方はスクリーンリーダーによって異なり、「トグルボタン」と読むものもあれば、「ボタン」の後に押下状態を読むものもあります。管理画面全体を、キーボードと対象とする支援技術で確認してください。

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

EaseWebのサービス

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

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

サービス内容を見る