2. 步骤一:使用无障碍的 Fusion 组件
1. 使用无障碍的Fusion组件
Fusion 是一种旨在提升设计与开发之间 UI 构建效率的工作方式。我们致力于对无障碍的支持,其中 Fusion 基础组件已提供无障碍支持,开发者可以进行测试和使用,并提供Fusion无障碍使用和说明文档。所有非组件 API 属性都可以透传至 DOM 元素(我们可以传递参数,修改aria和role属性)。
经过上一章节的学习,对无障碍有初步的认识,如何进行改造呢,下面给出一些指引:
- 对于组件,我们为开发者内置role和特定aria-属性,开发者也可以对非组件 API 属性都可以透传至 DOM 元素,进行修改 role 和 aria-参数,但是要注意对应关系,请参考
- 对一些特殊的组件传递参数才能支持无障碍,设置
id
,autoFocus
和传参数,如下:- id -
Balloon
,Rating
- autoFocus - 弹层自动聚焦,例如
Dialog
,Overlay
,Dropdown
- 传参数 - 有些组件需要根据具体的业务,实现不同的可访问性,这里为开发者内置一些参数,想使用无障碍的时候,用户只需要根据现有的需求,选择对应的内置参数,例如设置 aria-label,以下组件需要用户传参数才支持无障碍组件如下:
NumberPicker
、Transfer
- id -
- 我们为开发者提供无障碍的使用文档,请参考组件 API 中
ARIA and KeyBoard
2. 组件的分类
本部分介绍具体如何对组件改造,让开发者更好的使用组件可访问性,分如下四类:
2.1 数据展示类
Icon
- 图标类元素
- 若为装饰性 icon,请设置
<Icon aria-hidden>
或<Icon role="presentation">
- 若有真实语义,请设置
aria-label
以描述 icon 行为<Icon aria-label="xxx">
Badge
- 如需朗读含义,可通过 css 设置仅读屏软件可读的内容 参考文档
Slider
- 内容如需朗读,请自定义 alt 属性(若为 img)或 aria-label 属性 参考文档
Table
- 默认为纯数据展示的表格 - 若作为布局使用复杂功能,需自定义 role 等属性,参考文档
Tag
- 删除类标签,删除按钮默认朗读为“删除”,可自定义文案,自定义方式参考国际化语言包的设置
Paragraph
、Progress
、Timeline
、Collapse
2.2 即时反馈类
Message
- 默认 role="alert",当出现在 document 中时,屏幕阅读器会优先朗读它的内容。
- 若为非典型使用,例如一直展示在页面上,请根据实际需求覆盖默认 role,
<Message role="" />
Balloon
- 传入 id 以支持无障碍(为支持 SSR,所以不默认生成 id)
- 默认 role="tooltip",若有高优先级,请根据实际需求覆盖默认 role
- 简单文案描述推荐使用 Balloon.Tooltip,focus 后会自动展开
- 请务必设置可聚焦的 trigger 元素
Dialog
- 默认 role="dialog",若有高优先级,请根据实际需求覆盖默认 role
- 可通过
autoFocus
开启默认聚焦,焦点为弹层内容上第一个可聚焦元素<Dialog autoFocus />
- 请务必设置可聚焦的 trigger 元素
Overlay
- 可通过
autoFocus
开启默认聚焦,焦点为弹层内容上第一个可聚焦元素<Overlay autoFocus />
- 请务必设置可聚焦的 trigger 元素
- 可通过
2.3 菜单与导航类
- 菜单
Menu
- 支持键盘导航
- 默认 role="menu",子元素为"menuitem",菜单自定义单选子元素为"menuitemradio",菜单自定义多选子元素为"menuitemcheckbox"
- 使用
selectMode
属性 改变组件可选状态后,默认 role="listbox",根节点是否多选改变aria-multiselectable
的值,子元素为“listitem” - 请根据实际需求覆盖默认 role
<Menu role="listbox" />
<Menu.Item role="listitem" />
Nav
- 默认 role="listbox",子元素为"listitem"
- 请根据实际需求覆盖默认 role
<Nav role="menu" />
<Nav.Item role="menuitem" />
Dropdown
- 请务必设置可聚焦的 trigger 元素
- 弹层展开后会自动聚焦,可通过设置 autoFocus={false}禁用
- 导航
Tab
- 默认 role="tablist",子元素为"tab"
- 支持键盘导航
Pagination
- 朗读格式默认为“上一页,当前${i}页”,可自定义文案,自定义方式参考国际化语言包的设置
Step
、Breadcrumb
- 默认
aria-current
标记当前步骤
- 默认
2.4 表单类
- 推荐: Form Field Input CheckBox Radio Switch Select NumberPicker Button Range Rating DatePicker TimePicker Upload
Input
- 自动根据禁用状态设置
aria-disabled
- 请使用者根据具体场景,设置
aria-live
、aria-label
参考文档
- 自动根据禁用状态设置
CheckBox
基本无需使用者改动- 支持键盘导航
- 根据选中状态更新
aria-checked
Radio
基本无需使用者改动- 支持键盘导航
- 根据选中状态更新
aria-checked
Switch
- 默认 role="switch"
- 根据选中状态更新
aria-checked
Select
- 支持键盘操作,上下按键为前后内容切换
- 根据所选中项,更新
aria-live
属性对应span标签内容
NumberPicker
- 支持键盘上下按键,增加、减少数字。
- 开发者可通过传递
upBtnProps
downBtnProps
参数,自定义增加减少按钮的aria-label
文案,参考文档
Button
SplitButton
MenuButton
- 默认使用
<button>
标签来渲染,可自定义标签类型<Button component="a">
- 可通过配置设置自动聚焦,MenuButton与SplitButton组件设置menuProps属性,其中参数为对象
{autoFocus: true}
- 默认使用
Range
- 使用左右方向键去改变数值
- 默认 role=“slider”,滑动更新以下值
aira-valuenow
(定义当前值),aria-valuetext
(可读的替代文本),aria-valuemax
(最大值),aria-valuemin
(最小值)
Rating
- 传入 id 支持无障碍
- 支持键盘操作
- 通过 readAs 函数自定义展示/朗读的文案
DatePicker
- 使用 role 为 grid,rowgroup,row 和 cell,并设置
aria-disabled
(是否为禁选择状态)与aria-selected
(是否被选择)。 - 建议给予充分的
aria-label
提示,鼓励用户按照指定格式手动输入日期
- 使用 role 为 grid,rowgroup,row 和 cell,并设置
TimePicker
- 建议给予充分的
aria-label
提示,鼓励用户按照指定格式手动输入日期 - 使用 role 为 listbox 和 option,设置 aria-selected,tabIndex
- 建议给予充分的
Upload
- 设置 role 为 upload 和在 input 中设置 aria-hidden,不让屏幕阅读器读取
- 建议至少保留一种点击上传的途径
- 不推荐:TreeSelect CascaderSelect Cascader Transfer
TreeSelect
CascaderSelect
Cascader
- 均支持方向键操作,上下按键为同级内容切换,左右按键为父子级切换.
- 无障碍设计中,请尽可能地避免这些组件的使用
Transfer
- 使用 role 为 menu,menuitemcheckbox 和 aria-checked,tabIndex 属性
- 可自定义文案,自定义方式参考国际化语言包的设置。
- 无障碍设计中,请尽可能地避免这一组件的使用