≪ Today I learned. RSS購読
公開日
タグ
Accessibility, HTML
著者
ダーシノ(@bc_rikko)

Canvas要素のアクセシビリティ対応

Canvas要素の内容はスクリーンリーダーに読み上げられないため、なんらかの対策が必要。

Canvas要素のアクセシビリティ対応

  1. Canvas要素には代替テキストをつける
  1. フォールバックコンテンツを含める
  2. 背景を塗りつぶし、ハイコントラストモードに対応する
<canvas role="img" aria-labelledby="title desc">
  <!-- canvas要素内にフォールバックコンテンツを含める -->
  <h2 id="title">◯◯のグラフ</h2>
  <p id="desc">過去3ヶ月間のxx利用料の推移を表したグラフです。</p>
  <dl>
    <dt>7月のxx利用料</dt>
    <dd>12,345円</dd>
    <dt>6月のxx利用料</dt>
    <dd>12,345円</dd>
    <dt>5月のxx利用料</dt>
    <dd>12,345円</dd>
  </dl>
</canvas>

デモ

※canvasのコンテンツは表示されないが、フォールバックコンテンツを含めているのでアクセシビリティツリーに登録される

◯◯のグラフ

過去3ヶ月間のxx利用料の推移を表したグラフです。

7月のxx利用料
12,345円
6月のxx利用料
12,345円
5月のxx利用料
12,345円

Canvas要素にフォールバックコンテンツを追加した場合のアクセシビリティツリー

Canvasの代わりにSVGを使う

SVG自体がマシンリーダブルなので、特に手を加えなくてもaria属性を使うことでアクセシブルになる。

<svg class="chart" width="420" height="150" aria-labelledby="title desc" role="img">
  <title id="title">A bar chart showing information</title>
  <desc id="desc">4 apples; 8 bananas; 15 kiwis; 16 oranges; 23 lemons</desc>
  <g class="bar">
    <rect width="40" height="19"></rect>
    <text x="45" y="9.5" dy=".35em">4 apples</text>
  </g>
  ...
</svg>
A bar chart showing information4 apples; 8 bananas; 15 kiwis; 16 oranges; 23 lemons4 apples8 bananas15 kiwis16 oranges23 lemons