aria-prohibited-children

コンテナーロールが所有する子は許可されたロールである必要があります

automaticWCAG 1.3.1 (A)確度:medium重大度:moderaterobust

コンテナーロール(list、listbox、menu、menubar、radiogroup、rowgroup、table、grid、treegrid、tablist、tree、row)がアクセシビリティツリー上で所有するすべての子が、そのロールで許可された所有ロールのいずれかを持つことを確認します。

適用範囲:明示的で有効なロールが、「required owned elements」の項目が定められたコンテナーロールのいずれかである要素に適用されます(aria-required-childrenと同じ表を使います)。

期待される結果:コンテナーがアクセシビリティツリー上で所有する子孫(role="none"/"presentation"の要素を取り除き、さらにコンテナー自身の必須所有要素の定義が挙げている"group"/"rowgroup"のラッパーを、WAI-ARIAに従い所有要素の照合では透過的なものとして取り除いた後)はすべて、同じ必須所有ロールの集合に含まれるロールを持ちます。これは"group"/"rowgroup"自体がそのコンテナーの必須所有ロールの集合に含まれるかどうかに関係ありません。複合ロールやコンテナーロールの直接の子として構造上有効なのはこれらだけです。ここで「許可されている」とは、コンテナーの必須所有ロールに加え、必須ではないが所有してもよい少数のロール(メニュー項目間のseparator、grid内のcaptionなど)を指します。コンポーネントライブラリーが項目を埋め込むロールなしのラッパーは、項目にたどり着くまで中をたどります。ただし項目が見つかった時点で、そのラッパーの残りのサブツリーは項目自身のコンテンツとみなされ、コンテナーに照らした判定は行いません。

検出結果が報告する内容:

  • containerRole:コンテナーのロールです。
  • containerSelector:コンテナーのセレクターです。
  • allowedOwnedRoles:コンテナーが所有できるロールです。各項目はロール名です。
  • childRole(ロールを持つ子):子のロールで、上記のいずれにも当てはまりません。リンク、ボタン、またはそれ自体でフォーカスを受け取れるほかのコントロールでは、その要素が持つロール(link、button)です。ロールのない子ではnullです。
  • attr(ロールのない子、またはそれ自体でフォーカスを受け取れる子):その子を独立したノードにしているものです。子が持つグローバルなaria-*属性、tabindex、またはそれらなしでフォーカスを受け取れる場合(リンク、ボタン)はnativeFocusableです。

これらのdata.detailsのフィールドは、検出結果を読み解き、再現するのに役立ちます。reasonCodeと、出力スキーマで安定と明記された一部のフィールドを除き、安定した契約ではありません。マイナーリリースで名前が変わったり、なくなったりすることがあるため、これらに依存した実装はしないでください。

例

pass
<ul role="menubar">
<li role="menuitem">File</li>
<li role="menuitem">Edit</li>
</ul>

所有されている2つの子はどちらも、menubarの仕様で許可されたロールです。

fail
<div role="table">
<div role="row"><div role="cell">x</div></div>
<div role="button">Not a valid table child</div>
</div>

role="table"が許可する子はrow(またはrowgroup)だけであり、ボタンは許可されていない所有される子です。

関連するルール

ソースコードを見る