WAI-ARIA 1.2Roles

ウィジェットロール

ウィジェットロールは、ボタン、チェックボックス、スライダー、タブなどの インタラクティブなUIコンポーネントの役割を定義します。 ネイティブHTML要素がある場合はそちらを優先し、カスタムウィジェットにのみARIAを使います。


入力系

ロール説明ネイティブHTML
buttonクリックやキー操作で動作をトリガーする要素<button>
checkboxチェック可能な入力。true/false/mixed の3状態<input type="checkbox">
radioラジオグループ内で1つだけ選択可能な入力<input type="radio">
switchオン/オフの切り替え。checkbox に似るが視覚的にトグルなし
textbox自由テキスト入力。単一行または複数行<input> / <textarea>
slider一定範囲内の値を選択するスライダー<input type="range">
spinbutton離散的な値を増減して選択する入力<input type="number">
comboboxテキスト入力 + ポップアップリストの組み合わせなし
searchbox検索クエリの入力に特化したテキストボックス<input type="search">

選択・ナビゲーション系

ロール説明ネイティブHTML
linkハイパーリンク。ページ遷移やアンカーへの移動<a href>
menuitemメニュー内の選択肢なし
menuitemcheckboxチェック可能なメニュー項目なし
menuitemradioラジオ選択可能なメニュー項目なし
optionリストボックスまたはコンボボックス内の選択肢<option>
tabタブリスト内のタブ。タブパネルの表示を切り替えるなし
treeitemツリービュー内のアイテム。展開/折りたたみ可能なし

表示・フィードバック系

ロール説明ネイティブHTML
dialogモーダルまたは非モーダルのダイアログウィンドウ<dialog>
alertdialog重要なメッセージを表示し、応答を求めるダイアログなし
progressbarタスクの進行状況を表示するバー<progress>
scrollbarスクロール可能なコンテンツのスクロールバーなし
tooltip要素にホバー/フォーカスした際に表示される補足テキストなし
tabpanelタブに関連付けられたコンテンツパネルなし

コンテナ系

ロール説明ネイティブHTML
grid行と列で構成されるインタラクティブなグリッドなし
listbox選択可能なオプションのリスト<select>
menuユーザーに選択肢を提供するメニューなし
menubar水平に並んだメニュー。通常はアプリのメインメニューなし
tablistタブのコンテナ。tab ロールの子を持つなし
toolbarボタンなどのコントロールをグループ化するツールバーなし
tree階層的なリスト。展開/折りたたみ可能なツリービューなし
treegridツリー構造 + グリッド(行と列)の組み合わせなし

インタラクティブデモ

カスタムボタンの比較

レンダリング結果
送信する
クリック回数: 0
HTMLソース
<!-- role なし -->
<div class="btn" onclick="submit()">
  送信する
</div>

<!-- 問題点:
  - Tab でフォーカスできない
  - Enter/Space で押せない
  - スクリーンリーダーが
    「ボタン」と読み上げない
-->
role のない div はスクリーンリーダーにとって意味不明です。Tab キーでフォーカスもできず、キーボードユーザーは操作できません。

よくある間違い

不適合
<div class="btn" onclick="save()">保存</div>
適合
<button onclick="save()">保存</button>
div にはフォーカス不可・Enter/Space で反応しない・ロールなし。<button> を使うだけで全て解決します。
不適合
<a role="button" onclick="toggle()">切り替え</a>
適合
<button onclick="toggle()">切り替え</button>
<a> にはリンクのセマンティクスがあります。ボタンの動作なら <button> を使いましょう。
不適合
<div role="checkbox">受け入れる</div>
適合
<div role="checkbox" tabindex="0" aria-checked="false">受け入れる</div>
role だけではキーボード操作も状態管理もできません。tabindex と aria-checked、キーボードハンドラが必要です。