无障碍访问(Accessibility)
概述
为了更好地满足视障人士对于小程序的访问需求,小程序支持配置无障碍访问属性。
无障碍特性在读屏模式下可以访问,iOS可通过设置->通用->辅助功能->旁白打开,Android可通过设置->无障碍->TalkBack打开。
以 View 组件为例,开发者可以增加role和aria-label属性。 其中role表示组件的角色,当设置为'img'时,读屏模式下聚焦后系统会朗读出'图像'。设置为'button'时,聚焦后后系统朗读出'按钮'。 aria-label表示组件附带的额外信息,聚焦后系统会自动朗读出来。
无障碍样式
基础库会自动维护无障碍样式开关。当无障碍样式开启时,会在 HTML 根节点上添加 data-a11y="true";关闭时会移除该属性。开发者无需手动设置该属性,可以直接基于它编写选择器,在无障碍模式下提供更高对比度、更明显的焦点态或更大的点击区域。
无障碍属性
以下 ARIA 属性可作为 props 直接传入任意组件,实现自定义无障碍语义。
组件库内置 ARIA 属性
以下组件会内置对应的 ARIA 属性,开发者无需手动传入:
示例代码
为 View 添加 role 和 aria-label
常见问题
为什么给 Button 传了 role 却没有效果?
Button 内部已内置 role="button",若传入自定义 role 会被内置值覆盖。如需自定义语义角色,请使用 View 等无内置 role 的元素。
aria-label 和组件内部文字哪个会被朗读?
当同时存在 aria-label 和组件内部文本时,辅助技术通常优先朗读 aria-label。建议当组件内部文字足以描述语义时,不额外设置 aria-label;对于纯图标按钮等缺乏文字说明的场景,务必设置 aria-label。
tabindex 的值如何选择?
通常只使用 0 和 -1:0 将元素加入默认 Tab 顺序,-1 使元素可通过脚本聚焦但不出现在 Tab 顺序中。不建议使用正整数,因为会破坏自然 Tab 顺序。