SuperAPI AI 工具集

aria-required-children

前端与建站

查看项目

更新于 10-16 05:25

技能介绍

用途

aria-required-children 是一条无障碍检查规则,用于确保 ARIA 复合组件角色包含其必需的子角色。屏幕阅读器(如 NVDA 和 VoiceOver)通过在这些必需的子角色之间移动来导航复合组件(菜单、标签页、树等)。如果 tablist 中包含的是 div 元素而不是 role='tab',用户将完全听不到标签页。只有当 role='list' 内存在 role='listitem' 子元素时,JAWS 才会播报“list of 5 items”。缺少正确的嵌套,整个组件对仅使用键盘的用户和屏幕阅读器用户都会变得不可感知。

主要能力

  • 容器角色强制要求特定的子角色:tablist → tab,list/listbox → listitem/option,menu/menubar → menuitem,tree → treeitem,grid/rowgroup → row。
  • 缺少必需的子元素会破坏无障碍树,导致屏幕阅读器无法枚举项目或播报数量。
  • 对容器内纯结构性的包装元素使用 role='none' 或 role='presentation',以避免无效嵌套。
  • 适用于 WAI-ARIA 1.2 中复合组件角色的必需拥有元素。

使用方式

检查:识别所有具有 ARIA 容器角色的元素(tablist、list、listbox、menu、menubar、tree、treegrid、grid、rowgroup、radiogroup)。对每个元素,按 WAI-ARIA 规范验证其是否包含必需的子角色:tablist 必须拥有 tab 元素;list 必须拥有 listitem;listbox 必须拥有 option;menu/menubar 必须拥有 menuitem、menuitemcheckbox 或 menuitemradio;tree 必须拥有 treeitem;grid 必须拥有 row(row 拥有 gridcell);radiogroup 必须拥有 radio。标记任何缺少必需子元素的容器角色。

修复:对每个缺少必需子元素的容器角色:(1) 为每个子元素添加正确的角色——例如,为 role='tablist' 内的每个标签按钮添加 role='tab'。(2) 如果容器与必需子元素之间存在用于布局的包装 div 元素,为这些包装元素添加 role='none' 或 role='presentation'。(3) 尽可能优先使用原生 HTML 等价物:用 <ul>/<li> 代替 role='list'/role='listitem',用 <select>/<option> 代替 role='listbox'/role='option'。

代码审查:审查渲染后的标记以及影响“确保 ARIA 角色包含必需子角色”的交互状态。标记违反规则的具体元素、角色、标签、焦点行为或键盘交互,并说明如何通过浏览器无障碍工具或辅助技术验证修复。

适用场景

适用于使用复合角色的自定义 ARIA 组件,包括 tablist、list、listbox、menu、menubar、tree、treegrid、grid、rowgroup、row、radiogroup。

限制

该规则与 aria-required-parent 不同,后者检查相反方向。完整实现细节、代码示例和框架特定指南见 references/rule.md。规则页面:https://frontendchecklist.io/rules/accessibility/aria-required-children