NITS TIPS

~微塵集合知巧~

spanタグにaria-labelをつけるのは非推奨

最終更新日: 2024-04-02記事投稿日: 2024-04-02

nobumitsu-1995のgithubトップ

Frontend developer

nobumitsu-1995


こんなことがあった

a11y対応としてアイコンボタンにアクセシブルネームを付与したい場面は度々あると思います。

例えば、以下のようなコードでアイコンボタンを実装したします。この場合、ボタンにはアクセシブルネームが付与されないためvoice overなどによる読み上げ時にただ単に「ボタン」とだけしか読まれず何のボタンであるのか知覚できません

<button class="button">
  <span class="icon">
    <svg>...</svg>
  </span>
</button>

そんな時に使用できるのがaria-label属性です。これを明示的に書いてあげることで要素にアクセシブルネームを付与することができます。そこで、以下のような実装をしました。

<button class="button">
  <span class="icon" aria-label="編集">
    <svg>...</svg>
  </span>
</button>

しかし、この状態でaxe-DevToolsで検証してみると以下のようなエラーが出ていました。

spanタグに対してaria-labelを使用しているのが原因のようでした👀


spanタグにaria-labelをつけるのは非推奨

W3Cによるとcaption, code, deletion, emphasis, generic, insertion, paragraph, presentation, strong, subscript, superscript のロールを持つ要素にはaria-labelをつけるのを禁止しているようでした。

spandivは暗黙のロールがgeneric なのでaxe-DevToolsでもエラーになっているようでした。

https://www.w3.org/TR/wai-aria/#aria-label

今回のアイコンボタンの場合は以下のように実装するのが良さそうです!

<button class="button" aria-label="編集">
  <span class="icon">
    <svg aria-hidden="true">...</svg>
  </span>
</button>

おまけ(aria-hidden)

一つ前のサンプルコードでsvgにつけているaria-hidden="true"ですが、これをつけると要素がアクセシビリティツリーに認識されなくなります。例のようなアイコン画像描画に使用しているタグなどにつけてあげると読み飛ばされるようになるので、


参考文献


関連記事

  • 最終更新日: 2024-08-06記事投稿日: 2024-08-06

    ARIA属性を活用したアクセシブルなモーダル実装

    アクセシブルなmodalを実装するために必要なaria属性が意外と多い。参考となるコードをメモとして残しておきたい。

  • 最終更新日: 2024-07-27記事投稿日: 2024-07-27

    swiper/reactで実装したカルーセルをTAB操作した時、画面に描画されていないスライドにフォーカスが当たってしまう

    swiper/reactで実装したカルーセルをTABキーで操作した時、画面に描画されていないスライドにもフォーカスが当たってしまう問題があり、それの修正対応をしたので備忘録として残しておく。

  • 最終更新日: 2024-07-09記事投稿日: 2024-07-09

    PayloadとArgumentの使い分け方

    typescriptで型を宣言するとき〇〇Payloadとか××Argumentとか名付けることが多いがその違いについて真面目に考えたことがなかったので調べてみた。

  • 最終更新日: 2024-05-06記事投稿日: 2024-05-06

    初回レンダリング時のみ、useEffect内の処理を実行しないようにする方法

    コンポーネントの初回レンダリング時のみ、useEffect内の処理を実行したくないという場面で、どのような処理を加えれば実現できるかを紹介します。