我有这个签到表格:
<label>Check in date </label>
<select id="day">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select id="month">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select id="year">
<option value="1">2012</option>
<option value="2">2013</option>
</select>
Run Code Online (Sandbox Code Playgroud)
如您所见,用户将在不同的选择框中选择月,日和年,但是,对于所有三个选项框,只应存在一个标签.
使用HTML执行此操作的正确方法是什么?
更新:我关注的是我们在开发类似上面代码之类的东西时所遇到的可访问性问题.我的意思是,盲人用户应该能够收听每个标签以填写此表格......
Alo*_*hci 11
对所有三个输入框使用一个标签的问题在于,没有视力的用户不会知道焦点所在的三个框中的哪一个,因为在每种情况下都会读出相同的文本.有许多方法可行.也许最安全的是为每个盒子贴上标签,但是将这些标签隐藏在视口的左侧.应该工作的另一种可能性,但我没有测试过这个:
<fieldset>
<legend>Check in date</legend>
<select id="day" aria-label="day">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select id="month" aria-label="month">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select id="year" aria-label="year">
<option value="1">2012</option>
<option value="2">2013</option>
</select>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
接下来是@Alohci的答案,你也可以使用aria-labelledby和反转命名参考(我认为它更接近你正在寻找的约定):
<label id="date">Check in date</label>
<select aria-labelledby="date">
<!-- ... -->
</select>
<select aria-labelledby="date">
<!-- ... -->
</select>
<select aria-labelledby="date">
<!-- ... -->
</select>
Run Code Online (Sandbox Code Playgroud)
另外请注意,按照W3C的上labelled-by:
如果标签文本在屏幕上可见,作者应该使用
aria-labelledby,不应该使用aria-label.使用aria-label只有当该接口是这样的,它不可能在屏幕上可见标签.用户代理要优先aria-labelledby在aria-label计算访问的名称属性时.
| 归档时间: |
|
| 查看次数: |
18130 次 |
| 最近记录: |