The aria-label
attribute in HTML provides a text label that isn't displayed on-screen, allowing screen readers and other assistive technologies to accurately convey the meaning or function of elements—such as icon buttons—that lack visible text.
HTML の aria-label
属性は、視覚に頼らない支援技術(スクリーンリーダーなど)を利用する方々にも、より正確に情報を伝えるための重要な手段の一つです。Web アクセシビリティを高めるには欠かせない要素となっており、初めて学ぶ方はもちろん、すでに知っている方にとっても運用方法やベストプラクティスを再確認する価値があります。
aria-label
は、WAI-ARIA(Web Accessibility Initiative – Accessible Rich Internet Applications)の仕様で定義された属性の一つです。主に次のような役割があります。
aria-label
は、ARIA 全体の中でも「名前付け」のための属性です。ARIA には他にも、要素の役割を示す role
属性や、要素間の関係を示す aria-labelledby
や aria-describedby
などさまざまな属性があります。aria-label
はその中でも特に「明示的に名前を指定したい」場合に使用します。
ウェブサイト上の多くの要素は、デフォルトで何らかのテキストやラベルを持っています。たとえば、<button>
要素にはボタン内のテキスト、<img>
要素には alt
属性など。しかし、次のようなケースでは、従来の方法だけではラベルを適切に提供できない場合があります。
これらの要素は視覚的には何かの役割を持っているのに、テキストが存在しないため、スクリーンリーダーには「何の要素か」分かりにくくなってしまいます。ここで aria-label
を使うことで「このアイコンボタンは ‘検索ボタン’ です」などと明示的に伝えることができるわけです。
HTML
<button aria-label="メニューを開く">
<!-- アイコンフォントやSVGアイコンを表示する -->
<svg aria-hidden="true" width="24" height="24">
<!-- ハンバーガーメニューアイコンのパス -->
</svg>
</button>
aria-hidden="true"
をアイコンに付けることで、アイコン自体はスクリーンリーダーに読み上げさせないようにしています。読み上げさせるのは aria-label
で指定した文字列のみです。HTML
<span aria-label="新着情報">
<img src="new_icon.png" alt="" />
</span>
alt
を空にしてスクリーンリーダーに読み上げさせない(無視してもらう)パターン。span
要素に aria-label
を付与して、読み上げるテキストを指定しています。HTML
<input type="text" aria-label="検索キーワード入力欄" />
label
要素を使わずに、直接 aria-label
でテキストフィールドに名称を与えている例です。label
要素と紐づける(あるいは aria-labelledby
を利用する)のが望ましいですが、デザイン上どうしても表示が難しい場合や、動的に生成される UI などで柔軟に制御したい場合などに使われます。aria-labelledby
は「既に存在する要素のテキスト」をラベルとして参照する方法です。aria-labelledby
が有効です。aria-label
は「直接文字列を指定」します。その要素自体がラベルを内包していない場合は、シンプルに aria-label
が便利です。例: aria-labelledby の使用例
HTML
<label id="searchLabel">検索</label>
<input type="text" aria-labelledby="searchLabel" />
aria-labelledby
で参照しています。aria-describedby
は説明文や補足情報を提供するための属性です。aria-describedby
を使います。例: aria-describedby の使用例
HTML
<input type="text" id="emailField" />
<span id="emailHelp">メールアドレスを半角英数で入力してください。</span>
<script>
const emailField = document.getElementById('emailField');
emailField.setAttribute('aria-describedby', 'emailHelp');
</script>
aria-describedby
で関連付けられたテキスト(ここでは emailHelp
)は、スクリーンリーダーが必要に応じて読み上げる「補足的な説明」として扱われます。<button>
とそのラベル、<label>
と <input>
の組み合わせなど、ネイティブ要素だけで十分に意味が伝わる場合は、それを最優先で利用しましょう。aria-label
はあくまで「補完的」な位置づけとして考えるのが基本です。
aria-label
で指定する文字列は、できるだけ簡潔かつ文脈を踏まえたものにしましょう。ユーザーがスクリーンリーダーで理解しやすい表現が理想です。
aria-label="メニューを開く"
→ 「開く」という動作を明確にaria-label="メールで問い合わせ"
→ 特に「メールで」と手段を明示すると分かりやすいもし要素内に既にラベル(テキスト)が存在するなら、aria-label
は不要なケースも多いです。テキストと aria-label
の両方があると、スクリーンリーダーによっては重複して読み上げられる可能性があります。
アイコンフォントや SVG を使用している場合、aria-hidden="true"
を適切に使って不要な読み上げを防ぎましょう。ボタンやリンク本体で aria-label
を指定する、もしくはテキストがあればそちらを読み上げさせるようにします。
display: none;
や visibility: hidden;
)だと、支援技術によっては無視されることがあります。title
属性と aria-label
の両方がある場合に読み上げ順が異なったり、片方だけを優先したりすることがあります。一般的には aria-label
を優先する実装が多いですが、意図せず混乱を招かないよう、役割の重複には注意してください。aria-label
で指定する文字列は、翻訳・多言語対応が必要なサイトの場合に注意が必要です。システムによっては、テキストがハードコーディングされていると翻訳を見落としやすいので、テンプレートや辞書ファイルと連携して管理するなどの工夫をしましょう。aria-label
は、可視化されたテキストだけでは補えない要素の意味を、支援技術に的確に伝えるためにとても有効な属性です。特にアイコンボタンや装飾的な画像を使う場面では重宝します。しかしながら、以下の点を押さえておくことが重要です。
aria-label
を活用する。正しく使えば、aria-label
はアクセシビリティを格段に向上させられる強力なツールとなります。中級者以上の方にとっては、より複雑なUI要素の作成時や、多言語サイトなどでの運用における注意点が増えてきますが、一貫して「ユーザーに正しく情報を伝える」ことがゴールである点は変わりありません。
より高度な情報を探される場合は、W3C の公式ドキュメントや各ブラウザ・スクリーンリーダー固有の仕様変更に関する情報、実機テストの結果などを随時参照し、最新のアクセシビリティ動向を追ってみてください。