标签,复选框和单选按钮

时间:2012-10-26 03:40:26

标签: checkbox label accessibility radio fieldset

我的网络应用程序使用下面示例中列出的表单...

First Name      [____________]
Last Name       [____________]
Gender          () Male  () Female

我使用的标记就像......

<label for="firstName">First Name</label><input type="text" id="firstName" />
<label for="lastName">Last Name</label><input type="text" id="lastName" />
<label>Gender</label>
<fieldset>
  <legend>Gender</legend>
  <input type="radio" name="sex" id="sex-m" value="m">
  <label for="sex-m">Male</label>
  <input type="radio" name="sex" id="sex-f" value="f">
  <label for="sex-f">Female</label>
</fieldset>

我有以下问题,我不知道如何解决...

  1. 我希望将WHOLE GROUP的单选按钮标记为任何其他字段(如上图所示),但没有任何内容可以将标签链接到(即没有任何内容用于“for”属性,因为每个组中的无线电有自己的标签,仅用于单个单选按钮的值。)没有“for”属性的标签不会通过可访问性合规。

  2. &lt; legend&gt; fieldset的元素似乎复制了标签的功能。这真的有必要吗?

  3. 我曾考虑过设计&lt; legend&gt;的样式标签看起来好像是一个标签,并且完全取消了单选按钮组的标签,但这对我来说似乎有些麻烦,并且还会在我的代码中引入复杂性(依赖于&lt; label&gt;元素来做)一些漂亮的验证消息标记和各种其他东西)

    提前致谢。

2 个答案:

答案 0 :(得分:7)

Ssollinger的答案的第一部分是正确的:

代码应为:

<label for="firstName">First Name</label><input type="text" id="firstName" />
<label for="lastName">Last Name</label><input type="text" id="lastName" />
<fieldset>
  <legend>Gender</legend>
  <input type="radio" name="sex" id="sex-m" value="m">
  <label for="sex-m">Male</label>
  <input type="radio" name="sex" id="sex-f" value="f">
  <label for="sex-f">Female</label>
</fieldset>

当辅助技术击中男性单选按钮时,大多数会读作:“性别:男性单选按钮1中未选中。”

然后您可以在fieldsetlegend,标签和inputs上使用CSS。如果内存服务正确,则字段集可以成为样式,因此我最终可能会向其添加<div>

<label for="firstName">First Name</label><input type="text" id="firstName" />
<label for="lastName">Last Name</label><input type="text" id="lastName" />
<fieldset>
  <legend>Gender</legend>
  <div>
  <input type="radio" name="sex" id="sex-m" value="m">
  <label for="sex-m">Male</label>
  <input type="radio" name="sex" id="sex-f" value="f">
  <label for="sex-f">Female</label>
  </div>
</fieldset>

添加此<div>没有可访问性含义。

与ssollinger的答案中的评论一样,您可以转储fieldsetlegend方法,但是您需要构建所有内容以使其可访问,an example of a build out

答案 1 :(得分:1)

  

我曾考虑将<legend>标签设置为样式,看起来好像是标签,并且完全取消了单选按钮组的标签,...

这是正确的方法。 “性别”不是任何标签,收音机盒的标签是“男性”和“女性”。 “Gender”是字段集的图例,它将单选按钮组合在一起。实现此表单的正确方法是删除“Gender”标签,并将字段集保留为legend“Gender”。

从技术上讲,您可以在单选按钮周围添加<div>并指向“Gender”标签的for=,但我确信这会导致可访问性问题(避难所)虽然没有用屏幕阅读器尝试过,所以我强烈建议摆脱“性别”的标签。