WAI-ARIA 创作实践 1.2

志愿者翻译(简体中文)

翻译单位:
腾讯(Tencent), https://www.tencent.com/
免责声明
这是一份志愿者翻译,可能包含翻译错误,一切以英文原文为准。
注意
该文档是对原始英文文档中第三章的中文翻译(WAI-ARIA Authoring Practices 1.2 - 3.Design Patterns and Widgets)。 该章节详细介绍了29个常用组件的无障碍实践指引,包括详细的代码示例、键盘操作指引、WAI-ARIA 角色、属性和状态使用规范,这部分内容对设计师、开发者非常有用。原英文文档余下章节目前暂未设定明确的下一步翻译计划,如果你对翻译相关内容感兴趣,欢迎联系我们(emmajtchen@tencent.com)。

WAI-ARIA Authoring Practices 1.2

W3C Group Note

More details about this document
This version:
https://www.w3.org/TR/2021/NOTE-wai-aria-practices-1.2-20211129/
Latest published version:
https://www.w3.org/TR/wai-aria-practices-1.2/
Latest editor's draft:
https://w3c.github.io/aria-practices/
History:
https://www.w3.org/standards/history/wai-aria-practices-1.2
Commit history
Editors:
(Facebook)
(University of Illinois)
(Adobe)
Zoë Bijl (Invited Expert)
Michael Cooper (W3C)
Former editors:
Joseph Scheuhammer (Inclusive Design Research Centre, OCAD University) - Until
Lisa Pappas (SAS) - Until
Rich Schwerdtfeger (IBM Corporation) - Until
Feedback:
GitHub w3c/aria-practices (pull requests, new issue, open issues)
public-aria-practices@w3.org with subject line [wai-aria-practices-1.2] … message topic … (archives)

Abstract

本章暂无中文版,详情请访问英文版 ARIA Authoring Practices Guide (APG) Home

Status of This Document

1. Introduction

本章暂无中文版,详情请访问英文版 ARIA Authoring Practices Guide (APG) Home

2. Read Me First

本章暂无中文版,详情请访问英文版 Read Me First

3. Design Patterns and Widgets

本节演示了如何通过应 WAI-ARIA 角色、状态和属性以及实现键盘支持,使常见的富互联网应用模式和 widget 变得无障碍。

3.1 Accordion (Sections With Show/Hide Functionality) 手风琴(具有显示/隐藏功能的部分)

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

手风琴是一组垂直堆叠的交互式标题,每个标题都包含代表一系列内容的标题名、内容片段或缩略图。标题作为控件,使用户能够显示或隐藏其相关的内容部分。手风琴通常用于减少在单个页面显示多个内容部分时出现滚动的情况。

通过以下术语来理解手风琴:

手风琴标题(Accordion Header):
表示内容部分的标签或缩略图,该部分内容也用作显示控件,并在某些实现中隐藏内容模块。
手风琴面板(Accordion Panel):
与手风琴标题相关联的内容部分。

在某些手风琴中,在手风琴标题旁边会有一些附加元素。例如,每个手风琴标题附带一个菜单按钮,用来提供适用于该部分的访问操作。而且,在某些情况下,隐藏内容的片段(snippet)也可能在视觉上持续存在。

示例

手风琴示例:演示把一个表单分成三部分,手风琴每次只展开其中一部分。

键盘交互

  • EnterSpace
    • 焦点位于折叠面板的手风琴标题上时,展开其关联的面板。如果实现中约定每次只允许扩展一个面板,并且有面板已经是展开的状态,则(先前)展开的面板会被折叠。
    • 焦点位于展开面板的手风琴标题上时,如果实现支持折叠,则折叠面板。一些实现要求始终扩展且只允许扩展一个面板,因此,(这种情况下)它们不支持折叠功能。
  • Tab:将焦点移动到下一个可聚焦元素上;手风琴中的所有可聚焦元素都包含在页面的 Tab sequence 中。
  • Shift + Tab:将焦点移至上一个可聚焦元素上;手风琴中的所有可聚焦元素都包含在页面的 Tab sequence 中。
  • Down Arrow(可选):如果焦点在手风琴标题上,则将焦点移动到下一个手风琴标题。如果焦点在最后一个手风琴标题上,则不作任何操作或将焦点移动到手风琴的第一个标题。
  • Up Arrow(可选):如果焦点在手风琴标题上,则将焦点移动到上一个手风琴标题。如果焦点在第一个手风琴标题上,则不作任何操作或将焦点移动到手风琴的最后一个标题。
  • Home(可选):当焦点在手风琴标题上时,将焦点移到手风琴的第一个标题。
  • End(可选):当焦点在手风琴标题上时,将焦点移到手风琴的最后一个标题。

WAI-ARIA 角色、状态和属性

  • 每个手风琴标题包含在一个角色为 button 的元素内。
  • 每个手风琴标题 button 都被一个具有 heading 角色的元素包裹,且该元素设置了合适的 aria-level 值以适配页面的信息架构。
    • 如果原生语言具有隐含的 heading 角色和 aria-level 属性的元素,例如 HTML 标题标签(HTML heading tag),可以使用原生语言元素。
    • button 元素是 heading 元素内的唯一元素。也就是说,即使有其他(跟 button 元素)视觉上持久(visually persistent)的元素,他们不能被包含在 heading 元素中。
  • 如果与手风琴标题关联的手风琴面板是展开的,则标题的 button 元素的 aria-expanded 属性设置为 true。如果面板折叠的,则 aria-expanded 属性设置为 false
  • 手风琴标题包裹的 button 元素的 aria-controls 属性需设置为包含手风琴面板的内容元素的ID。
  • 如果与手风琴标题关联的手风琴面板是展开的,并且不允许该手风琴面板折叠,那标题的 button 元素的 aria-disabled 设置为 true
  • (可选)每个面板容器内容的元素,可以设置 region 角色和 aria-labelledby 属性,其值指向控制面板显示的按钮。
    • 避免在产生地标性区域扩散(landmark region proliferation,或称“标志性区域扩散”)的情况下使用 region 角色,例如在一个包含超过 6 个面板的手风琴中,且这些面板可能会同时展开。
    • 当面板包含标题元素或嵌套手风琴时,region 角色对屏幕阅读器用户感知结构特别有帮助。

3.2 Alert 警告

翻译和校对
翻译:李萌
校对:陈洁婷

Alert(警告)是一个呈现简短、重要信息的元素,以一种引起用户注意而不打断用户任务的方式。动态渲染的警告,会被大多数屏幕阅读器自动朗读,在某些操作系统中,警告会触发警告提示音。与此同时,需要注意的是屏幕阅读器不会告知用户在加载完成前已经存在的警告。

由于警告是用于提供重要和潜在的时间敏感信息,并且不会打扰用户继续工作,所以它不影响键盘焦点这点至关重要。alertdialog 则是为那些必须打断工作流的情况设计的。

避免设计自动消失的警告也同样重要。一个消失太快的警告,可能导致不符合 WCAG 2.0 成功标准第 2.2.3 条。警告引起的中断频率也是一个重要的设计考虑。频繁打断会降低视障和认知障碍用户的可用性,这让满足 WCAG 2.0 成功标准第 2.2.4 条的需求更加困难。

示例

警告示例

键盘交互

不适用。

WAI-ARIA 角色、状态和属性

该 widget 的角色为 alert

3.3 Alert and Message Dialogs 警告和消息对话框

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

警告对话框是可以中断用户工作流程的模态对话框,用以传达一个重要的信息并获得响应。下面的示例包括操作确认提示和错误消息确认。alertdialog 角色能够让辅助技术和浏览器从其他对话框中区分出警告对话框,这样就能给予警告对话框特殊对待,例如播放一个系统警告提示音。

示例

警告对话框示例:演示警告对话框的确认提示。

键盘交互

请参阅模态对话框模式键盘交互部分。

WAI-ARIA 角色、状态和属性

  • 包含对话框所有元素(包括警告消息和任何对话框按钮)的元素,具有 alertdialog 角色。
  • 角色设置为 alertdialog 的元素拥有以下情况中的一种:
    • 如果对话框具有可见的标签,则 aria-labelledby 的值指向包含对话框标题(标签)的元素。
    • 如果对话框没有可见的标签,指定一个 aria-label 的值。
  • 角色为 alertdialog 的元素,具有 aria-describedby 属性来索引包含警告信息的元素。

3.5 Button 按钮

翻译和校对
翻译:王阳
校对:陈洁婷

Button(按钮)是一个能够让用户触发一个操作或事件的 widget,例如提交表单、打开对话框、取消操作、或执行删除操作。告知用户一个按钮将打开对话框的常见方法是将“...”(省略号)添加到按钮上,例如“另存为...”。

除了常规按钮 widget 外,WAI-ARIA 还支持其他 2 种按钮类型:

说明

按钮执行的动作类型与链接的功能截然不同(参见链接模式)。Widget 的外观和角色与其提供的功能相匹配是非常重要的。但有时候某些元素会有链接的视觉样式,却执行按钮的操作。在这种情况下,为元素添加 button 角色,可以帮助辅助技术用户理解元素的功能。但是,更好的解决方案还是应该调整其视觉设计,以匹配其功能和 ARIA 角色。

示例

  • 按钮示例:将可点击的 HTML divspan 元素构成可访问的命令和切换按钮的示例。
  • 按钮示例(IDL):将可点击的HTML divspan 元素构成可访问的命令和切换按钮的例子。这个例子使用了 IDL 接口

键盘交互

当按钮获取焦点时:

  • Space:激活按钮。
  • Enter:激活按钮。
  • 按钮激活后,根据按钮操作的作用类型来设置焦点。例如:
    • 如果激活按钮时对话框打开,焦点将移动到对话框内。(见对话框模式
    • 如果激活按钮时对话框关闭,焦点通常返回到打开该对话框的按钮上,除非该对话框执行的功能会遵从上下文的逻辑,去到一个不同的元素。例如,激活对话框中的取消按钮,焦点默认返回至打开对话框的按钮上。但是,如果对话框是确认删除其来自页面的操作,焦点将会根据逻辑移动到新的上下文。
    • 如果激活按钮不会关闭当前上下文,则按钮激活后焦点仍将停留在该按钮上,例如,一个确定或重新计算的按钮。
    • 如果按钮操作会导致上下文变更,例如,移动到步骤条中的下一步,或添加其他搜索条件,此时,可以将焦点移动到新操作的起点。
    • 如果使用快捷键激活按钮,焦点通常保留在激活快捷键的上下文中。例如,如果把快捷键 Alt + U 分配给“向上”按钮,该按钮会将当前聚焦的列表项目移动到列表中的较高位置,当焦点在列表中时,按 Alt + U 不会将焦点移出列表。

WAI-ARIA 角色、状态和属性

  • 按钮具有 button 角色。
  • button 有一个可访问的标签。默认情况下,可访问名称是从按钮元素内部的所有内容计算得来。但是,可访问名称也可以通过 aria-labelledbyaria-label 提供。
  • 如果按钮有功能描述,则将按钮元素的 aria-describedby 的值设置为包含描述的元素的 ID。
  • 如果与按钮相关联的动作不可用,该按钮的 aria-disabled 设置为 true
  • 如果按钮是一个切换按钮,则其具有 aria-pressed 状态属性。按钮打开时,该状态属性的值为 true,按钮关闭时,该状态属性的值为 false

3.7 Checkbox 多选框

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

WAI-ARIA 支持两种类型的 checkbox(多选框)widget:

  1. 双态:最常见的多选框类型,它允许用户在两个状态间切换——选中、未选中。
  2. 三态:这种类型的多选框支持额外的第三种状态——部分选中。

三态多选框的一种常见使用场景是在软件安装时,一个单独的三态多选框用来代表和控制整个安装选项组的状态。并且,该组中的每个选项都可以单独使用双态多选框开启或关闭。

用户在使用三态多选框时,可以只需一个操作即可更改组中的所有选项:

示例

  • 双态多选框示例:演示简单的双态多选框。
  • 三态多选框示例: 演示一个多选框,该多选框使用 aria-checked 的 mixed 值来反映和控制 HTML fieldset 元素中一组双态 HTML 多选框的选中状态。

键盘交互

当多选框拥有焦点时,按 Space 键可以改变多选框的状态。

WAI-ARIA 角色、状态和属性

  • 多选框有 checkbox 角色。
  • 多选框有一个可访问的标签,由以下之一提供:
    • 具有 checkbox 角色的元素中包含的可见文本内容。
    • 具有 checkbox 角色的元素,其 aria-labelledby 值引用了一个可见的标签。
    • 具有 checkbox 角色的元素设置了 aria-label
  • 选中后,多选框元素的 aria-checked 状态设置为 true
  • 如果未选中,aria-checked 状态设置为 false
  • 当部分选中,aria-checked 状态设置为 mixed
  • 如果使用一个可见标签可将一组多选框标识为一个逻辑组,这些多选框应该被包含在一个具有 group 角色的元素中,且该元素的 aria-labelledby 设置为包含标签的元素的 ID。
  • 如果多选框或多选框组包括额外的相关联静态描述文案,多选框或多选框组的 aria-describedby 属性设置为包含描述元素的 ID。

3.8 ComboBox 组合框

翻译和校对
翻译:陈洁婷
校对:陈洁婷、袁野

Combobox(组合框)是具有关联弹出窗口(popup)的输入 widget,使用户能够从可能值的集合中为组合框选择值。 在有些实现中,弹出窗口呈现一组(预定义的)允许值,而在其它实现中,弹出窗口呈现一组建议值,用户可以从中选择一个建议值或键入一个值。 弹出窗口可以是 listbox(列表框)、 grid(网格)、tree(树)或 dialog(对话框)。 许多实现还包括第三个可选元素——与组合框相邻的图形打开按钮,它指示弹出窗口的可用性。 如果存在建议值,激活打开按钮将显示弹出窗口。

组合框模式支持几种可能的交互行为。 最常见的交互是文本输入。 有些组合框允许用户在组合框中键入和编辑文本,而有些组合框则不允许。 如果组合框不支持文本输入,则将其称为 select-only 组合框,这意味着用户只能通过在弹出窗口中选择值来设置组合框的值。 例如,在某些浏览器中,渲染 size="1" 的 HTML select 元素会被当成组合框呈现给辅助技术。 或者,如果组合框支持文本输入,则认为它是可编辑的。 可编辑组合框可以允许用户输入任意值,或者可以将其值限制为允许值的离散集合,在这种情况下,键入输入用于过滤弹出窗口中呈现的建议值。

弹出窗口默认状态下隐藏,即,默认为折叠状态。触发弹出窗口展开的条件会因具体实现的不同而不同。这些可能的条件包括:

组合框 widget 可以很好地用于在以下两种情况下获取用户输入:

  1. 组合框的值必须是一组预定义的允许值之一,例如,位置字段必须包含有效的位置名称。 请注意,列表框和菜单按钮模式在此场景中也很有用;组合框和替代模式的区别如下所述。
  2. 允许任意值,但向用户建议可能的值非常有价值。 例如,搜索字段可以建议类似或先前的搜索以节省用户时间。

这种由弹出窗口呈现可能值的表现及其呈现方式称为自动补全(autocomplete)行为。 组合框可以有以下四种自动补全形式:

  1. 仅支持选择(而无法编辑的)组合框:组合框是可编辑的,当触发展开弹出窗口时,无论在组合框中键入什么字符,它包含的建议值都是相同的。 例如,弹出窗口建议一组最近输入的值,并且建议值不会随着用户的输入而改变。
  2. 手动选择的列表自动补全:当触发展开弹出窗口时,它会显示建议值。如果组合框可编辑,组合框中键入的字符与建议值完全或逻辑地对应。 除非用户在弹出窗口中选择一个值,否则用户键入的字符串将成为组合框的值。
  3. 自动选择的列表自动补全:组合框是可编辑的,并且当触发展开弹出窗口时,它呈现与组合框中键入的字符完整或逻辑对应的建议值, 第一个建议会自动突出显示为已选中状态。 除非用户选择不同的建议值或更改组合框中的字符串,否则当组合框失去焦点时,自动选择的建议值将自动补全组合框并成为它的值。
  4. 具有内联自动补全功能的列表:这与"自动选择的列表自动补全"相同,但有一个附加功能。 所选建议中未由用户键入的部分(自动补全的文本)以内联方式显示在组合框中的输入光标之后。 内联自动补全的文本在视觉上突出显示并具有选定状态。

如果组合框可编辑,并且具有任何形式的列表自动补全功能,则弹出窗口可能会随着用户的键入而出现或消失。 例如,如果用户键入两个字符串,触发展开弹出窗口并显示五个建议值,但随后键入了第三个字符,形成了一个没有任何匹配建议值的字符串,那么弹出窗口可能会关闭,如果存在内联自动补全功能,内联自动补全的字符串会消失。

另外两个在视觉上也很类似并允许用户从一组离散选项中进行单项选项的 widget 是列表框菜单按钮。 组合框区别于列表框和菜单按钮的一个特性是,用户的选择可以呈现为可编辑字段中的值,这使用户能够选择部分或全部值并复制到剪贴板上。 组合框和菜单按钮可以实现让用户从允许值中探索,并且不会丢失上一次选择。 也就是说,用户可以在组合框弹出窗口或菜单中导航可用选项集,按下 Escape 可以在不更改先前输入的情况下关闭弹出窗口或菜单。 与此相反,在单选列表框的选项之间导航会立即更改其值,并且按下 Escape 不提供撤消机制。 组合框和列表框可以根据需要标记 aria-required="true",并且它们具有与其值不同的可访问名称。 因此,当辅助技术用户默认聚焦到组合框或列表框时,他们可以分别感知这些 widget 的名称和值。 但是,菜单按钮不能标记为必填,虽然它具有可访问的名称,但它没有值,因此不适合在其折叠状态下传达用户的选择。

示例

键盘交互

  • Tab:组合框在页面的 Tab sequence 中。
  • 注意:弹出指示图标或按钮(如果存在)、弹出窗口和弹出窗口的子元素将会从页面的 Tab sequence 中排除。
组合框键盘交互

焦点在组合框中:

  • Down Arrow:如果弹出窗口可用,则将焦点移动到弹出窗口中:
    • 如果自动补全行为在按下 Down Arrow 之前自动选择了建议值,则焦点置于自动选择的建议值之后的建议值上。
    • 否则,将焦点置于弹出窗口中的第一个可聚焦元素上。
  • Up Arrow(可选):如果弹出窗口可用,则将焦点放在弹出窗口中的最后一个可聚焦元素上。
  • Escape:如果弹出窗口可见,则隐藏弹出窗口。(可选)在弹出窗口是隐藏状态并按下 Escape 时,清除组合框的输入。
  • Enter:如果组合框可编辑,并且在弹出窗口中选择了自动补全的建议值,则通过将输入光标置于组合框中接受值的末尾或对该值执行默认操作来接受建议值。 例如,在即时通讯应用中,默认操作可以是将符合要求的值添加到消息接收者列表,然后清除组合框,以便用户可以添加另一个接收者。
  • 可打印字符:
    • 如果组合框可编辑,则可以在组合框中键入字符。注意,一些实现可能将某些字符视为无效字符(译者注:例如仅支持纯英文输入、纯数字输入的场景),并阻止它们的输入。
    • 如果组合框不可编辑,(可选)则将焦点移动到以键入的字符开头的建议值上。
  • 如果组合框可编辑,则它支持适用于设备平台的标准单行文本编辑键(参见下面的“说明”)。
  • Alt + Down Arrow(可选):如果弹出窗口可用但未显示,则在不移动焦点的情况下显示弹出窗口。
  • Alt + Up Arrow(可选):如果弹出窗口已显示:
    • 如果弹出窗口包含焦点,则将焦点返回到组合框。
    • 关闭弹出窗口。
说明

适用于设备平台的标准单行文本编辑键:

  1. 包括用于输入、光标移动、选择和文本操作的键。
  2. 编辑功能的标准按键分配取决于设备操作系统。
  3. 依靠浏览器提供文本编辑功能是最稳健的方法,浏览器为带有文本类型的 HTML 输入(HTML inputs)和带有 HTML contenteditable 属性的元素提供这些功能。
  4. 重要提示:确保 JavaScript 不会通过捕获用于执行这些功能的键的按键事件,进而干扰浏览器提供的文本编辑功能。
列表框弹出窗口键盘交互

焦点在列表框弹出窗口中:

  • Enter:选中列表框中的焦点选项并关闭弹出窗口,同时将相应的值填到组合框中,如果组合框可编辑,则将输入光标置在值的末尾。
  • Escape:关闭弹出窗口并将焦点返回到组合框。如果组合框可编辑,则清除组合框的内容。
  • Down Arrow:将焦点移动到并选择下一个选项。如果焦点在最后一个选项上,则将焦点返回到组合框或不执行任何操作。
  • Up Arrow:将焦点移动到并选择上一个选项。如果焦点在第一个选项上,则将焦点返回到组合框或不执行任何操作。
  • Right Arrow:如果组合框可编辑,则将焦点返回到组合框而不关闭弹出窗口,并将输入光标向右移动一个字符。 如果输入光标位于最右边字符后方,则光标不会移动。
  • Left Arrow:如果组合框可编辑,则将焦点返回到组合框而不关闭弹出窗口,并将输入光标向左移动一个字符。 如果输入光标位于最左边字符前方,则光标不会移动。
  • Home(可选):将焦点移动到并选择第一个选项,或者,如果组合框可编辑,则将焦点返回到组合框并将光标置于第一个字符之前。
  • End(可选):将焦点移动到最后一个选项,或者,如果组合框可编辑,则将焦点返回到组合框,并将光标置于最后一个字符之后。
  • 任何可打印字符:
    • 如果组合框可编辑,则在不关闭弹出窗口的同时将焦点移动到组合框上,同时键入字符。
    • 否则,将焦点移动到下一个名称以键入的字符开头的建议值上。
  • Backspace(可选):如果组合框可编辑,则将焦点返回到组合框并删除光标之前的字符。
  • Delete(可选):如果组合框可编辑,则将焦点返回到组合框,如果选择了建议值,将删除其选定状态,并删除内联自动补全的文本(如果存在)。
说明
  1. DOM 焦点保持在组合框上,辅助技术焦点通过 aria-activedescendant 实现在列表框内移动,如使用 aria-activedescendant 管理合成组件中的焦点中所述。
  2. 列表框中的选择跟随焦点(selection follows focus);列表框每次只允许为组合框选择一个建议值。
网格弹出窗口键盘交互

在网格弹出窗口中,每个建议值可以由单个单元格或整行表示。 关于网格设计的这个方面是如何影响键盘交互设计以及选择移动以响应焦点移动的方式,请参见下面的“说明”。

  • Enter:关闭弹出窗口,接受当前选定的建议值,将选定的值放置在组合框中,如果组合框可编辑,则将输入光标置于值的末尾。
  • Escape:关闭弹出窗口并将焦点返回到组合框。(可选)如果组合框可编辑,则清除组合框的内容。
  • Right Arrow:将焦点向右移动一个单元格。 (可选)如果焦点在某行中最右侧的单元格上,则焦点可以移动到下一行的第一个单元格上。 如果焦点在网格中的最后一个单元格上,则不执行任何操作或将焦点置于组合框上。
  • Left Arrow:将焦点向左移动一个单元格。 (可选)如果焦点在某行中最左侧的单元格上,则焦点可以移动到上一行的最后一个单元格上。 如果焦点位于网格中的第一个单元格,则不执行任何操作或将焦点置于组合框上。
  • Down Arrow:将焦点向下移动一个单元格。 如果焦点在网格的最后一行上,则不执行任何操作或将焦点置于组合框上。
  • Up Arrow:将焦点向上移动一个单元格。 如果焦点在网格的第一行上,则不执行任何操作或将焦点置于组合框上。
  • Page Down(可选):将焦点向下移动到作者指定(author-determined)的行数的新位置,通常表现为当前可见行中处于底部位置的行滚动至成为顶部位置的可见行之一。 如果焦点在网格的最后一行上,则焦点不移动。
  • Page Up(可选):将焦点向上移动到作者指定(author-determined)的行数的新位置,通常表现为当前可见行中处于顶部位置的行滚动至成为底部位置的可见行之一。 如果焦点在网格的第一行上,则焦点不移动。
  • Home(可选):以下二选一
    • 将焦点移动到包含焦点的行中的第一个单元格。或者,如果网格每行少于三个单元格或每行有多个建议值,则焦点可以移动到网格中的第一个单元格。
    • 如果组合框可编辑,则将焦点返回到组合框,并将光标置于第一个字符上。
  • End(可选):以下二选一
    • 将焦点移动到包含焦点的行中的最后一个单元格。或者,如果网格每行少于三个单元格或每行有多个建议值,则焦点可能会移动到网格中的最后一个单元格。
    • 如果组合框可编辑,则将焦点返回到组合框,并将光标放在最后一个字符之后。
  • Control + Home(可选):将焦点移动到第一行。
  • Control + End(可选):将焦点移动到最后一行。
  • 任何可打印字符:如果组合框可编辑,则在不关闭弹出窗口的同时将焦点移动到组合框上,同时键入字符。
  • Backspace(可选):如果组合框可编辑,则将焦点返回到组合框并删除光标之前的字符。
  • Delete(可选):如果组合框可编辑,则将焦点返回到组合框,如果选择了建议,则删除选定状态,如果存在,则删除内联自动补全的文本。
说明
  1. DOM 焦点保持在组合框上,辅助技术焦点通过 aria-activedescendant 实现在列表框内移动,如使用 aria-activedescendant 管理合成组件中的焦点中所述。
  2. 网格弹出窗口每次只允许为组合框选择一个建议值。
  3. 在网格弹出窗口中,建议值可以由单个单元格或整行表示。这一设计影响了焦点和选择的移动逻辑:
    1. 如果每个单元格包含不同的建议值:
      • 选择跟随焦点,以便选择包含焦点的单元格。
      • 水平方向键导航通常从一行绕到另一行。
      • 垂直方向键导航通常从一列绕到另一列。
    2. 如果一行中的所有单元格都包含同一建议值的信息:
      • 如果同一行中的任何单元格包含焦点,则选择包含焦点的行或选择包含建议值的单元格。
      • 水平方向键导航可能会从一行绕到另一行。
      • 垂直方向键导航不会从一列绕到另一列。
树弹出窗口键盘交互

在树弹出窗口的一些实现中,部分或全部父节点可能仅作为建议类别标签,因此它们可能不是可选值。 关于这将如何影响键盘交互设计以及选择移动以响应焦点移动的方式,请参见下面的“说明”。

焦点在垂直方向的树弹出窗口中:

  • Enter:关闭弹出窗口并接受当前选定的建议值,将选定的值放置在组合框中,如果组合框可编辑,则将输入光标置于值的末尾。
  • Escape:关闭弹出窗口并将焦点返回到组合框,(可选)同时清除组合框的内容。
  • Right Arrow
    • 焦点在闭节点(closed node)上时,展开该节点;焦点和选中态保持不变。
    • 焦点位于开节点(open node)上时,将焦点移动到第一个子节点,并选择它(如果节点可选中)。
    • 焦点在端节点(end node)上时,不执行任何操作。
  • Left Arrow
    • 焦点在开节点上时,收起该节点。
    • 焦点位于同时是端节点或闭节点的子节点上时,将焦点移动到其父节点,并选择它(如果节点可选中)。
    • 焦点位于同时是端节点或闭节点的根节点上时,不执行任何操作。
  • Down Arrow:将焦点移动到下一个可聚焦节点,无须展开或收起节点,同时选择该节点(如果节点可选中)。
  • Up Arrow:将焦点移动到上一个可聚焦节点,无须展开或收起节点,同时选择该节点(如果节点可选中)。
  • Home:将焦点移动到树中的第一个可聚焦节点,无须展开或收起节点,同时选择该节点(如果节点可选中)。
  • End:将焦点移动到树中的最后一个可聚焦节点,无须展开或收起节点,同时选择该节点(如果节点可选中)。
  • 任何可打印字符:
    • 如果组合框可编辑,则在不关闭弹出窗口的同时将焦点移动到组合框上,同时键入字符。
    • 否则,将焦点移动到下一个名称以键入的字符开头的建议值上。
说明
  1. DOM 焦点保持在组合框上,辅助技术焦点通过 aria-activedescendant 实现在列表框内移动,如使用 aria-activedescendant 管理合成组件中的焦点中所述。
  2. 树弹出窗口每次只允许为组合框选择一个建议值。
  3. 在树弹出窗口中,某些或所有父节点可能不是可选值;它们可用作建议值的类别标签。 如果焦点移动到一个不是可选值的节点,则需要满足以下三种条件之一:
    • 先前选定的节点(如果有)将保持选定状态,直到焦点移动到新的可选节点。
    • 没有选定的值。
    • 无论哪种情况,焦点和选中态在视觉上会存在明显差异,因此用户可以很容易地区分是否选择了值。
  4. 如果树中的节点水平排列(aria-orientation 设置为 horizontal):
    1. Down ArrowRight Arrow 等价,反之亦然。
    2. Up ArrowLeft Arrow 等价,反之亦然。
对话框弹出窗口键盘交互

焦点在弹出对话框中:

  • 有两种方法可以关闭弹出窗口并将焦点返回到组合框:
    1. 在对话框中执行一个动作,如激活一个按钮,为组合框指定一个值。
    2. 从对话中取消,例如,按下 Escape 或激活对话框中的取消按钮。 取消可以将焦点返回到组合框而不更改组合框值,或者将焦点返回到组合框并清除组合框。
  • 对话框实现模态对话框模式中定义的键盘交互。
说明

与其他组合框弹出窗口不同,对话框不支持 aria-activedescendant,因此 DOM 焦点将从组合框移到对话框中。

WAI-ARIA 角色、状态和属性

  • 用作输入并显示组合框值的元素具有 combobox 角色。
  • 组合框元素的 aria-controls 属性设置为引用用作弹出窗口的元素的值。 注意 aria-controls 仅在弹出窗口可见时才需要设置。但是,引用不可见的元素也是有效的。
  • 弹出窗口是具有 listboxtreegriddialog 角色的元素。
  • 如果弹出窗口的角色不是 listbox,具有 combobox 角色的元素将 aria-haspopup 属性设置为与弹出窗口类型对应的值。 也就是 aria-haspopup 属性置为 gridtree,或 dialog。 请注意,具有 combobox 角色的元素有一个隐含的 aria-haspopup 属性值为 listbox
  • 组合框弹出窗口不可见时,具有 combobox 角色的元素将 aria-expanded 属性置为 false。 当弹出窗口元素可见时,aria-expanded 置为 true。 请注意,具有 combobox 角色的元素的 aria-expanded 属性的默认值是 false
  • 组合框接收焦点时,DOM 焦点置于组合框元素上。
  • 聚焦于列表框、网格或树弹出窗口的子元素时,DOM 焦点保留在组合框上,并且组合框将 aria-activedescendant 设置为一个值,该值引用弹出窗口中的聚焦元素。
  • 对于控制列表框、网格或树弹出窗口的组合框,如果一个建议值被直观地显示为当前选定的值,包含该值的 optiongridcellrow,或 treeitemaria-selected 设置为 true
  • 如果组合框具有可见标签并且组合框元素是可以使用 HTML label 元素(例如 input 元素)标记的 HTML 元素,则使用 label 元素对其进行标记。 否则,如果组合框元素具有可见标签,则将 aria-labelledby 设置为引用标签元素的值。 否则,组合框元素的标签由 aria-label 提供。
  • 组合框元素的 aria-autocomplete 属性设置为与其自动补全行为对应的值:
    • none:显示弹出窗口时,无论组合框中键入的字符如何变化,其包含的建议值都是相同的。
    • list:当触发展开弹出窗口时,它将显示建议值。如果组合框可编辑,则值完整或逻辑对应于组合框中键入的字符。
    • both:当触发展开弹出窗口时,它呈现与组合框中键入的字符完整或逻辑对应的建议值。 此外,所选建议中尚未由用户键入的部分(称为自动补全的文本)在组合框中的输入光标之后内联显示。 内联自动补全的文本在视觉上突出显示并具有选定状态。
说明
  1. 在 ARIA 1.0 中,组合框使用 aria-owns 而不是 aria-controls 引用其弹出窗口。 虽然用户代理可能支持具有 aria-owns 的组合框,以向后兼容旧内容,但强烈建议作者使用 aria-controls
  2. 在下面列表中用于弹出窗口的角色、状态和属性文档时,请记住,组合框是一个单选 widget,在弹出窗口中,选择跟随焦点。
  3. 弹出窗口元素的角色、状态和属性在其各自的设计模式中定义:

3.9 Dialog (Modal) 对话框(模态)

翻译和校对
翻译:王阳
校对:陈洁婷、袁野

Dialog(对话框)是叠加在主窗口或另一个对话框上的窗口。Window 下的模态对话框是惰性的。也就是说,用户不能与对话框之外的内容进行交互。当前活跃窗口之外的非活跃内容,一般是模糊不清或灰暗的,这样就让这些内容很难被辨别,并且在某些实现中,如果试图与非活跃内容进行交互将导致对话框被关闭。

与非模态对话框类似,模态对话框包含其 tab sequence。也就是说,TabShift + Tab 不会把焦点移出对话框之外。但是,与非模态对话框不同的是,模态对话框没有提供在不关闭当前对话框的情况下,将键盘焦点移出对话框窗口的方法。

有一种特殊情况的对话框角色 alertdialog,它被专门设计用来将用户的注意力转移到简短、重要的信息上。警告对话框设置模式描述了它的用法。

示例

键盘交互

在以下的描述中,术语 可获取焦点的元素(tabbable element)是指 tabindex 值大于等于 0 的元素。注意,强烈不建议使用大于 0 的值。

  • 对话框打开时,焦点移动到对话框内的元素。请参阅下面“说明”模块中关于初始焦点处理的说明。
  • Tab
    • 将焦点移到对话框内的下一个可聚焦元素。
    • 如果焦点在最后一个可聚焦元素上,则将焦点移动到对话框内的第一个可聚焦元素。
  • Shift + Tab
    • 将焦点移到对话框内的上一个可聚焦元素。
    • 如果焦点在第一个可聚焦元素上,则将焦点移动到对话框内的最后一个可聚焦元素。
  • Escape:关闭对话框。
说明
  1. 对话框打开时,焦点移动到对话框中的元素上。通常,焦点最初设置在第一个可聚焦元素上。然而,最合适的焦点位置取决于内容的性质和大小。示例包括:
    • 如果对话内容包括语义结构,例如列表、表格或多个段落,需要被感知以便易于理解内容,即,如果难以将内容宣读为单个完整字符串,则建议将 tabindex="-1" 添加到内容开头的静态元素并最初聚焦该元素。这使辅助技术用户更容易通过导航语义结构来阅读内容。此外,在这种情况下,建议不要将 aria-describedby 属性应用于对话容器。
    • 如果内容足够多以至于聚焦第一个交互元素可能会导致内容的滚动到视图之外,建议将 tabindex="-1" 添加到对话框顶部的静态元素,例如对话框标题或第一段,并将焦点放在该元素上。
    • 如果对话框包含不容易逆转的过程中的最后一步,例如删除数据或完成金融交易,则建议将注意力集中在破坏性最小的操作上,尤其是当撤消操作很困难或不可能时。在这种情况下经常使用对话模式
    • 如果对话框仅限于提供附加信息或继续处理的交互,则建议将焦点设置到可能最常用的元素,例如确定继续按钮上。
  2. 对话框关闭时,焦点将返回到调用对话框的元素上,除非:
    • 唤起元素不复存在,此时,焦点设置在逻辑工作流程中的另一个元素上。
    • 包含以下场景的工作流程设计,可以聚焦到一个更加符合逻辑的、不同的元素上:
      1. 用户不太可能需要立即重新唤起对话框。
      2. 对话框中完成的任务与工作流程中的后续步骤直接相关。
      例如,网格具有关联的工具栏,其中包含用于添加行的按钮。添加行按钮打开一个对话框,提示输入行数。对话框关闭后,焦点应位于第一个新增行的第一个单元格中。
  3. 强烈建议在所有对话框中的 tab sequence 中,包含一个具有 button 角色的可见元素来关闭对话框,例如一个关闭图标,或者取消按钮。

WAI-ARIA 角色、状态和属性

  • 对话框容器元素具有 dialog 角色。
  • 操作对话框所需的所有元素都是具有角色 dialog 的元素的后代。
  • 对话框容器元素的 aria-modal 属性设置为 true
  • 对话框还包括以下其中一种情况:
  • (可选)在具有对话框角色的元素上设置 aria-describedby 属性,以指示拥有 dialog 角色的元素中,哪个元素或哪些元素包含描述对话框的主要目的或消息的内容。指定描述性元素使屏幕阅读器能够在对话框打开时识别描述以及对话框标题和最初聚焦的元素,这通常仅在描述性内容简单且无需结构信息即可轻松理解时才有用。如果对话内容包含语义结构(例如列表、表格或多个段落)需要被感知以便易于理解内容,即如果内容做为一个不间断的字符串难以理解时,则建议省略指定 aria-describedby
说明
  • 通过将 aria-modal 设置为 true,将对话框标记为模态对话框,可以防止某些辅助技术用户感知到对话框外的内容,如果一个对话框被标记为模态对话框,但对其他用户来说又不表现为模态对话框,这些辅助技术的用户将会得到不好的体验。所以,以下两点同时出现时,标记为模态对话框:
    1. 应用程序代码防止所有用户以任何方式和对话框外的元素进行交互。
    2. 视觉样式模糊了对话框外的内容。
  • ARIA 1.1 中引入的 aria-modal 属性替代了 aria-hidden,为了告知辅助技术对话框的内容是不可交互的。然而,但传统对话框的实现中,aria-hidden 被用来让对话框外的内容变得让辅助技术用户不可访问,更重要的是:
    1. 在每个包含无效内容的元素上都将 aria-hidden 设置为 true
    2. 对话框元素不是任何 aria-hiddentrue 的元素的后代。

3.10 Disclosure (Show/Hide) 展开折叠(显示/隐藏)

翻译和校对
翻译:陈洁婷
校对:陈敏、陈洁婷

展开折叠是使内容能够折叠(隐藏)或展开(可见)的 widget。它由两个元素组件:展开折叠按钮和由该按钮控制可见情况的内容部分。展开折叠按钮通常设计成典型的按钮样式,当受控内容隐藏时,有一个指向右边的箭头或三角形,它暗示激活按钮将显示其他内容。当内容可见时,箭头或三角形通常指向下方。

示例

键盘交互

展开折叠按钮获取焦点时:

  • Enter:激活展开折叠按钮,并切换由其控制显隐内容区域的可见性。
  • Space:激活展开折叠按钮,并切换由其控制显隐内容区域的可见性。

WAI-ARIA 角色、状态和属性

  • 展开折叠按钮元素具有 button 角色。
  • 内容可见时,具有 button 角色的元素将 aria-expanded 属性置为 true。 内容隐藏时,则置为 false
  • (可选)具有 button 角色元素的 aria-controls 属性的值引用一个包含所有显示或隐藏内容的元素。

3.11 Feed 信息流

翻译和校对
翻译:陈文嘉
校对:付钰、陈洁婷

Feed(信息流)是页面上可以随用户滚动自动加载新内容的部分。 Feed 中的内容部分以 article 元素的形式呈现。 因此,Feed 通常可以看成一个可以无限滚动的动态 article 列表。

Feed 是一种结构而不是 widget,这是它与其他支持随用户滚动加载数据的 ARIA 模式(例如网格)的最大不同。 因此,具有阅读模式的辅助技术(例如屏幕阅读器)在与 Feed 内容交互时默认为阅读模式。 但是,与大多数其他 WAI-ARIA 结构不同,Feed 在网页和辅助技术之间创建了互操作性合约(interoperability contract)。 规范规定了滚动交互方式,以便辅助技术用户可以阅读 article,按 article 向前和向后跳转,并在阅读模式下可靠地触发新 article 加载。

例如,购物网站上的产品页面可能有一个相关产品版块,一次显示五个相关产品。 随着用户的滚动,更多的产品被请求并加载到 DOM 中。 虽然静态模式可能已经包括一个“加载更多”按钮,该按钮支持每次加载五个新产品,但支持随着用户滚动而自动加载更多数据的动态实现能进一步简化用户体验,并减少用户想要查看五个以上新产品时所带来的延迟感。 但不幸的是,当网页基于用户滚动动态加载内容时,这可能会给使用辅助技术的用户带来可用性和互操作性(interoperability)方面的困难。

为保证辅助技术阅读模式交互的可靠性,Feed 模式在网页和辅助技术之间建立了以下互操作性协议(interoperability agreement):

  1. 在 Feed 的上下文中,网页代码负责:
    • 基于包含 DOM 焦点的 article 对内容进行适当的视觉滚动。
    • 基于包含 DOM 焦点的 article 加载或删除 Feed articles。
  2. 在 Feed 的上下文中,具有阅读模式的辅助技术负责:
    • 通过 article 元素或其子元素的 DOM 焦点确认包含读取光标的项目。
    • 提供将 DOM 焦点移动到下一个和上一个 article 的阅读模式键。
    • 提供阅读模式键,用于将读取光标和 DOM 焦点移动到 Feed 的末尾之后和开始之前。

因此,实现 Feed 模式可以让屏幕阅读器在保持阅读模式的同时,可靠地读取并触发 Feed 加载新内容。

Feed 模式的另一个特点是它能够促进辅助技术用户的快速阅读。 网页作者可为每个 article 提供可访问的名称和描述。 通过识别 article 中提供标题和主要内容的元素,辅助技术可以提供使用户能够从一个 article 跳转到另一个 article 并有效辨别哪些 article 可能值得更多关注的功能。

示例

Feed 模式的示例实现

键盘交互

Feed 模式不是桌面 GUI widget,因此 feed 角色没有使用任何公认的键盘交互约定。 建议支持以下或类似接口。

当焦点在 Feed 内部时:

  • Page Down:将焦点移至下一个 article。
  • Page Up:将焦点移至上一个 article。
  • Control + End:将焦点移动到 Feed 之后的第一个可聚焦元素。
  • Control + Home:将焦点移动到 Feed 之前的第一个可聚焦元素。
说明
  1. 由于缺乏公认的键盘交互约定,提供易于发现的键盘接口文档尤其重要。
  2. 在某些情况下,Feed 可能包含嵌套的 Feed。 例如,社交媒体 Feed 中的 article 可以包含对该 article 评论的 Feed。 要导航嵌套的 Feed ,用户需要先将焦点移到嵌套的 Feed 内。 支持导航嵌套 Feed 的选择包括:
    • 用户通过 Tab 将焦点从包含 article 的内容移动到嵌套 Feed 中。 如果 article 包含大量的链接、按钮或其他 widget,这可能会很慢。
    • 提供将焦点从包含在 article 中的元素移动到嵌套 Feed 中的第一个项目的键,例如,Alt + Page Down
    • 为了继续读取外部 Feed ,Control + End 将焦点移动到外部 Feed 中的下一个 article。
  3. 在极少数情况下,Feed 中的项目可能包含某些 widget,这些 widget 也使用了上述提到的导航键,那么 Feed 导航键也将操作包含的 widget 。如果用户希望实现在 Feed 中导航,需要先将焦点移动到不使用 Feed 导航键的元素上。

WAI-ARIA 角色、状态和属性

  • 包含 Feed article 集合的元素具有 feed 角色。
  • 如果 Feed 具有可见标签,则 feed 元素的 aria-labelledby 属性引用包含标题的元素。 否则,feed 元素使用 aria-label 属性声明标签。
  • Feed 的所有内容单元都包含在具有 article 角色的元素中。 Feed 中的所有内容都包含在 article 元素中。
  • 每个 article 元素都有 aria-labelledby 属性,指向 article 内部可以被用作唯一标识的元素。
  • aria-describedby 属性是可选的,但强烈建议每个 article 元素都声明该属性,并通过引用 article 内的一个或多个元素作为 article 的主要内容。
  • 每个 article 元素具有 aria-posinset 属性,该属性值表示其在 Feed 中的位置。
  • 每个 article 元素将 aria-setsize 属性设置为表示已加载的 article 总数或 Feed 中 article 的总数,这主要取决于哪个值对用户更有帮助。如果 Feed 中的总数不确定,可将 aria-setsize 属性的值设为 -1
  • 当从 feed 中添加或删除 article 元素,并且需要进行多次 DOM 操作时,在更新操作期间,需要将 feedaria-busy 属性设置为 true。请注意,请务必在完成更新操作后将 aria-busy 置为 false,否则更新操作可能对某些辅助技术用户不可见。

3.12 Grids : Interactive Tabular Data and Layout Containers 网格:交互式表格数据和布局容器

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

Grid(网格)widget 是一个容器,使用户能够使用方向导航键(如方向键、HomeEnd 键)来导航它所包含的信息或交互式元素。作为一个提供灵活键盘导航的通用容器组件,它可以满足各种各样的需求。它的用途可以简单到将一组多选框或导航链接进行分组,也可以复杂到创建一个功能齐全的电子表格应用程序。虽然 WAI-ARIA 属性的名称中使用了“行(row)”和“列(column)”这两个词,辅助技术在描述和呈现具有 grid 角色元素的逻辑结构时也使用了这两个词,但在一个元素上使用 grid 角色并不一定意味着其视觉呈现是表格形式的。

当内容以表格形式呈现时,在选择实施这种 grid 模式或表格模式时要考虑以下因素:

grid 模式的使用大致分为两类:展示表格信息(数据网格,data grids)和分组其他 widget(布局网格,layout grids)。尽管数据网格和布局网格都采用了相同的 ARIA 角色、状态和属性,但它们在内容和 purpose surface factors 的不同,是键盘交互设计中需要考虑的重要因素。为了解决这些因素,下面两节将分别描述数据网格和布局网格的键盘交互模式。

示例

  • 布局网格示例:这是三个用于布局 widget 的网格示例实现,包括导航链接的集合、消息收件人列表和一组搜索结果。
  • 数据网格示例:网格的三个示例实现,包括与呈现表格信息相关的功能,如内容编辑、排序和列隐藏。
  • 高级数据网格示例:这个网格示例的行为和功能类似于典型的电子表格,包括选择单元格和行。

呈现表格信息的数据网格

grid 可用于显示具有列标题、行标题或两者兼有的表格信息。如果表格信息是可编辑或可互动的,grid 模式就特别有用。例如,当数据元素是指向更多信息的链接时,与其将它们呈现在一个静态的表格里并将链接包含在 tab sequence 中,不如实现 grid 模式,为用户提供对网格内容直观、高效的键盘导航,以及更短的页面 tab sequence。grid 还可以提供其他功能,如单元格内容编辑、选择、剪切、复制和粘贴。

在网格中,每一个单元格都包含一个可聚焦的元素,不管单元格的内容是否可编辑或可交互,他们本身就是可聚焦的。但有一个例外:如果列或行的标题单元格不提供排序或过滤等功能,则它们不需要可聚焦。支持所有单元格接收或包含键盘焦点一个重要原因是,当用户与网格交互时,屏幕阅读器通常会处于其应用阅读模式,而不是文档阅读模式。在应用模式下,屏幕阅读器用户只能听到可聚焦元素(focusable elements)和用以标记可聚焦元素的内容(content that labels focusable elements)。所以,屏幕阅读器用户可能会无意中忽略网格中包含的那些不可聚焦的,或不是用来标记列或行的元素。

数据网格的键盘交互

以下按键通过在网格的单元格中移动焦点来提供网格导航。当网格中的元素获得焦点时,实现网格(模式)使以下按键命令可用,例如,在用户用 Tab 键将焦点移至网格后。

  • Right Arrow:将焦点向右移动一个单元格。如果焦点在行最右边的单元格上,焦点不移动。
  • Left Arrow:将焦点向左移动一个单元格。如果焦点在行最左边的单元格上,焦点不移动。
  • Down Arrow:将焦点向下移动一个单元格。如果焦点在列最下方的单元格上,焦点不移动。
  • Up Arrow:将焦点向上移动一个单元格。如果焦点在列最上方的单元格上,焦点不移动。
  • Page Down:将焦点向下移动到作者指定(author-determined)的行数,通常表现为当前可见行中处于底部位置的行(bottom row)滚动至成为顶部位置的可见行之一。如果焦点在网格的最后一行,焦点不移动。
  • Page Up:将焦点向上移动到作者指定的行数,通常表现为当前可见行中处于顶部位置的行(top row)滚动至成为底部位置的可见行之一。如果焦点在网格的第一行,焦点不移动。
  • Home:将焦点移至包含焦点那一行的第一个单元格。
  • End:将焦点移至包含焦点那一行的最后一个单元格。
  • Control + Home:将焦点移至第一行的第一个单元格。
  • Control + End:将焦点移至最后一行的最后一个单元格。
说明
  • 当上述网格导航键移动焦点时,焦点是设置在单元格内的元素还是网格单元格上,取决于单元格内容。请参阅聚焦于单元格还是单元格内的元素
  • 当导航键,如方向键(arrow keys),在单元格之间移动焦点时,它们不能用于在单元格内操作组合框(combobox)或移动编辑光标。如果需要这种功能,请查阅在单元格内部编辑和导航
  • 如果导航功能可以动态地在 DOM 中添加更多的行或列,那么将焦点移到网格的开头或结尾的按键事件,如 Control + End,可能会将焦点移到 DOM 中的最后一行,而不是后端数据中最后的可用行。

如果一个网格支持选择单元格、行或列,那以下按键通常用于这些功能:

  • Control + Space:选择包含焦点的列。
  • Shift + Space:选择包含焦点那一行。如果网格包含一列用于选择行的多选框,当焦点不在多选框上时,此组合键可以作为选中多选框的快捷方式。
  • Control + A:选择所有单元格。
  • Shift + Right Arrow:将选择范围向右扩展一个单元格。
  • Shift + Left Arrow:将选择范围向左扩展一个单元格。
  • Shift + Down Arrow:将选择范围向下延伸一个单元格。
  • Shift + Up Arrow:将选择范围向上延伸一个单元格。
说明

关于剪切、复制和粘贴键的分配,请查阅 § 6.8 常用功能的按键分配约定

用于分组 widget 的布局网格

grid 模式可以用来分组一组交互式元素,如链接、按钮或多选框。由于整个网格中只有一个元素包含在 tab sequence 中,用网格分组可以极大减少页面上的 tab 步骤。如果在列表滚动浏览时,(列表)能从一个大的数据集中动态地加载更多的元素,比如购物网站上连续的建议产品列表,这就特别有价值。如果像这样的列表中的元素都在 tab sequence 中,键盘用户实际上会被困于列表中。如果组中的任何元素还具有在悬停时出现的相关元素,那么 grid 模式对于提供对用户界面的这些上下文元素的键盘访问也很有用。

与用于展示数据的网格不同,用于布局的 grid 不一定有标记为行或列的标题单元格,可能只包含单行或单列。即使它包含多行和多列,它也可能呈现为一个单一的、逻辑上同质化的元素集合。例如,消息的收件人列表可以是一个网格,每个单元格都包含一个代表收件人的链接。网格最初可能只有一行,但随着收件人的增加,会变成多行。在这种情况下,网格导航键也可以换行,这样用户就可以通过按 Right ArrowDown Arrow 从头到尾阅读列表。虽然这种类型的焦点移动环绕(focus movement wrapping)在布局网格中非常有用,但如果用在数据网格中就会让人觉得迷惑,特别是对辅助技术使用者而言。

因为方向键是用来在 grid 内移动焦点的,如果 grid 所包含的组件不需要方向键来操作,那么网格的构建和使用都会更容易。如果网络单元格包含像列表框这样的元素,就需要一个额外的按键命令来聚焦和激活列表框,以及一个恢复网格导航功能的命令。支持这一需求的方法在在单元格内部编辑和导航这一节中描述。

布局网格的键盘交互

以下按键通过在网格的单元格中移动焦点来提供网格导航。当网格中的元素获得焦点时,实现网格(模式)使以下按键命令可用,例如,在用户用 Tab 键将焦点移至网格后。

  • Right Arrow:将焦点向右移动一个单元格。(可选)如果焦点在行最右边的单元格上,焦点可以移动到下一行的第一个单元格。如果焦点在网格的最后一个单元格上,焦点不移动。
  • Left Arrow:将焦点向左移动一个单元格。(可选)如果焦点在行最左边的单元格上,焦点可以移动到上一行的最后一个单元格。如果焦点在网格中的第一个单元格上,焦点不移动。
  • Down Arrow:将焦点向下移动一个单元格。(可选)如果焦点在列最下方的单元格上,焦点可以移动到下一列的最上方单元格。如果焦点在网格的最后一个单元格上,焦点不移动。
  • Up Arrow:将焦点向上移动一个单元格。(可选)如果焦点在列最上方的单元格上,焦点可以移动到上一列的最下方单元格。如果焦点在网格中的第一个单元格上,焦点不移动。
  • Page Down(可选):将焦点向下移动到作者指定的行数,通常表现为当前可见行中处于底部位置的行(bottom row)滚动至成为顶部位置的可见行之一。如果焦点在网格的最后一行,焦点不移动。
  • Page Up(可选):将焦点向上移动到作者指定的行数,通常表现为当前可见行中处于顶部位置的行(top row)滚动至成为底部位置的可见行之一。如果焦点在网格的第一行,焦点不移动。
  • Home:将焦点移动到包含焦点那一行的第一个单元格。(可选)如果网格只有一列或者每行少于三个单元格,焦点可以移到网格中的第一个单元格。
  • End:将焦点移动到包含焦点那一行的最后一个单元格。(可选)如果网格只有一列或每行少于三个单元格,焦点可以转移到网格的最后一个单元格。
  • Control + Home(可选):将焦点移到第一行的第一个单元格。
  • Control + End(可选):将焦点移至最后一行的最后一个单元格。
说明
  • 当上述网格导航键移动焦点时,焦点是设置在单元格内的元素还是网格单元格上,取决于单元格内容。请参阅聚焦于单元格还是单元格内的元素
  • 当导航键,如方向键(arrow keys),在单元格之间移动焦点时,它们不能用于在单元格内操作组合框(combobox)或移动编辑光标。如果需要这种功能,请查阅在单元格内部编辑和导航
  • 如果导航功能可以动态地在 DOM 中添加更多的行或列,那么将焦点移到网格的开头或结尾的按键事件,如 Control + End,可能会将焦点移到 DOM 中的最后一行,而不是后端数据中最后的可用行。

对于一个布局网格来说,提供选择单元格功能并不常见。不过,如果需要的话,以下按键通常用于这些功能:

  • Control + Space:选择包含焦点的列。
  • Shift + Space:选择包含焦点的行。如果网格包括一列用于选择行的多选框,当焦点不在多选框上时,这个键可以作为选中多选框的快捷方式。
  • Control + A:选择所有单元格。
  • Shift + Right Arrow:将选择范围向右扩展一个单元格。
  • Shift + Left Arrow:将选择范围向左扩展一个单元格。
  • Shift + Down Arrow:将选择范围向下扩展一个单元格。
  • Shift + Up Arrow:将选择范围向上扩展一个单元格。
说明

关于剪切、复制和粘贴键的分配,请查阅 § 6.8 常用功能的按键分配约定

键盘交互 - 设置焦点和在单元格内导航

本节介绍了数据网格和布局网格模式所共有的键盘交互设计的两个重要方面:

  1. 在响应网格导航键事件时,选择单元格或单元格内的元素来接收焦点。
  2. 启用网格导航键,用于与单元格内的元素交互。
聚焦于单元格还是单元格内的元素

对于辅助技术用户来说,导航网格时的体验质量,在很大程度上取决于单元格包含的内容和键盘焦点的设置。例如,如果某单元格中包含一个按钮,而网格导航键将焦点放在单元格而不是按钮上,此时屏幕阅读器会读取按钮的标签,但不会告诉用户按钮的存在。

有两种最佳的单元格设计和聚焦行为组合:

  1. 如果单元格包含 widget,其操作不需要方向键和网格导航键,则将焦点设置在该 widget 上。这种 widget 的示例包括链接(link)、按钮(button)、菜单按钮(menubutton)、切换按钮(toggle button)、单选按钮(radio button,而非单选组 radio group)、开关(switch)和多选框(checkbox)。
  2. 如果单元格包含文本或单个图形,网格导航键将焦点设置在该单元格上。

虽然任何 widget、文本和图形的组合都可以包含在一个单元格中,但如果网络没有遵循这两种单元格设计和焦点移动模式中的任一种,会给作者、用户或两者都增加复杂性。下面示例的参考实现展示了一些使其他单元格设计尽可能无障碍的策略,但最广泛的无障碍体验可能还是源于应用上述两种模式。

在单元格内部编辑和导航

虽然导航键,如方向键,是将焦点从一个单元格移动到另一个单元格,但它们不能用来在单元格内执行操作组合框或移动编辑光标等动作。用户可能需要使用网格导航键来操作单元格内的元素,如果一个单元格包含:

  1. 可编辑的内容。
  2. 多个 widget。
  3. 一个在其交互模型中会用到方向键的 widget,如单选组(radio group)或滑块(slider)。

以下是用于禁用和恢复网格导航功能的常用键盘约定。

  • Enter:禁用网格导航以及:
    • 如果单元格包含可编辑的内容,则将焦点置于输入栏(input field)中,如textbox。如果输入栏的是一个单行文本栏,随后按回车键可以恢复网格导航功能,或者将焦点移到邻近单元格的输入栏。
    • 如果单元格包含一个或多个 widget,则将焦点放在第一个 widget 上。
  • F2
    • 如果单元格包含可编辑的内容,则将焦点置于输入栏中,如 textbox。再按一次 F2 键可恢复网格导航功能。
    • 如果单元格包含一个或多个 widget,则将焦点放在第一个 widget 上。再按一次 F2 键可恢复网格导航功能。
  • 字母数字键:如果单元格包含可编辑的内容,将焦点置于输入栏中,如 textbox

禁用网格导航时,导航行为的常规变化包括:

  • Escape:恢复网格导航。如果正在编辑内容,也可能撤销编辑。
  • Right Arrow 或者 Down Arrow:如果单元格包含多个 widget,则将焦点移至单元格内的下一个 widget,(可选)如果焦点在最后一个 widget 上,回到第一个 widget 。否则,将键盘事件传递给焦点 widget 。
  • Left Arrow 或者 Up Arrow:如果单元格包含多个 widget,则将焦点移至单元格内的前一个 widget,(可选)如果焦点在第一个 widget 上,回到最后一个 widget 。否则,将键盘事件传递给焦点 widget 。
  • Tab:将焦点移至网格中的下一个 widget。(可选)焦点可能在单个单元格内或网格自身内部循环流动。
  • Shift + Tab:将焦点移至网格中的上一个 widget。(可选)焦点可能在单个单元格内或网格自身内部循环流动。

WAI-ARIA 角色、状态和属性

  • 网格容器有 grid 角色。
  • 每个行容器都有 row 角色,它是 grid 元素或 rowgroup 角色元素的 DOM 子元素,或由其拥有。
  • 每个单元格都是 row 元素的 DOM 子元素,或由其拥有,并具有以下角色之一:
    • 如果单元格包含列的标题或标题信息,则为 columnheader
    • 如果单元格包含行的标题或标题信息,则为 rowheader
    • 如果单元格不包含列或行的标题信息,则为 gridcell
  • 如果用户界面中有一个元素作为网格的标签,则在网格元素上设置 aria-labelledby,其值指向该标签元素。否则,通过 aria-label 为网格元素指定一个标签。
  • 如果网格具有标题或描述,则在网格元素上设置 aria-describedby,其值指向包含描述的元素。
  • 如果网格提供排序功能,则按照网格和表格属性所述,需要在已排序列或行的标题单元格元素上,为 aria-sort 属性设置为一个适当的值。
  • 如果网格支持选择,当选中某个单元格或某行时,被选中的元素的 aria-selected 设置为 true。如果网格支持列选择,并且有一列被选中,那么列中所有单元格的 aria-selected 都设置为 true
  • 如果网格提供内容编辑功能,并且包含了在某些条件下可能禁用编辑功能的单元格,那么在禁用编辑的单元格上将 aria-readonly 设置为 true。如果禁用所有单元格的编辑功能,那么可以在网格元素上将 aria-readonly 设置为 true。不提供编辑功能的网格,其任何元素上都不设置 aria-readonly 属性。
  • 如果存在某些行或列在 DOM 中隐藏或不存在的情况,例如,滚动时动态加载数据,或者网格提供隐藏行或列的功能,那么按照网格和表格属性所述,应用以下属性。
  • 如果网格包含跨越多行或多列的单元格,并且如果 grid 角色未应用于 HTML table 元素,那么按照网格和表格属性所述,应该应用 aria-rowspanaria-colspan 属性。
说明
  • 如果具有 grid 角色的元素是 HTML table 元素,则无须对行和单元格应用 ARIA 角色,因为 HTML 元素具有隐含的 ARIA 语义。例如,HTML <TR> 隐含的 ARIA 角色是 row。由 HTML table 元素构建的 grid,如果包括跨多行或多列的单元格,必须使用 HTML 的 rowspancolspan 属性(来定义),而不能使用 aria-rowspanaria-colspan 属性。
  • 如果行或单元格通过 aria-owns 包含在网格中,它们将在 grid 元素的 DOM 子元素之后呈现给辅助技术,除非 DOM 子元素也包含在 aria-owns 属性中。

3.14 Listbox 列表框

翻译和校对
翻译:李萌
校对:陈洁婷

Listbox(列表框)widget 呈现了一个选项列表,并允许用户选择一个或多个选项。允许选择一个选项的列表框是一个单选列表框,允许选择多个选项的列表框是一个多选列表框。

屏幕阅读器显示列表框时,他们可能会呈现列表中每个选项的名称、状态和位置。选项的名称是由浏览器计算出来的字符串,通常根据选项元素的内容计算。纯字符串(flat string)名称不包含任何语义信息。因此,如果选项包含语义元素,例如标题,屏幕阅读器用户是无法访问到该语义的。另外,列表框角色传达给辅助技术的交互模型不支持与选项内的元素交互。由于列表框 widget 的这些特性,它并没有提供一种可访问方式来呈现包含交互式元素(interactive element,例如链接、按钮或多选框)的列表。要呈现包含交互式元素的列表,请参阅 grid 模块。

为了让屏幕阅读器用户容易感知和理解,请避免使用非常长的选项名称。阅读选项时,选项的整个名称会作为单个语音单元朗读。如果单次按键操作会朗读大量信息,用户将难以理解。长名称通过增加朗读中断来抑制信息的感知,因为用户通常不得不重新朗读整个选项。而且,如果用户不理解屏幕阅读器说了什么,他们很难在列表框 widget 中实现按字、词、短语朗读。

如果选项集中每个选项名称都以使用相同的单词或短语开头,也会显著降低键盘和屏幕阅读器用户的可用性。对屏幕阅读器用户来说,滚动列表找到特定选项是非常费时的,因为他们必须在听到每个选项的差异之前重复听到某个单词或短语。例如,有一个选择城市的列表框,其选项的每个城市名称前面都有国家名称,如果每个国家都列出了很多城市,屏幕阅读器用户不得不在听完国家名称之后才听到城市名称。这种情况最好是有两个列表框,一个用于选择国家,一个用于选择城市。

示例

键盘交互

对于垂直向的列表框:

  • 单选列表框获取焦点:
    • 如果在列表框获取焦点之前没有选中任何选项,则将焦点置于第一个选项上。(可选)自动选中第一个选项。
    • 如果在列表框获取焦点之前选中了一个选项,则将焦点置于所选的选项上。
  • 多选列表框获取焦点:
    • 如果在列表框获取焦点之前没有选中任何选项,则将焦点置于第一个选项上,选中状态不自动改变。
    • 如果在列表框获取焦点之前已选中一个或多个选项,则将焦点置于列表中第一个选中的选项上。
  • Down Arrow:将焦点移到下一个选项。(可选)在单选列表框中,选择也可以随焦点移动。
  • Up Arrow:将焦点移至前一个选项。(可选)在单选列表框中,选择也可以随焦点移动。
  • Home(可选):将焦点移至第一个选项。(可选)在单选列表框中,选择也可以随焦点移动。对于有五个以上选项的列表,强烈建议支持这个键。
  • End(可选):将焦点移至最后一个选项。(可选)在单选列表框中,选择也可以随焦点移动。对于有五个以上选项的列表,强烈建议支持这个键。
  • 推荐所有列表框都支持 Type-ahead,尤其是那些超过七个选项的列表框:
    • 键入一个字符:焦点移动到下一个名称以键入的字符开头的项目。
    • 快速连续地输入多个字符:焦点移动到下一个名称以键入的字符串开头的项目。
  • 多选:作者可以实现两种交互模式中的任何一种来支持多重选择:一种是不要求用户在浏览列表时按住修饰键(如 ShiftControl)的推荐模式,另一种是要求在浏览时按住修饰键的替代模式,以避免丢失选中状态。
    • 推荐选择模式——无须在移动焦点时按住修饰键:
      • Space:切换焦点选项的选择状态。
      • Shift + Down Arrow(可选):将焦点移动到下一个选中项,并且切换选项的选中状态。
      • Shift + Up Arrow(可选):将焦点移到上一个选中项,并且切换选项的选中状态。
      • Shift + Space(可选):选择从最近选中的选项到焦点选项的连续选项。
      • Control + Shift + Home(可选):选择从焦点选项到第一个选项的所有选项,(可选)将焦点移到第一个选项上。
      • Control + Shift + End(可选):选择从焦点选项到最后一个选项的所有选项,(可选)将焦点移到最后一个选项。
      • Control + A(可选):选择列表中的所有选项。(可选)如果选中了所有选项,它也可能取消选择所有选项。
    • 替代选择模式——在不按住 ShiftControl 修饰键的情况下移动焦点,会取消选中除了焦点节点以外所有已选中的选项:
      • Shift + Down Arrow:将焦点移到下一个选项并切换选项的选择状态。
      • Shift + Up Arrow:将焦点移到上一个选项并切换选项的选择状态。
      • Control + Down Arrow:将焦点移到下一个选项但不改变选项的选择状态。
      • Control + Up Arrow:将焦点移到上一个选项但不改变选项的选择状态。
      • Control + Space:改变焦点选项的选择状态。
      • Shift + Space(可选):选择从最近选中的选项到焦点选项的连续选项。
      • Control + Shift + Home(可选):选择从焦点选项到第一个选项的所有的选项。
      • Control + Shift + End(可选):选择从焦点选项到最后一个选项的所有选项。
      • Control + A(可选):选择列表中的所有选项。(可选)如果选中了所有选项,它也可能取消选择所有选项。
说明
  1. DOM 焦点(焦点元素,the active element)在功能上与选中状态不同。更多细节请查阅关于聚焦和选中之间差异的描述
  2. listbox 角色支持 aria-activedescendant 属性,在实现键盘导航时,它提供了一种在 option 元素之间移动 DOM 焦点的替代方法。详情请参阅使用 aria-activedescendant 管理合成组件中的焦点
  3. 在单选列表框中,移动焦点可以选择性地取消先前选中的选项,并选择新的焦点选项。这种选择模型称之为“选择跟随焦点”(selection follows focus)。选择跟随焦点在某些情况下可能非常有用,而在其他情况下会严重降低可访问性。请参阅决定何时让选择自动跟随焦点了解更多指导。
  4. 如果选择或取消选择所有选项是一个重要功能,为这些操作实现单独的控件,如“全选”和“取消全选”按钮,可以极大改善可访问性。
  5. 水平排列的列表框选项:
    1. Down Arrow 的作用与上述 Right Arrow 相同,反之亦然。
    2. Up Arrow 的作用与上述 Left Arrow 相同,反之亦然。

WAI-ARIA 角色、状态和属性

  • 包含或拥有所有列表框选项的元素具有 listbox 角色。
  • 列表框中的每个选项都具有 option 角色,并且选项由以下其中一种元素包含或拥有:
    • 具有 listbox 角色的元素。
    • 具有 group 角色的元素,其包含在具有 listbox 角色的元素中或由其拥有。
  • 包含在一个 group 中的选项称为分组选项(grouped options),形成所谓的选项组(option group)。如果一个列表框包含分组选项,那么:
    • 所有选项组至少包含一个选项。
    • 每个选项组都有一个通过 aria-labelaria-labelledby 提供的可访问名称。
  • 如果具有 listbox 角色的元素不是另一个 widget 的一部分,比如组合框,那么有一个由 aria-labelledby 引用的可见标签,或由 aria-label 属性指定的值。
  • 如果列表框支持选择多个选项,具有 listbox 角色元素的 aria-multiselectable 属性置为 true。否则,aria-multiselectable 设置为 false,或隐含默认值为 false
  • 每一个可选择选项的选择状态都用 aria-selectedaria-checked 表示:
    • 如果选择状态用 aria-selected 表示,则不为任何选项指定 aria-checked。或者,如果选择状态用 aria-checked 表示,则不为任何选项指定 aria-selected。关于具体应该使用哪个属性,以及在同一个列表框中可能允许同时使用两种属性的不寻常条件的细节,请参见下面的“说明”。
    • 如果选中任何选项,每个被选中的选项都有 aria-selectedaria-checked 设置为 true。如果具有 listbox 角色的 aria-multiselectable 不为 true,则每次只能选择一个选项。
    • 所有可选择但未被选中的选项,其 aria-selectedaria-checked 设置为 false
    • 请注意,除了在选择跟随焦点的列表框中,选中状态与焦点是不同的。更多细节请查阅关于聚焦和选中之间差异的描述,以及决定何时让选择自动跟随焦点
  • 如果由于用户滚动时发生动态加载,DOM 中未能展示可选项的完整集合,需要为每个选项设置 aria-setsizearia-posinset 属性。
  • 如果选项是水平排列的,那么具有 listbox 角色元素的 aria-orientation 设置为 horizontal。列表框的 aria-orientation 的默认值是 vertical
说明
  1. 在选择用 aria-selectedaria-checked 表示选择时,要考虑的一些因素是:
    • 一些设计系统对单选 widget 使用 aria-selected,对多选 widget 使用 aria-checked。在没有其他因素使另一种约定更合适的情况下,这是一个推荐的约定。
    • 指示语言(language of instructions)和界面外观(appearance of the interface)可能表明某属性比另一个属性更合适。例如,指示是否说要“选择”项目?或者,选择的视觉指示器(visual indicator)是一个多选标记吗?
    • 在整个网站或应用程序中采用一致的选择模型约定是很重要的。
  2. 允许一个列表框同时包含 aria-selectedaria-checked 的条件是极其罕见的。强烈建议避免设计一个需要多于一种状态的列表框 widget。如果要在一个列表框中使用这两种状态,需要满足以下所有条件:
    • aria-selected 的含义和作用与用户界面中的 aria-checked 的含义和作用不同。
    • 用户界面使每个状态的意义和作用显而易见。
    • 用户界面为控制每种状态提供了单独的方法。
  3. 如果在列表框元素上设置了 aria-owns,用于包括不属于容器的 DOM 子元素,这些元素将按照它们被引用的顺序出现在阅读顺序中,并在任何属于 DOM 子元素的项目之后。管理焦点的脚本需要确保视觉焦点顺序与这个辅助技术的阅读顺序相匹配。

3.17 Meter 仪表

翻译和校对
翻译:姜天意
校对:陈洁婷、袁野

Meter(仪表)用于图形化地表示一个在固定区间内波动的数值。 例如,仪表可用于描述设备当前电量的百分比或汽车的油位。

说明
  • meter 不应用于表达像目前的世界人口这样的数值,因为其最大值是没有意义的。
  • meter 不应用于指示进度,如加载或任务完成百分比。 要表达进度,请使用角色为 progressbar 的组件。

示例

仪表示例

键盘交互

不适用。

WAI-ARIA 角色、状态和属性

  • 构成仪表的元素具有 meter 角色。
  • 设置仪表组件的 aria-valuenow 属性为一个十进制值,用于表示仪表的当前值,其值介于 aria-valueminaria-valuemax 属性值之间。
  • 设置仪表组件的 aria-valuemin 属性为一个十进制值,其值小于 aria-valuemax 属性的值。
  • 设置仪表组件的 aria-valuemax 属性为一个十进制值,其值大于 aria-valuemin 属性的值。
  • 辅助设备通常会将 aria-valuenow 属性的值以百分比形式显示。 当用户难以理解仪表上百分比形式的值时,可通过设置 aria-valuetext 属性为一个字符串,使仪表的值更容易理解。例如可以设置 aria-valuetext="剩余50%(预计还能使用6小时)" 来表达电池电量的值。
  • 如果仪表组件具有一个可见的标签,则角色为 meter 的元素可以设置 aria-labelledby 属性来引用这个标签。如果没有,则通过设置 aria-label 属性给当前元素加上一个标签。

3.18 Radio Group 单选组

翻译和校对
翻译:王阳
校对:陈洁婷、袁野

单选组是一组可选中的按钮,被称为单选按钮,每次只能选中一个按钮。一些实现可能会初始化该组,使所有按钮处于未选中状态,以便强制用户在经过工作流中的某个点之前选中其中一个按钮。

示例

键盘交互

单选组不包含在工具栏中

本节介绍了为大多数单选组实现的键盘交互。对于嵌套在工具栏中的单选组的特殊情况,请参考后续相关章节(Toolbar)中键盘交互的描述。

  • TabShift + Tab:焦点移入或者移出单选组。当焦点移入单选组时:
    • 如果其中一个单选按钮被选中,那将焦点设置在选中的单选按钮上。
    • 如果没有单选按钮被选中,那将焦点设置在单选组的第一个单选按钮上。
  • Space:如果当前聚焦的按钮还没有被选中,则选中当前单选按钮。
  • Right ArrowDown Arrow:移动焦点到组合中的下一个单选按钮,取消选中先前聚焦的按钮,并选中新聚焦的按钮。如果焦点在最后一个按钮上,焦点移动到第一个按钮。
  • Left ArrowUp Arrow:移动焦点到组合中的上一个单选按钮,取消选中先前聚焦的按钮,并选中新聚焦的按钮。如果焦点在第一个按钮上,焦点移动到最后一个按钮。
说明

上面描述的初始焦点行为,与一些浏览器为本地 HTML 单选组提供的行为略有不同。在某些浏览器中,如果没有选中任何一个单选按钮,使用 Shift + Tab 将焦点移动到单选按钮组,焦点将会置于最后一个单选按钮,而不是第一个单选按钮上。

单选组包含在工具栏中

因为方向键是用来在工具栏的各个元素之间进行导航的,Tab 键可以将焦点移入和移出工具栏。所以当一个单选组嵌套在一个工具栏内时,单选组的键盘交互与不在工具栏内的单选组的交互略有不同。例如,用户需要能够在所有的工具栏元素之间进行导航,包括单选按钮,而不需要改变哪个单选按钮被选中。所以,当用方向键在工具栏中浏览一个单选组时,被选中的按钮不会改变。嵌套在工具栏中的单选组的键盘交互方式如下。

  • Space:如果聚焦的单选按钮没有被选中,则取消选中当前的单选按钮,并将当前聚焦的单选按钮改为选中状态。否则,不做任何事情。
  • Enter(可选):如果聚焦的单选按钮没有被选中,则取消选中当前的单选按钮,并将当前聚焦的单选按钮改为选中状态。否则,不做任何事情。
  • Right Arrow
    • 当焦点在一个单选按钮上,并且该单选按钮不是单选组中的最后一个单选按钮时,将焦点移到下一个单选按钮。
    • 当焦点在单选组的最后一个单选按钮上,并且该单选按钮不是工具栏中的最后一个元素时,将焦点移动到工具栏中的下一个元素。
    • 当焦点在单选组的最后一个单选按钮上,并且该单选按钮也是工具栏中的最后一个元素时,将焦点移动到工具栏中的第一个元素。
  • Left Arrow
    • 当焦点在一个单选按钮上,而该单选按钮不是单选组中的第一个单选按钮时,将焦点移至前一个单选按钮。
    • 当焦点在单选组的第一个单选按钮上,并且该单选按钮不是工具栏中的第一个元素时,将焦点移动到工具栏中的前一个元素。
    • 当焦点在单选组的第一个单选按钮上,并且该单选按钮也是工具栏中的第一个元素时,将焦点移动到工具栏中的最后一个元素。
  • Down Arrow(可选):将焦点移到单选组中的下一个单选按钮。如果焦点在单选组的最后一个单选按钮上,则将焦点移到该组的第一个单选按钮上。
  • Up Arrow(可选):将焦点移到单选组中的前一个单选按钮。如果焦点在单选组的第一个单选按钮上,则将焦点移到该组的最后一个单选按钮上。
说明

工具栏中的单选按钮经常以一种看起来更像切换按钮的方式来设计。例如,请参阅简单的编辑器工具栏示例

WAI-ARIA 角色、状态和属性

  • 单选按钮包含在一个具有 radiogroup 角色的元素中或为其所有。
  • 每个单选按钮的都具有 radio 角色。
  • 如果一个单选按钮被选中,该 radio 元素的 aria-checked 设置为 true。如果它没有被选中,则 aria-checked 设置为 false
  • 每个 radio 元素都由其内容标记,由可见标签 aria-labelledby 引用,或者有一个用 aria-label 指定的标签。
  • radiogroup 元素具有由 aria-labelledby 引用的可见标签,或者用 aria-label 指定的标签。
  • 如果存在提供与单选组或每个单选按钮相关的额外信息的元素,这些元素被 radiogroup 元素或 radio 元素的 aria-describedby 属性引用。

3.19 Slider 滑块

翻译和校对
翻译:王阳
校对:陈洁婷、袁野

滑块是一个让用户从给定范围内选择值的输入控件。滑块通常有一个滑块拇指控件,可以沿着条形或轨道移动以改变滑块的值。

警告

一些基于触摸的辅助技术的用户在使用实现此滑块模式的 widget 时可能会遇到困难,因为他们的辅助技术为操作滑块提供的手势可能尚未生成必要的输出。为了改变滑块的值,基于触摸的辅助技术需要响应用户手势,通过合成按键事件来增加和减少值。这是一个新的约定,某些辅助技术可能还没有完全实现。在考虑将其整合到生产系统之前,作者应在以触控为主要输入机制的设备上使用辅助技术对滑块 widget 进行全面测试。

示例

  • 颜色查看器滑块示例:基本的水平滑块,为选色器设置数值。
  • 垂直温度计滑块示例:展示了使用 aria-orientation 指定垂直方向,使用 aria-valuetext 传达温度输入的计量单位。
  • 评分滑块示例:水平滑块,展示了使用 aria-valuetext 来传达五星评分量表输入的当前值和最大值。
  • 媒体播放进度滑块示例:水平滑块,展示了使用 aria-valuetext 来传达媒体播放器中时间的当前值和最大值,通过将总秒数转换为分和秒,使辅助技术用户容易理解这些值。

键盘交互

  • Right Arrow:将滑块的值增加一步。
  • Up Arrow:将滑块的值增加一步。
  • Left Arrow:将滑块的值减少一步。
  • Down Arrow:将滑块的值减少一步。
  • Home:将滑块设置为其取值范围内允许的第一个值。
  • End:将滑块设置为其取值范围内允许的最后一个值。
  • Page Up(可选):增加滑块的值,增加的量要大于 Up Arrow 所做的变化。
  • Page Down(可选):减少滑块的值,减少的量要大于 Down Arrow 所做的变化。
说明
  1. 焦点置于滑块上(鼠标使用者会移动的视觉对象,也被称为拇指控件)。
  2. 在某些情况下,将上述按键的数值变化方向颠倒,例如,让 Up Arrow 减少数值,可以创造一种更直观的体验。

WAI-ARIA 角色、状态和属性

  • 可聚焦滑块控件元素具有 slider 角色。
  • 滑块元素的 aria-valuenow 属性设置为滑块当前值的十进制值。
  • 滑块元素的 aria-valuemin 属性设置为滑块所允许的最小十进制值。
  • 滑块元素的 aria-valuemax 属性设置为滑块所允许的最大十进制值。
  • 如果 aria-valuenow 的值对用户不够友好,例如,用数字来表示星期几,可以将 aria-valuetext 属性置为使滑块值易于理解的字符串,例如,“星期一”。
  • 如果滑块存在可见标签,则通过 aria-labelledby 属性引用该标签。否则,则由 aria-label 属性提供标签。
  • 垂直方向滑块的 aria-orientation 设置为 vertical。滑块的 aria-orientation 的默认值是 horizontal

3.20 Slider (Multi-Thumb) 滑块(多拇指控件)

翻译和校对
翻译:周子旭
校对:芮焕明、陈洁婷、袁野

多拇指控件滑块是具有两个或以上拇指控件的滑块,每个拇指控件可以在一组值中选择一个值。 例如,搜索产品时,用户可以使用两个拇指控件来设置搜索价格的上下限。 使用双拇指控件滑块的拇指控件设置最大和最小值时,不允许拇指控件交换(位置)。 例如,在价格范围选择器中,用于设置价格下限的拇指控件,可以设置的最大值受到用于设置价格上限拇指控件当前取值的限制。 反过来,用于设置价格上限的拇指控件,可以设置的最小值也会受到用于设置价格下限拇指控件当前取值的限制。 不过在一些多拇指控件滑块组中,每个拇指控件可以设置一个独立于其他拇指控件的值。

警告

一些基于触摸的辅助技术的用户在使用实现此滑块模式的 widget 时可能会遇到困难,因为他们的辅助技术为操作滑块提供的手势可能尚未生成必要的输出。为了改变滑块的值,基于触摸的辅助技术需要响应用户手势,通过合成按键事件来增加和减少值。这是一个新的约定,某些辅助技术可能还没有完全实现。在考虑将其整合到生产系统之前,作者应在以触控为主要输入机制的设备上使用辅助技术对滑块 widget 进行全面测试。

示例

多拇指滑块示例:演示用于设置酒店预订价格范围的双拇指控件滑块组。

键盘交互

  • 每个拇指控件都在页面的 tab sequence 中,并且具有与单拇指控件滑块相同的键盘交互。
  • 无论滑块内的数值和在滑块中的视觉位置如何变化,tab 顺序(order)都保持不变。例如,如果更改拇指控件的值,使其移动并经过其他拇指控件,tab 顺序不变。

WAI-ARIA 角色、状态和属性

  • 可聚焦滑块控件元素都具有 slider 角色。
  • 滑块元素的 aria-valuenow 属性设置为滑块当前值的十进制值。
  • 滑块元素的 aria-valuemin 属性设置为滑块所允许的最小十进制值。
  • 滑块元素的 aria-valuemax 属性设置为滑块所允许的最大十进制值。
  • 当另一滑块的范围(例如,最小值和/或最大值)取决于滑块的当前值时,当该值改变时,滑块的 aria-valueminaria-valuemax 的值也会跟随更新。
  • 如果 aria-valuenow 的值对用户不够友好,例如,用数字来表示星期几, 可以将 aria-value 属性置为使滑块值易于理解的字符串,例如,“星期一”。
  • 如果滑块存在可见标签,则通过 aria-labelledby 属性引用该标签。否则,则由 aria-label 属性提供标签。
  • 垂直方向滑块的 aria-orientation 属性值为 vertical。 滑块的 aria-orientation 属性的默认值是 horizontal

3.21 Spinbutton 调节按钮

翻译和校对
翻译:张晨
校对:陈洁婷、袁野

调节按钮是一个输入 widget,它的值为一组离散值或离散值范围。例如,在一个允许用户设置闹钟的 widget 中,包含一个调节按钮,它允许用户选择一个从 0 到 59 的数字。

调节按钮通常有三个组件,包括显示当前值的文本字段(text field)、增加按钮和减少按钮。文本字段通常是唯一可获得焦点的组件,因为增加和减少功能可以通过键盘的箭头键实现。通常情况下,文本字段还允许用户直接编辑值。

如果调节按钮的可调节范围很大,也可以同时支持用默认步长(step)、更大步长来更改值。例如,在闹钟示例中,用户可以通过 Up ArrowDown Arrow 每次变更 1 分钟,也能通过 Page UpPage Down 每次变更 10 分钟。

示例

日期选择器调节按钮示例:由三个调节按钮组成的日期选择器,分别代表日、月和年。

键盘交互

  • Up Arrow:增加值。
  • Down Arrow:减少值。
  • Home:如果调节按钮具有最小值,则将值设置为最小值。
  • End:如果调节按钮具有最大值,则将值设置为最大值。
  • Page Up (可选):按比 Up Arrow 更大的步长增加值。
  • Page Down(可选):按比 Down Arrow 更大的步长减小值。
  • 如果调节按钮文本字段允许直接编辑值,则支持以下键:
    • 适用于设备平台的标准单行文本编辑键(参见下面的“说明”)。
    • 可打印字符:在文本框中键入字符。请注意,许多实现只允许某些字符作为值的一部分,并阻止输入任何其他字符。例如,小时和分钟微调器只允许从 0 到 59 的整数值、冒号“:”以及字母“AM”和“PM”。输入任何其他字符都不会更改文本字段的内容或调节按钮的值。
说明
  1. 在操作过程中,焦点保持在文本字段上。
  2. 适用于设备平台的标准单行文本编辑键:
    1. 包括用于输入、光标移动、选择和文本操作的键。
    2. 编辑功能的标准按键分配取决于设备操作系统。
    3. 依靠浏览器提供文本编辑功能是最稳健的方法,浏览器为带有文本类型的 HTML 输入(HTML inputs)和支持 HTML contenteditable 属性的元素提供这些功能。
    4. 重要提示:确保 JavaScript 不会通过捕获用于执行这些功能的键的按键事件,进而干扰浏览器提供的文本编辑功能。

WAI-ARIA 角色、状态和属性

  • 作为调节按钮的可聚焦元素具有 spinbutton 角色。 它通常是支持文本输入的元素。
  • 调节按钮的 aria-valuenow 属性设置为一个十进制值,表示调节按钮的当前值。
  • 调节按钮的 aria-valuemin 属性设置为一个十进制值,如果它具有已知的最小值,则表示调节按钮的最小允许值。
  • 调节按钮的 aria-valuemax 属性设置为一个十进制值,如果它具有已知的最大值,则表示调节按钮的最大允许值。
  • 如果 aria-valuenow 的值不便于用户理解,例如,用数字来表示星期几,则可以将 aria-valuetext 属性设置为使调节按钮的值易于理解的字符串,如“星期一”。
  • 有一个调节按钮
  • 如果值超出了允许范围,可将调节按钮元素的 aria-invalid 设置为 true。 请注意,大多数实现会阻止输入无效值,但在某些情况下,阻止所有无效输入可能不切实际。

3.22 Switch 开关

翻译和校对
翻译:陈洁婷
校对:李萌、陈洁婷、袁野

Switch(开关)是一个输入 widget,允许用户选择以下两个值之一:打开关闭。开关类似于多选框切换按钮,都可以用作二进制输入(binary inputs)。它们间的区别在于开关只能用于二进制输入,而多选框和切换按钮允许实现选择支持第三种状态(中间状态)。多选框可以选中未选中,可选地还能允许部分选中状态。切换按钮可以按下未按下,可选地还能允许部分按下状态。

开关、多选框和切换按钮都支持二进制输入,因此在功能上它们通常可以互相替换。选择最符合用户界面的视觉设计和语义角色,例如,在某些情况下,打开或关闭选中或未选中在语义上更容易被辅助技术用户理解,反之亦然。以用于打开或关闭灯光(turning lights on or off)的 widget 为例,屏幕阅读器朗读出 灯光,已打开(Lights switch on) 比已选中,灯光,多选框(Lights checkbox checked)更友好。但是,如果相同的输入位于一组标有以下哪项必须包括在你的起飞前程序中?的输入中,已选中,灯光,多选框会更好理解。

重要提示:改变开关的状态不会导致开关的标签发生改变,这一点至关重要。

示例

键盘交互

  • Space:当焦点在开关上时,改变开关的状态。
  • Enter(可选):当焦点在开关上时,改变开关的状态。

WAI-ARIA 角色、状态和属性

  • 开关具有 switch 角色。
  • 开关具有由以下任一选项提供的可访问标签:
    • 具有 switch 角色的元素中包含的可见文本内容。
    • 在具有 switch 角色的元素上设置 aria-labelledby,其值引用可见标签的元素的 ID。
    • 在具有 switch 角色的元素上设置 aria-label
  • 当开关状态为 on 时,aria-checked 设置为 true
  • 当开关状态为 off 时,aria-checked 设置为 false
  • 如果是 HTML input[type="checkbox"] 开关元素,则使用 HTML 的 checked 属性而非 aria-checked 属性。
  • 如果一组开关显示为一个带有可见标签的逻辑组,则:
    • 这组开关包含在具有 group 角色的元素中,其中元素的 aria-labelledby 属性设置为包含组标签的元素的 ID。
    • 该集合包含在 HTML fieldset 元素中,而集合的标签包含在 HTML legend 元素中。
  • 如果开关或开关组在表现上包含与之相关的附加描述性静态文本,则将开关或开关组的 aria-descriptionby 属性设置为包含描述元素的 ID。

3.23 Table 表格

翻译和校对
翻译:梁崇
校对:陈洁婷、袁野

就像 HTML table 元素一样,WAI-ARIA 表格是包含一行或多行的静态表格结构,每行包含一个或多个单元格;它不是交互式 widget。因此,其单元格不支持聚焦、选择。 网格模式可用于实现具有表格结构的交互式 widget。

但是,表格通常用于呈现信息和交互式 widget 的组合。 由于表格不是 widget,因此表格中包含的每个 widget 都是页面 tab sequence 中的一个独立的断点。 如果 widget 的数量很大,用网格替换表格可以极大地减少页面 tab sequence 的长度,因为网格是一个可以包含其他 widget 的复合 widget。

说明

与其他具有等效原生宿主语言的 WAI-ARIA 角色一样, 强烈建议作者尽可能使用原生 HTML table 元素。 这对于 table 角色尤其重要,因为它是 WAI-ARIA 1.1 的新功能。 因此,建议使用目标受众可能使用的每种浏览器和辅助技术组合来进行彻底的测试实施。

示例

  • 表格示例:基于 HTML 的 divspan 元素实现的 ARIA 表格。
  • 可排序表格示例:基本 HTML 表格,说明了在可排序列的标题中实现 aria-sort

键盘交互

不适用。

WAI-ARIA 角色、状态和属性

  • 表格容器具有 table 角色。
  • 每个行容器具有 row 角色,并且是 table 元素或具有 rowgroup 角色元素的 DOM 子节点被其拥有。
  • 每个单元格都是 row 元素的 DOM 子节点或被 row 元素拥有,并具有以下角色之一:
    • 如果单元格包含列的标题或标题信息,则为 columnheader
    • 如果单元格包含行的标题或标题信息,则为 rowheader
    • 如果单元格不包含列或行标题信息,则为 cell
  • 如果用户界面中有一个元素用作表格的标签,则在表格元素上设置 aria-labelledby,其值引用对应的标签元素。 否则,使用 aria-label 为表格元素指定标签。
  • 如果表格有标题或描述,则在表格元素上设置 aria-descriptionby,其值引用对应的包含描述的元素。
  • 如果表格包含可排序的列或行,则按照网格和表格属性一节所述,将可排序列或行的标题单元格元素上的 aria-sort 设置为适当值。
  • 如果存在某些行或列在 DOM 中隐藏或不存在的条件,例如,页面上有用于隐藏行或列的 widget,则按照网格和表格属性一节所述,应用以下属性:
  • 如果表包含跨多行或多列的单元格,则按照网格和表格属性中所述,应用 aria-rowspanaria-colspan 属性。
说明

如果行或单元格通过 aria-owns 包含在表格中, 它们将在 table 元素的 DOM 子节点之后呈现给辅助技术,除非 DOM 子节点也包含在 aria-owns 属性中。

3.24 Tabs 选项卡

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

选项卡是一组分层的内容部分,称为选项卡面板,每次只显示一个内容面板。每个选项卡面板都有一个与之关联的选项卡元素,选项卡激活时显示面板。选项卡元素的列表沿着当前显示面板的一条边(最常见的是顶部边缘)排列。

用来描述这种设计模式的术语包括:

选项卡或选项卡界面
一组选项卡元素和它们关联的选项卡面板。
选项卡列表
一组包含在 tablist 元素中的选项卡元素。
tab(选项卡)
选项卡列表中的一个元素,作为其中一个选项卡面板的标签,可以被激活以显示该面板。
tabpanel(选项卡面板)
包含与选项卡关联的内容的元素。

当选项卡界面初始化时会显示其中一个选项卡面板,与其关联的选项卡被特殊样式化以表示它是激活的。用户激活某个选项卡元素时,先前展开的选项卡面板隐藏,与该选项卡关联的选项卡面板变得可见,该选项卡被认为是“激活的”(active)。

示例

键盘交互

对于选项卡列表:

  • Tab
    • 当焦点移至选项卡列表时,将焦点置于激活的 tab 元素上。
    • 当选项卡列表包含焦点时,除非选项卡面板内包含有意义内容的第一个元素是可聚焦的,否则将焦点移至选项卡列表之外页面 tab sequence 中的下一个元素。
  • 焦点在水平选项卡列表中的选项卡元素上时:
    • Left Arrow:将焦点移至前一个选项卡。如果焦点在第一个选项卡元素上,则将焦点移至最后一个选项卡。(可选)激活新的焦点选项卡(见下面的“说明”)。
    • Right Arrow:将焦点移至后一个选项卡。如果焦点在最后一个选项卡元素上,将焦点移至第一个选项卡。(可选)激活新的焦点选项卡(见下面的“说明”)。
  • 焦点在水平或垂直方向的选项卡列表中的选项卡上时:
    • Space or Enter:如果选项卡在聚焦时没有被自动激活,则激活该选项卡。
    • Home(可选):将焦点移至第一个选项卡。也可以激活新的焦点选项卡(见下面的“说明”)。
    • End(可选):将焦点移至最后一个选项卡。也可以激活新的焦点选项卡(见下面的“说明”)。
    • Shift + F10:如果选项卡有一个联动的弹出式菜单(popup menu),则打开该菜单。
    • Delete(可选):如果允许删除,则删除(关闭)当前选项卡元素及其关联的选项卡面板,将焦点设置在被删除的选项卡之后的选项卡上,(可选)激活新的焦点选项卡。如果被删除的选项卡后面没有选项卡,例如,被删除的选项卡是一个从左到右的水平选项卡列表中最右边的选项卡,则将焦点设置在被删除的选项卡前面,(可选)激活该选项卡。如果应用程序允许删除所有的选项卡,并且用户删除了选项卡列表中剩下的最后一个选项卡,应用程序会将焦点移至另一个提供逻辑工作流的元素上。作为 Delete 的替代方案,或者除了支持 Delete 之外,删除功能可以在上下文菜单中使用。
说明
  1. 只要与选项卡关联的面板显示时没有明显延迟,建议(支持)选项卡在获取焦点时自动激活,这通常要求选项卡面板的内容被预先加载。否则,自动激活会减慢焦点移动,这极大阻碍了用户在选项卡列表中有效导航的能力。关于更多的指导,请查阅 § 6.4 决定何时让选择自动跟随焦点
  2. 选项卡列表的 aria-orientation 设置为 vertical 时:
    1. Down Arrow 的作用与上述 Right Arrow 的作用相同。
    2. Up Arrow 的作用与上述 Left Arrow 的作用相同。
  3. 水平的选项卡列表不会监听 Down ArrowUp Arrow ,所以即使焦点在选项卡列表内,这些键也可以提供正常的浏览器滚动功能。

WAI-ARIA 角色、状态和属性

  • 作为选项卡容器的元素具有 tablist 角色。
  • 每个作为选项卡的元素都具有 tab 角色,并且包含在具有 tablist 角色的元素中。
  • 每个包含 tab (关联的)内容面板的元素都具有 tabpanel 角色。
  • 如果选项卡列表有一个可见的标签,那么 tablist 角色元素的 aria-labelledby 设置为指向标签元素的值。否则,tablist 元素通过 aria-label 来设置标签。
  • 每个具有 tab 角色的元素都有指向其关联 tabpanel 元素的 aria-controls 属性。
  • 已激活选项卡元素上的 aria-selected 状态置为 true,所有其他选项卡元素上则将其置为 false
  • 每个具有 tabpanel 角色的元素都有指向其关联 tab 元素的 aria-labelledby 属性。
  • 如果 tab 元素有弹出式菜单,其 aria-haspopup 属性设置为 menutrue
  • 如果 tablist 元素是垂直方向呈现的,其 aria-orientation 属性设置为 verticaltablist 元素的 aria-orientation 属性默认值是 horizontal

3.25 Toolbar 工具栏

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

Toolbar(工具栏)是一个容器,用于组合一系列控件(controls),如按钮、菜单按钮或多选框等。

当一组控件在视觉上呈现为一个组时,工具栏的作用可以用来向屏幕阅读器用户传达该组的存在和目的。同时将控件分组到工具栏中,也是减少键盘界面中 tab sequence 数量的一种有效方式。

最大化工具栏 widget 的优势(有几种方式):

示例

工具栏示例:通过 roving tabindex 来管理焦点的工具栏,并包含以下几种类型的控件,包括切换按钮、单选按钮、一个菜单按钮、一个调节按钮(spin button)、一个多选框和一个链接。

键盘交互

  • TabShift + Tab:将焦点移入和移出工具栏。当焦点进入工具栏时:
    • 如果焦点第一次进入工具栏,焦点设置在第一个未被禁用的控件上。
    • 如果工具栏以前有被聚焦过,则焦点可以设置在上一次拥有焦点的控件上。或者设置在第一个未被禁用的控件上。
  • 对于水平工具栏(默认):
    • Left Arrow:将焦点移到前一个控件。(可选)焦点可以从第一个元素跳转到最后一个元素。
    • Right Arrow:将焦点移到后一个控件。(可选)焦点可以从最后一个元素跳转到第一个元素。
  • Home(可选):将焦点移至第一个元素。
  • End(可选):将焦点移至最后一个元素。
说明
  1. 如果工具栏中的控件是垂直排列的:
    1. Down Arrow 的作用与上述 Right Arrow 作用相同。
    2. Up Arrow 的作用与上述 Left Arrow 作用相同。
  2. 一般来说,禁用元素在键盘导航时是不可聚焦的。然而,在控件功能的可见性至关重要的情况下,如果禁用控件可以被聚焦,那么屏幕阅读器用户就更有可能意识到它们的存在。想了解更多的指引,请参阅 § 6.7 禁用控件的可聚焦性
  3. 在快速访问工具栏很重要的应用程序中,比如从文本区域访问编辑器的工具栏,建议使用一个文档化的快捷键(documented shortcut key),(支持)将焦点从相关的上下文移动到其相应的工具栏。

WAI-ARIA 角色、状态和属性

  • 作为工具栏容器的元素具有 toolbar 角色。
  • 如果工具栏有一个可见的标签,则由工具栏元素上的 aria-labelledby 属性所引用。否则,工具栏元素由 aria-label 属性提供标签。
  • 如果控件是垂直排列的,那么工具栏元素的 aria-orientation 设置为 vertical。默认情况下工具栏是水平排列的。

3.26 Tooltip Widget 文字提示 Widget

翻译和校对
翻译:王阳
校对:陈洁婷、袁野

注:关于此设计模式的工作正在进行中,尚未达成工作组共识。进度和问题请关注 issue 128

文字提示是元素获得键盘焦点或鼠标悬停其上时,显示的与元素相关的信息弹窗。它通常在一小段延迟后出现,并在按下 Escape 或鼠标移出时消失。

文字提示 widget 不会获得焦点。如需实现鼠标悬停后出现可聚焦元素的内容,可以通过非模态对话框模式实现。

示例

文字提示的开发示例相关工作请看 issue 127

键盘交互

Escape:关闭文字提示。

说明
  1. 文字提示显示时,焦点停留在触发元素上。
  2. 如果触发元素获得焦点时将唤起文字提示,则当它失去焦点时(onBlur)时文字提示消失。如果鼠标移入元素时唤起文字提示,则鼠标移出时文字提示消失。

WAI-ARIA 角色、状态和属性

  • 作为 Tooltip 容器的元素具有角色 tooltip
  • 触发 Tooltip 的元素使用 aria-describedby 索引文字提示元素。

3.27 Tree View 树形视图

翻译和校对
翻译:李萌
校对:陈洁婷、袁野

树形视图 widget 展示了一个分层的列表。层次结构中的任何项目都可以有子项,可以展开或折叠有子项的项目以显示或隐藏子项。例如,在一个使用树形视图显示文件夹和文件的文件系统导航器中,可以展开代表文件夹的项目以显示文件夹的内容,这些内容可能是文件、文件夹或两者皆有。

理解树形视图的术语包括:

节点(Node)
树形组件的一个项目。
根节点(Root Node)
位于树形组件最基础的节点;它可能有一个或多个子节点,但没有父节点。
子节点(Child Node)
有父节点的节点;任何不是根节点的节点都是子节点。
端节点(End Node)
没有任何子节点的节点;端节点可以是根节点,也可以是子节点。
父节点(Parent Node)
具有一个或多个子节点的节点。它可以是打开(展开)的或关闭(折叠)的。
开节点(Open Node)
展开的父节点,其子节点是可见的。
闭节点(Closed Node)
折叠的父节点,其子节点是不可见的。

当使用键盘在树形组件导航时,一个可视化的键盘指示器会告知用户哪个节点是聚焦的。如果树形组件每次只允许用户选择一个项目进行操作,则称为单选树(single-select tree)。在一些单选树的实现中,焦点项也具有选中状态;这种表现称为选择跟随焦点(selection follows focus)。然而,在多选树中,用户可以一个动作选择一个以上的项目,选中状态往往独立于焦点。例如,在一个典型的文件系统导航器中,用户可以移动焦点来选择任何数量的文件以进行下一步操作,如复制或移动。视觉设计时区分已选中的项目和拥有焦点的项目是很重要的。想了解与之相关的更多细节,请参阅关于聚焦和选中之间差异的描述,以及决定何时让选择自动跟随焦点

示例

键盘交互

对于一个垂直方向的树形组件:

  • 单选树获得焦点时:
    • 如果在树获得焦点之前没有选择任何节点,则将焦点置于第一个节点上。
    • 如果在树获得焦点之前选择了一个节点,则将焦点置于选中的节点上。
  • 多选树获得焦点时:
    • 如果在树获得焦点之前没有选择任何节点,则将焦点置于第一个节点上。
    • 如果在树收到焦点之前已选中一个或多个节点,则将焦点置于第一个选中的节点上。
  • Right arrow
    • 焦点在闭节点上时,打开该节点,且焦点不移动。
    • 焦点在开节点上时,焦点移到第一个子节点上。
    • 焦点在端节点上时,不做任何事情。
  • Left arrow
    • 焦点在开节点上时,关闭该节点。
    • 焦点在子节点上,而这个子节点同时也是端节点或闭节点时,焦点移至其父节点。
    • 焦点在根节点上,而这个根节点同时也是端节点或闭节点时,不做任何事情。
  • Down Arrow:将焦点移动到下一个可聚焦的节点,而无须打开或关闭节点。
  • Up Arrow:将焦点移动到上一个可聚焦的节点,而无须打开或关闭节点。
  • Home:将焦点移动到第一个可聚焦的节点,而无须打开或关闭节点。
  • End:将焦点移动到最后一个可聚焦的节点,而无须打开或关闭节点。
  • Enter:激活一个节点,即执行其默认动作。对于父节点,一个可能的默认动作是打开或关闭节点。在一个选项不跟随焦点(见下面的“说明”)的单选树中,默认的操作通常是选择焦点节点。
  • 建议所有树结构支持 Type-ahead,特别是那些超过 7 个节点的树结构:
    • 键入一个字符:焦点移动到下一个名称以键入的字符开头的节点。
    • 快速连续地输入多个字符:焦点移动到下一个名称以键入的字符串开头的节点。
  • *(可选的):展开与当前节点同级的所有兄弟节点。
  • 在多选树中选择:作者可以实现两种交互模式中的任何一种来支持多重选择:一种是不要求用户在浏览列表时按住修饰键(如 ShiftControl)的推荐模式,另一种是要求在浏览时按住修饰键的替代模式,以避免丢失选中状态。
    • 推荐选择模式——无须按下修饰键:
      • Space:切换焦点节点的选择状态。
      • Shift + Down Arrow(可选):将焦点移动到下一个节点,并且切换其选择状态。
      • Shift + Up Arrow(可选):将焦点移动到上一个节点,并且切换其选择状态。
      • Shift + Space(可选):选择从最近选中的节点到焦点节点的连续节点。
      • Control + Shift + Home(可选):选择从焦点节点到第一个节点的所有节点,(可选)将焦点移到第一个节点上。
      • Control + Shift + End(可选):选择从焦点节点到最后一个节点的所有节点,(可选)将焦点移到最后一个节点。
      • Control + A(可选):选择列表中的所有节点。(可选)如果所有节点是选中状态,它也可能取消选中所有节点。
    • 替代选择模式——在不按住 ShiftControl 修饰键的情况下移动焦点,会取消选中除了焦点节点以外所有已选中的节点:
      • Shift + Down Arrow:将焦点移到下一个节点并切换节点的选择状态。
      • Shift + Up Arrow:将焦点移到上一个节点并切换节点的选择状态。
      • Control + Down Arrow:将焦点移到下一个节点但不改变节点的选择状态。
      • Control + Up Arrow:将焦点移到上一个节点但不改变节点的选择状态。
      • Control + Space:改变焦点节点的选择状态。
      • Shift + Space(可选):选择从最近选中的节点到焦点节点的连续节点。
      • Control + Shift + Home(可选):选择从焦点节点到第一个节点的所有的节点。
      • Control + Shift + End(可选):选择从焦点节点到最后一个节点的所有节点。
      • Control + A(可选):选择列表中的所有节点。(可选)如果所有节点是选中状态,它也可能取消选中所有节点。
说明
  1. DOM 焦点(焦点元素,the active element)在功能上与选中状态不同。更多的细节,请参阅关于聚焦和选中之间差异的描述
  2. tree 角色支持 aria-activedescendant 属性,在实现键盘导航时,它提供了一种在 treeitem 元素之间移动 DOM 焦点的替代方法。详情请参阅使用 aria-activedescendant 管理合成组件中的焦点
  3. 在单选树中,移动焦点可以选择性地取消选择先前选中的节点,并选择新的焦点节点。这种选择模式称为“选择跟随焦点”(selection follows focus)。选择跟随焦点在某些情况下可能非常有用,而在其他情况下会严重降低可访问性。请参阅决定何时让选择自动跟随焦点了解更多指导。
  4. 如果选择或取消选择所有节点是一个重要的功能,为这些操作实现单独的控件,如“全选”和“取消全选”按钮,可以极大改善可访问性。
  5. 水平排列的树节点:
    1. Down Arrow 的作用与上述 Right Arrow 相同,反之亦然。
    2. Down Arrow 的作用与上述 Left Arrow 相同,反之亦然。

WAI-ARIA 角色、状态和属性

  • 所有的树节点都包含在一个具有 tree 角色的元素中或为其所有。
  • 每个树节点元素都有 treeitem 角色。
  • 每个根节点都包含在具有 tree 角色的元素中,或者由 tree 元素上设置的 aria-owns 属性引用。
  • 每个父节点都包含或拥有一个具有 group 角色的元素。
  • 每个子节点都包含在一个具有 group 角色的元素中或为其所有,并且该元素包含在该子节点的父节点中或为其所有。
  • 每个具有 treeitem 角色的父节点元素,节点关闭时 aria-expanded 属性置为 false,节点打开时置为 true。端节点没有 aria-expanded 属性,因为如果它们有这个属性,辅助技术会错误地将它们描述为父节点。
  • 如果树支持选择多个的节点,则具有 tree 角色元素的 aria-multiselectable 属性设置为 true。否则,aria-multiselectable 属性置为 false,或者隐含默认值为 false
  • 每个可选择的节点的选择状态都用 aria-selectedaria-checked 表示:
    • 如果选择状态用 aria-selected 表示,则不为任何节点指定 aria-checked。或者,如果选择状态用 aria-checked 表示,则不为任何节点指定 aria-selected。关于具体应该使用哪个属性,以及在同一个树形组件中可能允许同时使用两种属性的不寻常条件的细节,请参见下面的“说明”。
    • 如果选中任何节点,每个已选中的节点都有 aria-selectedaria-checked 设置为 true。如果具有 tree 角色元素 aria-multiselectable 不为 true,则每次只能选择一个节点。
    • 所有可选择但未被选中的节点,其 aria-selectedaria-checked 置为 false
    • 如果树中包含不可选择的节点,那么这些节点上无须设置 aria-selectedaria-checked 属性。
    • 注意,除了在选择状态跟随焦点的树形组件中,选中状态一般与焦点(在样式上)存在差异。更多的细节,请参阅关于聚焦和选中之间差异的描述,以及决定何时让选择自动跟随焦点
  • 具有 tree 角色的元素有一个由 aria-labelledby 引用的可见标签或为 aria-label 指定的值。
  • 如果由于用户在树中移动焦点或滚动而发生动态加载,DOM 中未能展示可用节点的完整集合,则需要为每个节点指定 aria-levelaria-setsizearia-posinset 属性。
  • 如果 tree 元素是水平方向的,其 aria-orientation 设置为 horizontaltree 元素的 aria-orientation 属性的默认值是 vertical
说明
  1. 在选择用 aria-selectedaria-checked 表示选择时,要考虑的一些因素是:
    • 一些设计系统对单选 widget 使用 aria-selected,对多选 widget 使用 aria-checked。在没有其他因素使另一种约定更合适的情况下,这是一个推荐的约定。
    • 指示语言(language of instructions)和界面外观(appearance of the interface)可能表明某属性比另一个属性更合适。例如,指示是否说要“选择”项目?或者,选择的视觉指示器(visual indicator)是一个多选标记吗?
    • 在整个网站或应用程序中采用一致的选择模型约定是很重要的。
  2. 允许一个树形同时包含 aria-selectedaria-checked 的条件是极其罕见的。强烈建议避免设计一个需要多于一种状态的树形 widget。如果要在一个树形中使用这两种状态,需要满足以下所有条件:
    • aria-selected 的含义和作用与用户界面中的 aria-checked 的含义和作用不同。
    • 用户界面使每个状态的意义和作用显而易见。
    • 用户界面为控制每种状态提供了单独的方法。
  3. 如果在树形元素上设置了 aria-owns,用于包括不属于容器 DOM 子元素的元素,这些元素将按照它们被引用的顺序出现在阅读顺序中,并在任何属于 DOM 子元素的项目之后。管理焦点的脚本需要确保视觉焦点顺序与这个辅助技术的阅读顺序相匹配。

3.28 Treegrid 树形网格

翻译和校对
翻译:陈洁婷
校对:陈洁婷、袁野

Treegrid(树形网格)widget 是一种由可编辑或可交互的表格信息组成的分层数据网格。 层次结构中的任何行都可以拥有子行,拥有子行的行可以展开或折叠以显示或隐藏子行。 例如,在用于显示 e-mail 邮件和邮件回复讨论列表的的 treegrid 中,带有回复的邮件统一放在可以展开的行中,以显示回复信息。

在树形网格中,行和单元格都是可聚焦的。无论单个单元格内容是否可编辑、可交互,每一行和每个单元格都包含一个可聚焦元素或本身是可聚焦的。 有一个例外情况是:如果列标题单元格不提供排序或筛选等功能,则它们不需要可聚焦。 支持所有单元格接收或包含键盘焦点一个重要原因是,当用户与网格交互时,屏幕阅读器通常处于其应用阅读模式,而不是文档阅读模式。 在应用模式下,屏幕阅读器用户只能听到可聚焦元素(focusable elements)和用以标记可聚焦元素的内容(content that labels focusable elements)。 因此,屏幕阅读器用户可能会无意中忽略 treegrid 中包含的那些不可聚焦的,或不是用来标记列或行的元素。

使用键盘导航 treegrid 时,visual keyboard indicator 会告知用户当前聚焦在哪一行或哪个单元格上。如果 treegrid 每次只允许用户选择一个项目进行操作,则称为单选 treegrid,并且具有焦点的项目同时也处于选中状态。 然而,多选 treegrid 允许用户每次选择多个行或单元格进行操作,这种情况下选中状态与焦点无关。 例如,在一个分层 e-mail 讨论网格中,用户可以移动焦点来选择任意数量的行进行删除或移动操作。视觉设计时区分被选中的项目和拥有焦点的项目是很重要的。想了解与之相关的更多细节,请参阅关于聚焦和选中之间差异的描述

示例

  • E-mail 收件箱 treegrid 示例:用于导航 e-mail 收件箱的树形网格,演示了三种键盘导航模型——优先聚焦行、优先聚焦单元格和仅聚焦单元格。

键盘交互

以下按键通过在网格的行和单元格中移动焦点来提供 treegrid 导航。 当网格中的元素获得焦点时,例如用户用 Tab 将焦点移至网格后,实现 treegrid (模式)使这些按键命令可用。 将焦点移至网格中可能会聚焦第一个单元格或第一行。 焦点是在单元格还是行上取决于作者的偏好以及是否支持行焦点,因为某些 treegrid 可能不支持为行提供焦点。

  • Enter:如果仅支持聚焦单元格(cell-only focus),并且焦点位于第一个具有 aria-expanded 属性的单元格上,则打开或关闭子行。否则,执行单元格的默认操作。
  • Tab:如果包含焦点的行包含可聚焦元素(例如,输入栏、按钮、链接等),将焦点移至行中的下一个输入。如果焦点在行中的最后一个可聚焦元素上,则将焦点从 treegrid widget 移至下一个可聚焦元素。
  • Right Arrow
    • 如果焦点在折叠的行上,则展开该行。
    • 如果焦点在展开的行上或在没有子行的行上,则将焦点移至行中的第一个单元格。
    • 如果焦点在一行中最右边的单元格上,则焦点不移动。
    • 如果焦点在任何其他单元格上,则将焦点向右移动一个单元格。
  • Left Arrow
    • 如果焦点在展开的行上,则折叠该行。
    • 如果焦点在折叠的行上或没有子行的行上,则焦点不移动。
    • 如果焦点在行中的第一个单元格上,并且支持行焦点,则将焦点移至该行。
    • 如果焦点在行中的第一个单元格上,并且不支持行焦点,则焦点不移动。
    • 如果焦点在任何其他单元格上,则将焦点向左移动一个单元格。
  • Down Arrow
    • 如果焦点在行上,则将焦点向下移动一行。如果焦点在最后一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点向下移动一个单元格。如果焦点在列的最后一个单元格上,则焦点不移动。
  • Up Arrow
    • 如果焦点在行上,则将焦点向上移动一行。如果焦点位于第一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点向上移动一个单元格。如果焦点在列的第一个单元格上,则焦点不移动。
  • Page Down
    • 如果焦点在行上,将焦点向下移动到作者指定的行数,通常表现为当前可见行中处于底部位置的行(bottom row)滚动至成为顶部位置的可见行之一。如果焦点在最后一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点向下移动作者指定的单元格数量,通常表现为当前可见行中处于底部位置的行(bottom row)滚动至成为顶部位置的可见行之一。如果焦点在最后一行,则焦点不移动。
  • Page Up
    • 如果焦点在行上,则将焦点向上移动到作者指定的行数,通常表现为当前可见行中处于顶部位置的行(top row)滚动至成为底部位置的可见行之一。如果焦点在第一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点向上移动作者指定的单元格数量,通常表现为当前可见行中处于顶部位置的行(top row)滚动至成为底部位置的可见行之一。如果焦点在第一行,则焦点不移动。
  • Home
    • 如果焦点在行上,则将焦点移至第一行。如果焦点在第一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点移至行中的第一个单元格。如果焦点在行的第一个单元格上,则焦点不移动。
  • End
    • 如果焦点在行上,则将焦点移至最后一行。如果焦点在最后一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点移至行中的最后一个单元格。如果焦点在行的最后一个单元格上,则焦点不移动。
  • Control + Home
    • 如果焦点在行上,则将焦点移至第一行。如果焦点在第一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点移至列中的第一个单元格。如果焦点在第一行,则焦点不移动。
  • Control + End
    • 如果焦点在行上,则将焦点移至最后一行。如果焦点在最后一行,则焦点不移动。
    • 如果焦点在单元格上,则将焦点移至所在列的最后一个单元格上。如果焦点在最后一行上,则焦点不移动。
说明
  • 当上述 treegrid 导航键移动焦点时,焦点是设置在网格单元格内的元素还是单元格上,取决于单元格内容。请参阅聚焦于单元格还是单元格内的元素
  • 当导航键,如方向键(arrow keys),在单元格之间移动焦点时,它们不能用于在单元格内操作组合框(combobox)或移动编辑光标。如果需要这种功能,请查阅在单元格内部编辑和导航
  • 如果导航功能可以动态地在 DOM 中添加更多的行或列,那么将焦点移到网格的开头或结尾的按键事件,如 Control + End,可能会将焦点移到 DOM 中的最后一行,而不是后端数据中最后的可用行。

如果树形网格支持选择单元格、行或列,则以下按键通常用于这些功能。

  • Control + Space
    • 如果焦点在行上,则选择所有单元格。
    • 如果焦点在单元格上,则选择包含焦点的列。
  • Shift + Space
    • 如果焦点在行上,则选择该行。
    • 如果焦点在单元格上,则选择包含焦点的行。如果树形网格包含一列用于选择行的多选框,当焦点不在多选框上时,此组合键可以用作选中多选框的快捷方式。
  • Control + A:选择所有单元格。
  • Shift + Right Arrow
    • 如果焦点在行上,则不更改选择。
    • 如果焦点在单元格上,则将选择范围向右扩展一个单元格。
  • Shift + Left Arrow
    • 如果焦点在行上,则不更改选择。
    • 如果焦点在单元格上,则将选择范围向左扩展一个单元格。
  • Shift + Down Arrow
    • 如果焦点在行上,则将选择范围扩展到下一行中的所有单元格。
    • 如果焦点在单元格上,则将选择范围向下扩展一个单元格。
  • Shift + Up Arrow
    • 如果焦点在行上,则将选择范围扩展到上一行中的所有单元格。
    • 如果焦点在单元格上,则将选择范围向上扩展一个单元格。
说明

关于剪切、复制和粘贴键的分配,请查阅 § 6.8 常用功能的按键分配约定

WAI-ARIA 角色、状态和属性

  • 树形网格容器具有 treegrid 角色。
  • 每个行容器都具有 row 角色,并且是 treegrid 元素或具有 rowgroup 角色元素的 DOM 子元素或由其拥有。
  • 每个单元格都是 row 元素的 DOM 子元素或被其拥有,并且具有以下角色之一:
    • 如果单元格包含列的标题或标题信息,则为 columnheader
    • 如果单元格包含行的标题或标题信息,则为 rowheader
    • 如果单元格不包含列或行的标题信息,则为 gridcell
  • 一个可以展开或折叠以显示或隐藏一组子行的 row 是一个父行(parent row)。每个父行都在 row 元素或 row 中包含的单元格上设置了 aria-expanded 状态。未显示子行时 aria-expanded 属性设置为 false,显示子行时设置为 true。不控制子行显示的行没有 aria-expanded 属性,因为如果它们拥有这个属性,辅助技术将会错误地将其描述为父行。
  • 如果树形网格支持选择多个行或单元格,则称为具有 treegrid 角色的多选树形网格,并且 aria-multiselectable 属性设置为 true。否则,则称为单选树形网格,并且 aria-multiselectable 属性设置为 false,或隐含默认值为 false
  • 如果树形网格是单选树形网格,则在所选行或单元格上设置 aria-selected 属性为 true,并且它不会出现在树形网格中的任何其他行或单元格上。
  • 如果树形网格是多选树形网格:
    • 所有选中的行或单元格的 aria-selected 设置为 true
    • 所有未选中的行和单元格的 aria-selected 设置为 false
  • 如果用户界面中有一个元素用作树形网格的标签,则在网格元素上设置 aria-labelledby,其值指向标签元素。否则,使用 aria-label 为网格元素指定标签。
  • 如果树形网格有标题或描述,则在网格元素上设置 aria-describedby,其值指向包含描述的元素。
  • 如果树形网格提供排序功能,则按照网格和表格属性所述,需要在已排序行或列的标题单元格元素上,为 aria-sort 属性设置为一个适当的值。
  • 如果树形网格提供内容编辑功能,并且包含在某些条件下可能禁用编辑功能的单元格,则在禁用编辑的单元格上将 aria-readonly 属性设置为 true。 如果禁用所有单元格的编辑功能,与其在每个单元格上设置 aria-readonlytrue,不如直接在树形网格元素上将 aria-readonly 设置为 true。 不提供单元格内容编辑功能的树形网格中任何元素都不设置 aria-readonly 属性。
  • 如果存在某些行或列在 DOM 中隐藏或不存在的情况,例如,滚动时动态加载数据,或者网格提供隐藏行或列的功能,那么按照网格和表格属性所述,应用以下属性:
  • 如果树形网格包含跨越多行或多列的单元格,并且如果 treegrid 角色未应用于 HTML table 元素,那么按照网格和表格属性所述,应该应用 aria-rowspanaria-colspan 属性。
说明
  • 由 HTML table 构建的 treegrid,如果包含跨多行或多列的单元格,必须使用 HTML 的 rowspancolspan 属性(来定义),而不能使用 aria-rowspanaria-colspan 属性。
  • 如果行或单元格是通过 aria-owns 包含在树形网格中,则它们将在 treegrid 元素的 DOM 子元素之后呈现给辅助技术,除非 DOM 子元素也包含在 aria-owns 属性中。

3.29 Window Splitter 窗口拆分器

翻译和校对
翻译:芮焕明
校对:陈洁婷

注意: ARIA 1.1 引入了对 separator 角色的修改,因此它可在获得焦点时表现为 widget。 虽然此模式已被修改以符合 ARIA 1.1 规范,但是在完成符合 ARIA 1.1 规范的功能示例之前,工作组不会完成其审查。 进度和问题请关注 issue 129

窗口拆分器是可在两个部分或窗格之间移动的 separator,使用户能够改变窗格的相对大小。 窗口拆分器可以是可调整的,也可以是固定的。 固定的窗口拆分器在两个位置之间切换,而可变的窗口拆分器可以调整到允许范围的任何位置。

窗口拆分器具有一个值,该值表示其中一个窗格的大小,在此模式中,该窗格称为主窗格。 当拆分器具有其最小值时,主窗格具有其最小尺寸,辅助窗格具有其最大尺寸。 拆分器具有与主窗格的名称匹配的可访问名称。

以图书阅读应用程序为例,该应用程序具有目录的主窗格和显示图书某一部分内容的辅助窗格。 这两个窗格由标有“目录”的垂直拆分器分隔。 当目录列表窗格具有其最大尺寸时,拆分器的值为 100, 当目录列表窗格完全折叠时,拆分器的值为 0

注意,术语“主窗格”不描述窗格中内容的重要性或用途。

示例

开发窗口拆分器 widget 示例的工作请参考 issue 130

键盘交互

  • Left Arrow:向左移动垂直拆分器。
  • Right Arrow:向右移动垂直拆分器。
  • Up Arrow:向上移动水平拆分器。
  • Down Arrow:向下移动水平拆分器。
  • Enter:如果主窗格未折叠,则折叠窗格。如果窗格已折叠,则将拆分器还原到其先前的位置。
  • Home(可选):将拆分器移动到为主窗格提供最小尺寸的位置。这可能会完全折叠主窗格。
  • End(可选):将拆分器移动到为主窗格提供最大尺寸的位置。这可能会完全折叠辅助窗格。
  • F6(可选):在窗格间循环切换。
说明

固定大小的拆分器无须实现方向键功能。

WAI-ARIA 角色、状态和属性

  • 用作可聚焦拆分器的元素具有 separator 角色。
  • 具有 separator 角色元素的 aria-valuenow 属性被设置为一个十进制值,该值表示分隔器的当前位置。
  • 具有 separator 角色元素的 aria-valuemin 属性被设置为一个十进制值,该值表示主窗格具有最小尺寸的位置。这通常是 0
  • 具有 separator 角色元素的 aria-valuemax 属性被设置为一个十进制值,该值表示主窗格具有最大尺寸的位置。这通常是 100
  • 如果主窗格具有可见标签,则它由分隔器元素上的 aria-labelledby 引用。 否则,则由 aria-label 定义分隔器元素的标签。
  • 具有 separator 元素的 aria-controls 属性指向主窗格。

4. Landmark Regions

本章暂无中文版,详情请访问英文版 Landmark Regions

5. Providing Accessible Names and Descriptions

本章暂无中文版,详情请访问英文版 Providing Accessible Names and Descriptions

6. Developing a Keyboard Interface

本章暂无中文版,详情请访问英文版 Developing a Keyboard Interface

7. Grid and Table Properties

本章暂无中文版,详情请访问英文版 Grid and Table Properties

9. Intentionally Hiding Semantics with the presentation Role

本章暂无中文版,详情请访问英文版 Intentionally Hiding Semantics with the presentation Role

10. Roles That Automatically Hide Semantics by Making Their Descendants Presentational

本章暂无中文版,详情请访问英文版 Roles That Automatically Hide Semantics by Making Their Descendants Presentational

11. Structural Roles

本章暂无中文版,详情请访问英文版 Structural Roles

A. Indexes

B. Change History

本章暂无中文版,详情请访问英文版 Change History

C. Acknowledgements

本章暂无中文版,详情请访问英文版 Acknowledgements

D. References

本章暂无中文版,详情请访问英文版 References