ARIA: radiogroup ロール
radiogroup ロールは、radio ボタンのグループです。
説明
ラジオグループは、関連する radio オプションのセットを説明するコレクションです。radiogroup は、一度に一つのエントリー、または radio のみがチェックされうる select リストの一種です。
HTML のネイティブ入力ラジオボタンである <input type="radio"> を使用する場合、グループ内の各入力ラジオボタンに同じ name が与えられると、ラジオボタンはグループ化されます。同じ名前の入力ラジオボタンのグループが作成されると、そのグループ内の任意の入力ラジオボタンを選択すると、同じグループ内で現在選択されている入力ラジオボタンが自動的に選択解除されます。これによってラジオボタンが一緒に関連付けられますが、ラジオボタンのグループを radiogroup として公開するには、ARIA ロールを明示的に設定します。
同じ名前の HTML 入力ラジオボタンを使用してラジオグループを作成することを推奨しますが、セマンティック HTML フォームコントロールの代わりに ARIA ロールと属性を使用する必要がある場合、カスタム radio ボタンはネイティブ HTML ラジオ入力ボタンのように動作できますし、そうすべきです。
非セマンティック要素をラジオボタンとして使用する場合、ユーザーがグループから一度に一つのラジオボタンのみを選択できることを確保する必要があります。グループ内の一つの項目がチェックされ、aria-checked 属性が true に設定されると、以前にチェックされていた項目はチェック解除され、その aria-checked 属性は false になります。aria-checked 属性は、radiogroup 自体ではなく、関連する radio ロールに設定されます。
一部の radiogroup 実装では、すべてのボタンがチェック解除状態でセットを初期化します。radiogroup 内の radio が一度チェックされると、通常はすべてがチェック解除された状態に戻ることはできません。
radiogroup は、aria-labelledby によって参照される可視ラベルによって、または aria-label で指定されたラベルによって、アクセシブル名を持つ必要があります。要素がラジオグループに関する追加情報を提供する場合、それらの要素は aria-describedby プロパティで radiogroup 要素によって参照されます。
関連する WAI-ARIA のロール、ステート、プロパティ
radioロール-
radiogroup内のチェック可能なボタンのグループの一つで、ボタンの一つだけが一度にチェックできます。 aria-labelledby/aria-label-
radiogroupは、aria-labelledbyによって参照される可視ラベルによって、またはaria-labelで指定されたラベルによって、アクセシブル名を持つ必要があります。 aria-describedby-
radiogroupに関する追加情報を提供する要素への参照 aria-required-
フォームが送信される前に、グループ内の一つの
radioがaria-checked="true"を設定している必要があることを示します。必須状態は、HTML ラジオボタンを使用する場合のrequired属性が一つ以上のラジオ<input>要素に直接設定されるのとは異なり、radio要素の一つではなくradiogroup要素に指定されます。 aria-errormessage-
エラーがある場合、
radiogroupのエラーメッセージを提供する要素を識別します。そのメッセージは、関連性がない間は隠されているべきです。
キーボードインタラクション
toolbar にない radiogroup 内の radio ボタンについては、以下のキーボードインタラクションをサポートする必要があります:
- Tab と Shift + Tab
-
フォーカスを
radiogroupに出入りさせます。フォーカスがradiogroupに移動する際、ラジオボタンがチェックされている場合は、チェックされたボタンにフォーカスが設定されます。ラジオボタンがチェックされていない場合は、グループの最初のラジオボタンにフォーカスが設定されます。 - Space
-
フォーカスされたラジオボタンがまだチェックされていない場合、チェックします。
- → と ↓
-
グループ内の次のラジオボタンにフォーカスを移動し、以前にフォーカスされたボタンのチェックを解除し、新しくフォーカスされたボタンをチェックします。フォーカスが最後のボタンにある場合は、最初のボタンにフォーカスが移動します。
- ← と ↑
-
グループ内の前のラジオボタンにフォーカスを移動し、以前にフォーカスされたボタンのチェックを解除し、新しくフォーカスされたボタンをチェックします。フォーカスが最初のボタンにある場合は、最後のボタンにフォーカスが移動します。
矢印キーはツールバーの要素間をナビゲートするために使用されます。radiogroup がツールバー内にネストされている場合、ユーザーはどのラジオボタンがチェックされているかを変更することなく、ラジオボタンを含むすべてのツールバー要素間をナビゲートできる必要があります。そのため、toolbar 内の radiogroup を矢印キーでナビゲートする際、チェックされたボタンは変更されません。むしろ、toolbar 内では、Space と Enter キーがフォーカスされた radio ボタンをまだチェックされていない場合にチェックし、Tab が toolbar に出入りするためのフォーカスを移動します。
必要な JavaScript 機能
radiogroup のユーザーインタラクションは、ユーザーが同じ名前の HTML ラジオボタンのグループに入るユーザーインタラクションを複製する必要があります。tab、space、矢印キーのキーボードイベントをキャプチャする必要があります。ラジオ要素とそれに関連するラベルの両方のクリックイベントもキャプチャする必要があります。さらに、フォーカスを管理する 必要があります。
通常、フォーカスされた要素から移動すると DOM 順序で次のフォーカス可能要素に移動しますが、矢印キーを使用してラジオボタンのグループをナビゲートする際はグループ内にとどまり、フォーカスがグループの最後のラジオにあるときに → または ↓ が離されると最初のラジオボタンにフォーカスが移動し、フォーカスが最初のラジオにあるときに ← または ↑ が離されると最後のラジオに移動します。ロービング tabindex を管理することは、矢印キーイベントを管理する一つの方法です。
必要な CSS 機能
チェックされたラジオボタンのチェック状態をスタイル設定するには、[aria-checked="true"] 属性セレクターを使用します。
視覚的なキーボードフォーカスとホバーのスタイル設定には、CSS の :hover と :focus 疑似クラスを使用します。フォーカスとホバー効果は、どのオプションが選択されているかを認識しやすくし、ラベルまたはボタンのいずれかをクリックするとラジオボタンが有効化されることを示すために、ラジオボタンとラベルの両方を包含すべきです。
例
セマンティック HTML の代わりに非セマンティック ARIA ロールを使用した radiogroup の基本設定は以下の通りです:
<div role="radiogroup" aria-labelledby="question">
<div id="question">Which is the best color?</div>
<div id="radioGroup">
<p>
<span
id="colorOption_0"
tabindex="0"
role="radio"
aria-checked="false"
aria-labelledby="purple"></span>
<span id="purple">Purple</span>
</p>
<p>
<span
id="colorOption_1"
tabindex="-1"
role="radio"
aria-checked="false"
aria-labelledby="aubergine"></span>
<span id="aubergine">Aubergine</span>
</p>
<p>
<span
id="colorOption_2"
tabindex="-1"
role="radio"
aria-checked="false"
aria-labelledby="magenta"></span>
<span id="magenta">Magenta</span>
</p>
<p>
<span
id="colorOption_3"
tabindex="-1"
role="radio"
aria-checked="false"
aria-labelledby="all"></span>
<span id="all">All of the above</span>
</p>
</div>
</div>
これは、CSS や JavaScript を必要としないセマンティック HTML を使用して書くことができます:
<fieldset>
<legend>Which is the best color?</legend>
<p>
<input name="colorOption" type="radio" id="purple" />
<label for="purple">Purple</label>
</p>
<p>
<input name="colorOption" type="radio" id="aubergine" />
<label for="aubergine">Aubergine</label>
</p>
<p>
<input name="colorOption" type="radio" id="magenta" />
<label for="magenta">Magenta</label>
</p>
<p>
<input name="colorOption" type="radio" id="all" />
<label for="all">All of the above</label>
</p>
</fieldset>
この <fieldset> の例では、role="radiogroup" は必要ありませんが、このグループ化を明示的に radiogroup としてアナウンスするには、ARIA ロールを含めます。
仕様書
| Specification |
|---|
| Accessible Rich Internet Applications (WAI-ARIA)> # radiogroup> |
| Unknown specification> |
関連情報
- HTML
<fieldset>要素 - HTML <input type="radio"> ラジオボタン要素
- ARIA
radioロール aria-errormessagearia-invalidaria-readonlyaria-required