The aria-describedby
attribute is an HTML accessibility attribute that associates a specific element with a supplementary description by referencing the id
of another element, allowing screen readers to read the description aloud.
aria-describedby
属性は、アクセシビリティを向上させるために使用される HTML の ARIA (Accessible Rich Internet Applications) 属性の一つです。視覚的な説明を補足するためにスクリーンリーダーなどの支援技術と連携し、ユーザーに追加情報を提供する役割を果たします。
aria-describedby
属性は、特定の要素が説明のために参照する別の要素の id
を指定することで、支援技術にその情報を伝えるための仕組みです。通常、視覚的に補足的な説明を提供する要素 (例: p
, span
, div
など) をスクリーンリーダーで読み上げさせるために使用します。
HTML
<input type="text" id="username" aria-describedby="username-desc">
<p id="username-desc">ユーザー名を半角英数字で入力してください。</p>
ユーザー名を半角英数字で入力してください。
上記の例では、aria-describedby
を持つ input
要素 (id="username"
) に関連付けられた p
要素 (id="username-desc"
) の内容が、スクリーンリーダーで読み上げられます。
aria-describedby
aria-labelledby
例えば、次のように aria-labelledby
と aria-describedby
を併用することも可能です。
HTML
<label id="email-label">メールアドレス</label>
<input type="email" id="email" aria-labelledby="email-label" aria-describedby="email-desc">
<p id="email-desc">有効なメールアドレスを入力してください。</p>
有効なメールアドレスを入力してください。
この場合、スクリーンリーダーは以下の順で読み上げます。
aria-labelledby
に指定された email-label
のテキスト (「メールアドレス」)aria-describedby
に指定された email-desc
のテキスト (「有効なメールアドレスを入力してください。」)ユーザーが無効な入力を行った際、適切なエラーメッセージを伝えるために aria-describedby
を利用できます。
HTML
<label for="password">パスワード</label>
<input type="password" id="password" aria-describedby="password-error">
<p id="password-error" style="color: red; display: none;">パスワードは8文字以上で入力してください。</p>
<script>
document.getElementById('password').addEventListener('input', function() {
let error = document.getElementById('password-error');
if (this.value.length < 8) {
error.style.display = 'block';
} else {
error.style.display = 'none';
}
});
</script>
マウスオーバー時やフォーカス時にツールチップを表示しつつ、スクリーンリーダーにも説明を提供することができます。
HTML
<button id="info-btn" aria-describedby="tooltip">?</button>
<span id="tooltip" style="display: none;">このボタンを押すと設定メニューが開きます。</span>
<script>
document.getElementById('info-btn').addEventListener('mouseover', function() {
document.getElementById('tooltip').style.display = 'inline';
});
document.getElementById('info-btn').addEventListener('mouseout', function() {
document.getElementById('tooltip').style.display = 'none';
});
</script>
aria-describedby
による説明が、UI の他の部分と矛盾しないようにする。aria-describedby
の値として存在しない ID を指定すると、スクリーンリーダーが適切に読み上げられない。display: none;
の要素はスクリーンリーダーに認識されない可能性があるため、aria-hidden="true"
を使うか visibility: hidden;
にするなどの工夫が必要。aria-describedby
は、Web アクセシビリティを向上させるための強力なツールであり、フォームの補足説明、エラーメッセージの提供、ツールチップの説明など、様々な用途で活用できます。
適切に活用することで、視覚障害を持つユーザーやスクリーンリーダーを使用するユーザーにとって、より使いやすい Web サイトを構築できます。開発時には、テストツール (例: VoiceOver, NVDA, JAWS) を用いて正しく動作するか確認しながら実装することが重要です。