【发布时间】:2022-07-29 00:13:21
【问题描述】:
客户需要创建一个相当复杂的表单。我们使用<fieldset>/<legend> 将某些元素组合在一起。但这还不够——即使我们嵌套它们。
想一想:
<form>
<fieldset>
<legend>Your personal details</legend>
<label>First name: <input name="first_name"></label>
<label>Last name: <input name="last_name"></label>
<fieldset>
<legend>Gender</legend>
<label>Male: <input type="radio" name="gender" value="male"></label>
<label>Female: <input type="radio" name="gender" value="female"></label>
<label>Other: <input type="radio" name="gender" value="other"></label>
</fieldset>
</fieldset>
</form>
想象一下,这只是更大形式的一小部分。例如,我们可以有一个“邮政地址”和一个“帐单地址”。我们是否需要使用<fieldset>/<legend>s 再次“缩进”整个内容?
<form>
<fieldset>
<legend>Postal address</legend>
<fieldset>
<legend>Your personal details</legend>
...
<fieldset>
<legend>Gender</legend>
...
</fieldset>
</fieldset>
</fieldset>
<fieldset>
<legend>Billing address</legend>
...
</fieldset>
</form>
还是应该使用标题?
<form>
<h2>Postal address</h2>
<fieldset>
<legend>Your personal details</legend>
...
<fieldset>
<legend>Gender</legend>
...
</fieldset>
</fieldset>
<h2>Billing address</h2>
...
</form>
虽然嵌套<fieldset>/<legend>s 可能是有效的,但我不会过度这样做。参与,因为 JAWS 将为每个包含的输入元素宣布 <legend>(与 NVDA 相比,在到达第一个包含的输入元素时只会宣布一次)。
另一方面,当使用Tab/Shift-Tab 在表单元素之间跳转时,桌面屏幕阅读器根本不会宣布标题。所以很容易漏掉它的信息。
亲爱的屏幕阅读器专家,您对此有何看法?我们应该使用aria-describedby 将标题附加到后续的<fieldset> 吗?如果该标题下方有多个<fieldset> 怎么办?
我觉得这里没有完美的解决方案。有什么建议吗?
【问题讨论】:
标签: html forms accessibility screen-readers jaws-screen-reader