在前端有个accessiblity
的维度,就是这个界面要让尽可能让所有用户都能使用,包括视障或者无鼠标用户。想要体验一个界面的accessiblity
,我们可以在chrome浏览器安装ChromeVox
并打开这个插件。
你会看到黄色的框聚焦到你选中的组件上,浏览器会把这个组件的信息读出来。
下面我写一个最基本的select
:
html
<select name="cars" id="cars">
<option value="volvo">Volvo</option>
<option value="audi">Audi</option>
</select>
页面上我会看到这样:
我会听到一句英文描述这个组件: "'volvo', combo box one of two."。这样我就能知道这是个combo box(select)
组件,里面的值是"volvo",也是这个select
里的两个选项中的第一个选项。
如果我在这个select
加上这样的aria
属性:
html
<select name="cars" id="cars" aria-expanded="true">
<option value="volvo">Volvo</option>
<option value="audi">Audi</option>
</select>
我们便会听到她说这个组件是expanded。
aria
属性就是用来给浏览器reader识别内容的。MDN将aria
属性分为了四类,我总结了所有的属性和用处。
小部件属性
通用于所有html
元素。
- aria-autocomplete:
- 用于:
combobox
,searchbox
,textbox
- 用途:表示这个输入框是否可以显示预测的文本。
- 用法:
aria-autocomplete="line"
:显示单个预测值aria-autocomplete="list"
:显示一列预测值aria-autocomplete="default"
:两个都可以- 默认为
none
- 用于:
- aria-checked:
- 用于:
checkbox
,menuitemcheckbox
,radio
,menuitemradio
,switch
- 用途:表示这个输入框是否是勾选的。
- 用法:
aria-checked="true"
:勾选着的aria-checked="false"
:未勾选着的aria-checked="mixed"
:indetermined半勾选状态,只适用于checkbox一类的组件- 默认为
undefined
- 用于:
- aria-disabled:
- Global 所有元素通用
- 用途:是否为禁用状态
- 用法:
aria-disabled="true"/"false"
- aria-errormessage:
- Global 所有元素通用
- 用途:提供错误信息
- 用法:
- 需要先设
aria-invalid="true"
aria-errormessage="${id}"
,id
是显示错误信息的元素
- 需要先设
- aria-expanded:
- 用于:
menu
,dialog
,accordion
- 用途:表示那个控制器是否展开着
- 用法:
<button aria-expanded="false" aria-controls="id">Show widget</button>
- 用于:
- aria-haspopup:
- Global 所有元素通用
- 用途:表示是否会有popup出现(tooltip不算)
- 用法:值可以是:
false
,true
,menu
,listbox
,tree
,grid
,dialog
- aria-hidden:
- Global 所有元素通用
- 用途:表示是否隐藏了,一般不应该被浏览器找到
- 用法:值可以是:
false
,true
,undefined
,如果设置了hidden
属性,就不用设置这个了
- aria-invalid:
- Global 所有元素通用
- 用途:值是否不符合规定
- 用法:
aria-invalid="true"/"false"
:值是否符合规定aria-invalid="grammar"
:值有语法错误aria-invalid="spelling"
:值有拼写错误- 默认为
true
- aria-label:
- Global 所有元素通用
- 用途:用不可视的方式给元素加标签,可视的话用
aria-labelledby
- 用法:值为
string
- aria-level:
- 用于:
heading
,tree
,nested grid
,nested tablist
等 - 用途:给一段dom里的元素定义层级
- 用法:
<div role="heading" aria-level="3">Heading for this sub section</div>
:与role
合用,表示第3级的heading
- 在
treegrid
里表示嵌套到第几层 - 值为
integer
- 用于:
- aria-modal:
- 用于:
modal
,dialog
,alert
- 用途:表示是否是一个弹窗
- 用法:值为
boolean
- 用于:
- aria-multiline:
- 用于:
textbox
,textarea
- 用途:输入框是否可以写多行文本
- 用法:值为
boolean
- 用于:
- aria-multiselectable:
- 用于:可以被选的组件,包括
select
- 用途:表示是否可以多选
- 用法:值为
boolean
- 用于:可以被选的组件,包括
- aria-orientation:
- 用于:默认横向:
slider
,tablist
,toolbar
,menubar
;默认竖向:scrollbar
,tree
,listbox
,menu
- 用途:表示元素排列的方向
- 用法:值为:
horizontal
,vertical
,undefined
- 用于:默认横向:
- aria-placeholder:
- 用于:
input
,textarea
- 用途:表示一个提示用的短语
- 用法:值为
string
- 用于:
- aria-pressed:
- 用于:
button
- 用途:表示按钮是否正在被按着
- 用法:值为:
true
,false
,mixed
,undefined
- 用于:
- aria-readonly:
- 用于:可以交互的元素
- 用途:表示只读,与
disabled
不同,可以focus
和copy
- 用法:值为
boolean
- aria-required:
- 用于:除
input
,select
,textarea
(这些有required
属性)以外的可输入组件,div
也可以 - 用途:表示为必填项
- 用法:值为
boolean
- 用于:除
- aria-selected:
- 用于:
gridcell
,option
,row
,tab
- 用途:是否被选中
- 用法:值为
boolean
- 用于:
- aria-sort:
- 用于:
table
,grid
- 用途:按什么顺序排序
- 用法:值为:
ascending
,descending
,other
,none
- 用于:
- aria-valuemax:
- 用于:
meter
,scrollbar
,slider
,spinbutton
- 用途:定义范围的上限
- 用法:值为
number
- 用于:
- aria-valuemin:
- 用于:
meter
,scrollbar
,slider
,spinbutton
- 用途:定义范围的下限
- 用法:值为
number
- 用于:
- aria-valuenow:
- 用于:
meter
,scrollbar
,slider
,spinbutton
- 用途:定义当前值
- 用法:值为
number
- 用于:
- aria-valuetext:
- 用于:
meter
,scrollbar
,slider
,spinbutton
- 用途:用text表示当前范围的值
- 用法:如
aria-valuetext="8% (34 minutes) remaining"
- 用于:
活动区属性
活动区是指页面中被更新了的区域。
- aria-busy:
- Global 所有元素通用
- 用途:表示组件正在变化,需要等到变化完成,可以用在提交表单时
- 用法:值为
boolean
- aria-live:
- Global 所有元素通用
- 用途:表示这个元素将要更新
- 用法:
aria-live="assertive"
:优先级高,将立马呈现aria-live="polite"
:将在比如句子说完之后呈现- 默认为
off
- aria-relavant:
- Global 所有元素通用
- 用途:将会触发活动区的改变
- 用法:
aria-relavant="additions"
:被加到accessibility tree
(视觉的dom tree
,听觉的accessibility tree
)的元素aria-relavant="all"
:additions removals text的缩写aria-relavant="removals"
:从accessiblity tree
中移除的文本aria-relavant="text"
:被加到accessibility tree
的任意子节点的文本aria-relavant="additions text"
: 被加到accessibility tree
的任意子节点的文本
- aria-atomic:
- Global 所有元素通用
- 用途:将会以怎样的方式呈现活动区的变化
- 用法:
aria-atomic="false"
:(默认)指呈现改变的节点aria-atomic="true"
:呈现整个变化的区域
拖放属性
- aria-dropeffect:
- Global 所有元素通用
- 用途:可以被drop
- 用法:
aria-dropeffect="copy"
:将原对象复制进来aria-dropeffect="execute"
:调用绑定的方法aria-dropeffect="link"
:创建一个link(可用于拖拽文件后,显示文件名)aria-dropeffect="move"
:原对象在原来的位置被移除aria-dropeffect="none"
:(默认)没有任何行为aria-dropeffect="popup"
:弹一个popup
- aria-grabbed:
- Global 所有元素通用
- 用途:是否正在被拖拽
- 用法:值为
boolean
关系属性
- aria-activedescendant:
- 用于:复合组件,
combobox
,textbox
,group
,application
- 用途:当focus时,决定哪个元素是active的
- 用法:值为
string
,与active组件的id
对应
- 用于:复合组件,
- aria-colcount:
- 用于:
table
,grid
,treegrid
- 用途:定义列数
- 用法:值为
integer
,如果不知道,为-1
- 用于:
- aria-colindex:
- 用于:
table
,grid
,treegrid
- 用途:定义列的序号
- 用法:值为大于0的
interger
- 用于:
- aria-colspan:
- 用于:
table
,grid
,treegrid
- 用途:同
td
,th
的colspan
,但用在非原生table
元素 - 用法:同
td
,th
的colspan
- 用于:
- aria-controls:
- Global 所有元素通用
- 用途:控制其他的组件
- 用法:值为
string
,与被控制组件的id
对应
- aria-describedby:
- Global 所有元素通用
- 用途:连接描述性元素
- 用法:值为
string
,与描述组件的id
对应
- aria-description:
- Global 所有元素通用
- 用途:元素的描述
- 用法:和
aria-label
相似,但通常更长
- aria-details:
- Global 所有元素通用
- 用途:补充信息,连接详细信息的元素
- 用法:值为
string
,与详细信息组件的id
对应
- aria-errormessage:
- 参考小部件组件里的
aria-errormessage
- 参考小部件组件里的
- aria-flowto:
- Global 所有元素通用
- 用途:连接下一个元素,通常用
tabindex
,罕见时用aria-flowto
,表示accessibility tree
里的顺序 - 用法:值为
string
,与下一个组件的id
对应
- aria-labelledby:
- Global 所有元素通用
- 用途:指向可以代表此元素的
label
的元素 - 用法:
html
<div id="name">Name</div>
<input type="text" aria-labelledby="name" />
- aria-owns:
- Global 所有元素通用
- 用途:定义dom树中的父子关系
- 用法:值为
string
,与子组件的id
对应
- aria-posinset:
- 用于:
listitems
,treeitems
- 用途:在并列结构中定义序位
- 用法:值为大于0的
interger
- 用于:
- aria-rowcount:
- 用于:
table
,grid
,treegrid
- 用途:定义有多少行
- 用法:值为
integer
,如果不知道,为-1
- 用于:
- aria-rowindex:
- 用于:
table
,grid
,treegrid
- 用途:定义行的序号
- 用法:值为大于0的
interger
- 用于:
- aria-rowspan:
- 用于:
table
,grid
,treegrid
- 用途:同
td
,th
的rowspan
,但用在非原生table
元素 - 用法:同
td
,th
的rowspan
- 用于:
- aria-setsize:
- 用于:
listitems
,treeitems
- 用途:定义
item
的数量 - 用法:值为
integer
,如果不知道,为-1
- 用于:
结尾
这些属性不仅仅为了视障人群,也可以用作自动化测试,自动化测试时,会用脚本控制无头浏览器模拟用户的行为,那么如何能拿到特定的元素呢,比如某个列表的第3项,也会用到aria属性,所以工程化开发时,最好还是要规范定义aria属性。