🌟

alt属性?aria-label?sr-only? 画像の代替テキストについて考えてみた

に公開

Webサイトを実装していると、画像やアイコンに対してアクセシビリティ対応が必要になります。しかし、alt属性、aria-label、視覚的な非表示対応(以下、sr-only)など、複数の選択肢があり、どれを使うべきか迷うことはありませんか?
この記事では、それぞれの使い分けと判断基準について整理します。

判断フローチャート

Ionic の Accessibility Documentで「An alt Decision Tree」というフローチャート図が紹介されており、実装時の判断基準がとてもわかりやすく整理されていました。

それを参考に、判断フローチャートをAIを使って作成してみました。

フローチャートの解説

alt属性の場合

<img src="profile.jpg" alt="田中太郎のプロフィール写真">

HTML標準の方法。装飾的な画像はalt=""で読み上げをスキップ。
alt属性についての説明

aria-label(ボタン、リンクなど)の場合

<button aria-label="メニューを開く">
  <svg aria-hidden="true">...</svg>
</button>

altが使えない要素に使用。シンプルな説明に適している。
aria-labelについての説明

sr-onlyの場合

<button>
  <svg aria-hidden="true">...</svg>
  <span class="sr-only">メニューを開く</span>
</button>

複雑な説明や翻訳対応が必要な場合に使用。
視覚的な非表示対応についての説明

SVG画像の細かい取扱い方

SVG画像は実装方法によって、アクセシビリティ対応が異なります。また、アイコンと複雑な図表では適切なアプローチが変わります。

<img>タグの場合

<!-- アイコンのみのリンク -->
<a href="https://instagram.com/username">
  <img src="/icons/instagram.svg" alt="Instagramで見る">
</a>

<!-- テキストと一緒に表示:altは空 -->
<a href="https://instagram.com/username">
  <img src="/icons/instagram.svg" alt="">
  Instagramで見る
</a>

ポイント:

  • アイコンのみの場合はaltに説明を記述
  • テキストがある場合はalt=""で装飾扱い

リンク内の画像のalt属性の設定例。アイコンのみの場合はaltにリンク先の説明を記述し、アイコンとテキストが併記されている場合はaltを空にする方法を示す図。

<svg>タグの場合

アイコン・シンプルな図形

<a href="https://instagram.com/username" aria-label="Instagramで見る">
  <svg aria-hidden="true" width="24" height="24">
    <path d="..." />
  </svg>
</a>

複雑な図表・グラフ

<svg role="img" aria-labelledby="chart-title chart-desc">
  <title id="chart-title">2024年売上推移グラフ</title>
  <desc id="chart-desc">
    1月から12月までの月次売上を示す棒グラフ。
    1月は500万円から始まり、12月には800万円まで増加している。
  </desc>
  <!-- グラフの複雑なパス -->
</svg>

ポイント:

  • アイコン: 親要素にaria-label<title>タグのみに留める
  • 複雑な図・グラフ: <title>タグ + <desc>タグ + aria-labelledbyで詳細な説明を提供
  • <title>タグは短い説明、<desc>タグは詳細な説明

SVG画像のアクセシビリティに関する説明図。シンプルなアイコンにはaria-labelを使用し、複雑なグラフにはtitle要素、desc要素、aria-labelledby属性を組み合わせて詳細な説明を提供する方法を示している。

まとめ

  • <img>タグには必ずalt属性(装飾的な画像の場合は空でもOK)を入れる
  • 装飾的な要素にはaria-hidden="true"で対応
  • SVGアイコンは親要素にaria-labelまたはSVGに<title>のみに留める
  • 複雑な図表・グラフは<title> + <desc>で詳細な説明をする
  • 迷ったら情報の伝達を優先する
  • background-imageは重要な情報にはなるべく使用しない

アクセシビリティは「全てのユーザーに情報を届ける」ことが目的です。この記事が、適切な実装方法を選択する助けになれば幸いです。

参考記事

https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/img#alt
https://developer.mozilla.org/ja/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-label
https://css-tricks.com/accessible-svgs/
https://ionic.io/docs/accessibility/alt-text

NEW FOLK Develop team.

Discussion