ARIA:树形角色

tree 是一个允许用户从分层组织的集合中选择一个或多个项目的部件。

描述

tree 部件是一个分层列表,包含可以展开和折叠的父节点和子节点。层次结构中的任何项目都可以具有子树项目,并使用role="treeitem"设置。具有子节点的树形项目可以展开或折叠,从而显示和隐藏其子节点。

tree 的一个示例是文件系统选择用户界面:显示文件夹和文件的树形视图。可以展开文件夹项目以显示文件夹的内容(可能是文件、文件夹或两者),并可以折叠以隐藏其内容。

ARIA 树形视图主要使用键盘上的方向键进行导航,而不是Tab键。这种导航方式在大多数浏览器内容中并不常见,但在原生应用程序中则很常见且预期。因此,在创建树形视图之前,请考虑其他替代方案来解决您所需的功能。

警告:树形视图使用的导航方式更类似于原生应用程序,而不是 Web 应用程序。因此,在创建树形视图之前,请考虑其他替代方案来解决您所需的功能。

单选和多选树

树可以是“单选”的,允许用户仅选择一个项目进行操作,也可以是“多选”的,允许用户选择多个项目进行操作。在多选树中,treearia-multiselectable 属性设置为 true。否则,aria-multiselectable 属性设置为 false 或隐含默认值 false。在这两种情况下,为了实现键盘可访问性,必须为所有树形后代管理焦点。

在某些单选树的实现中,聚焦的项目也具有选定状态;这被称为“选择跟随焦点”。当单选树获得焦点时,如果在树获得焦点之前没有任何树形项目被选中,则焦点将设置在第一个节点上。如果在树获得焦点之前某个树形项目被选中,则焦点将设置在选定的树形项目上。在单选树中,aria-selected 属性对于选定的树形项目设置为 true,并且在树中任何其他树形项目上都不存在。

在多选树中,所有选定的树形项目都设置了 aria-selected="true",所有可选择但当前未选中的树形项目节点都设置了 aria-selected="false"。不要在不可选择的树形项目上包含 aria-selected 属性。

当多选树获得焦点时,如果在树获得焦点之前没有任何树形项目被选中,则焦点将设置在第一个树形项目上。如果在树获得焦点之前一个或多个树形项目被选中,则焦点将设置在第一个选定的节点上。

在多选树中,选定状态始终独立于焦点。例如,在典型文件系统导航器中,用户可以移动焦点以选择任意数量的文件以进行操作,例如复制或移动。视觉设计应清楚地表明哪些项目被选中以及哪个项目具有焦点。

树形层次结构

在树形视图中,tree 节点是根节点;它可以具有子节点、孙节点以及更深层次的后代 treeitem 节点。

每个用作树节点的元素都具有 treeitem 角色,除了根树节点,其角色为 treetree 没有父 tree 节点 - 它就是根节点。如果某个节点嵌套在树中并且具有后代树形项目,则它具有 treeitem 角色和aria-expanded 属性;当节点处于关闭状态时,aria-expanded="false" 设置;当节点处于打开状态时,aria-expanded="true" 设置。

treeitem 节点可以是 tree 根节点的直接子节点,嵌套在 treeitem 节点中,或者(可选)嵌套在group 元素中,当嵌套在 tree 中时,它是一个可展开的 treeitem 元素集合。

不要在没有树形项目子节点的末端节点上包含 aria-expanded,因为这会错误地将节点描述为辅助技术的父节点。

DOM 位置和存在

所有树形项目(treeitem)都包含在或属于具有 tree 角色的元素中。如果任何树形项目在标记中不是 tree 的直接后代,请在拥有树形容器上包含 aria-owns 以包含不是容器的 DOM 子元素的元素。这些非子元素拥有的元素将按其引用的顺序出现在阅读顺序中,并在任何作为 DOM 子元素的树形项目之后。管理焦点的脚本需要确保视觉焦点顺序与辅助技术阅读顺序匹配。

如果由于动态加载,完整的可用节点集未出现在 DOM 中(例如,当用户在树中移动焦点或滚动时),则每个节点都指定了 aria-levelaria-setsizearia-posinset

可访问名称

必须为 tree 提供可访问名称。请参考使用 aria-labelledby 引用的可见标签,或使用 aria-label 指定标签。

具有 tree 角色的元素具有垂直的隐式 aria-orientation 值。如果树形元素为水平方向,则包含 aria-orientation="horizontal"

关联的 WAI-ARIA 角色、状态和属性

role="treeitem"

树中的一个项目。

role="group"

可扩展的树形项目集合。

aria-labelledby

标识标记 tree 的元素(或元素),在存在可见标签时提供所需的可访问名称。否则使用 aria-label

aria-label

定义一个字符串值,在不存在可见标签时标记 tree

aria-orientation

指示树的方向是水平还是垂直;如果省略,则默认为 vertical

aria-multiselectable

设置为 true 时,表示用户可以从树的当前可选后代中选择多个树形项目。

键盘交互

对于垂直方向的 tree(默认方向)

右箭头
  • 当焦点位于关闭的节点上时,打开节点;焦点不会移动。
  • 当焦点位于打开的节点上时,焦点移动到第一个子节点。
  • 当焦点位于末端节点(没有子节点的树形项目)上时,不执行任何操作。
左箭头
  • 当焦点位于打开的节点上时,关闭节点。
  • 当焦点位于子节点上(该子节点也是末端节点或关闭节点)时,焦点移动到其父节点。
  • 当焦点位于关闭的树上时,不执行任何操作。
向下箭头 将焦点移动到下一个可聚焦的节点,而不会打开或关闭节点。
向上箭头 将焦点移动到上一个可聚焦的节点,而不会打开或关闭节点。
Home 将焦点移动到树中的第一个节点,而不会打开或关闭节点。
End 将焦点移动到树中最后一个可聚焦的节点,而不会打开节点。
Enter 执行当前焦点节点的默认操作。对于父节点,它会打开或关闭节点。在单选树中,如果节点没有子节点,则选择当前节点(如果尚未选择)(这是默认操作)。
键入字符*
  • 焦点移动到名称以键入的字符开头的下一个节点。
  • 如果快速连续键入多个字符,焦点将移动到名称以键入的字符字符串开头的下一个节点。
*(可选) 展开与当前节点位于同一级别的所有同级节点。

* 建议所有树都使用键入前瞻,特别是对于根节点超过 7 个的树。

多选键盘交互

多选树有两种交互模型:虽然您可以要求用户在导航列表时按住修饰键(如 ShiftControl)以避免丢失选择状态,但建议使用不需要用户按住修饰键的模型。

空格 切换焦点节点的选择状态。
Shift + 向下箭头(可选) 将焦点移动到下一个节点并切换其选择状态。
Shift + 向上箭头(可选) 将焦点移动到上一个节点并切换其选择状态。
Shift + 空格(可选) 从最近选择的节点到当前节点选择连续的节点。
Control + Shift + Home(可选) 选择焦点节点和直到第一个节点的所有节点。可以选择将焦点移动到第一个节点。
Control + Shift + End(可选) 选择焦点节点和直到最后一个节点的所有节点。可以选择将焦点移动到最后一个节点。
Control + A(可选) 选择树中的所有节点。可以选择,如果所有节点都已选中,则还可以取消选择所有节点。

替代多选模型

替代多选模型是修饰键模型,其中在不按住修饰键(如 ShiftControl)的情况下移动焦点会取消选择所有选定的节点,除了焦点节点。

Shift + 向下箭头 将焦点移动到下一个节点并切换其选择状态。
Shift + 向上箭头 将焦点移动到上一个节点并切换其选择状态。
Control + 向下箭头 在不更改选择状态的情况下,将焦点移动到下一个节点。
Control + 向上箭头 在不更改选择状态的情况下,将焦点移动到上一个节点。
Control + 空格 切换焦点节点的选择状态。
Shift + 空格(可选) 从最近选择的节点到当前节点选择连续的节点。
Control + Shift + Home(可选) 选择焦点节点和直到第一个节点的所有节点。可以选择将焦点移动到第一个节点。
Control + Shift + End(可选) 选择焦点节点和直到最后一个节点的所有节点。可以选择将焦点移动到最后一个节点。
Control + A(可选) 选择树中的所有节点。可以选择,如果所有节点都已选中,则还可以取消选择所有节点。

规范

规范
可访问富互联网应用程序 (WAI-ARIA)
# tree
未知规范

另请参阅