WAI-AREAについて

WAI-ARIAをかうと、HTMLだけでは不足している情報を補うことができます。
Web Accessibility Initiative - Accessible Rich Internet Applicationsの略となり、読み方はウェイアリアです。

WAI-ARIAの主な役割

障害を持つ人々へのサポート

視覚や聴覚、認知などを含めた障害を持つ人々がウェブコンテンツを理解し、操作できるように支援できます。スクリーンリーダーを使用したり、キーボードだけでウェブを操作したりする際などの操作性にも関わってきます。

一例として、重要な情報を含むアラートメッセージを画面読み上げソフトウェアが認識し、ユーザーに通知するために、role="alert"属性を使用することができます。

<div role="alert">新しいメッセージが届きました。</div>

役割と状態の定義

要素が何をするか、どのような状態にあるかを定義でき、ユーザーに正確な情報が提供されます。
<button>タグにrole="button"などは必要ありませんが、例えば、なんらかの理由で適切なHTMLを利用してマークアップできないときに、要素の定義を設定することができます。

<div role="button">クリックしてください</div>

インタラクションの改善

ドロップダウンメニューやモーダルダイアログなど、ユーザーが選択肢を表示および選択できるようにするために、role属性を使用できます。

<div role="combobox" aria-expanded="false" aria-haspopup="listbox" onclick="toggleDropdown()">
  <span>選択してください</span>
  <ul role="listbox" aria-hidden="true">
    <li role="option">選択肢1</li>
    <li role="option">選択肢2</li>
    <li role="option">選択肢3</li>
  </ul>
</div>

主要なWAI-ARIA属性

WAI-ARIA属性は数十種類以上あると言われています。
そのなかの一部を以下でまとめました。

role

ボタン、リスト、メニュー、アラートなど要素の役割を指定

<div role="button">クリック</div>

aria-label

要素にテキストラベルを提供
スクリーンリーダーなどで読み上げられる

<input type="text" aria-label="ユーザー名">

aria-describedby

要素に関連する説明テキストを指定

<input type="password" aria-describedby="password-hint">

aria-labelledby

複数の要素をラベルで関連付けるために使用され、他の要素のIDを参照する

<fieldset aria-labelledby="section-label">

aria-hidden

要素がスクリーンリーダーに表示されないようにする(trueまたはfalseで設定)

<div aria-hidden="true">非表示の要素</div>

aria-expanded

折りたたみ要素の展開状態を示す(trueまたはfalseで設定)

<button aria-expanded="false">詳細を表示</button>

aria-haspopup

特定の要素がポップアップメニューやサブメニューを持つことを示す(trueまたはfalseで設定)
aria-controlsで指定したメニューが表示される

<button aria-haspopup="true" aria-controls="menu1">メニューを開く</button>

aria-controls

制御対象属性
特定の要素が別の要素を制御することを示す

<button id="toggleButton" aria-controls="hiddenContent">表示切り替え</button>
<div id="hiddenContent" aria-hidden="true">これは非表示のコンテンツです。</div>

aria-selected

リスト内の選択状態を示す(trueまたはfalseで設定)

<li aria-selected="true">選択肢1</li>

aria-live

動的に変化するコンテンツ(例: エラーメッセージ)をリアルタイムで通知する

<div aria-live="assertive">新しいメッセージが届きました</div>

トップへ