【问题标题】:How to semantically markup extra information to a input and label field如何将额外信息语义标记到输入和标签字段
【发布时间】:2017-01-26 13:03:56
【问题描述】:

我有一个label 额外描述和一个input 字段。

我有点不确定额外的描述是否属于像这样包裹在跨度中的标签字段:

<label for="phone">
    Telephone
    <span>For the delivery</span>
</label>
<input type="text" name="phone">

这样描述是可点击的。但我不确定这是否是考虑到 a11y 和语义标记的正确方法。

额外的信息是属于标签还是应该分开,应该如何格式化?

【问题讨论】:

  • @aardrian 已经回答了您的问题。但谈到可访问性,请注意文本对比。

标签: html accessibility forms semantic-markup


【解决方案1】:

首先,我总是将&lt;label&gt; 映射到字段的id 而不是name(对于单选按钮和复选框尤其重要):

<label for="phone">
 Telephone
 <span>For the delivery</span>
</label>
<input type="text" name="phone" id="phone">

你的方法没有错。如果您担心屏幕阅读器的冗长(可能是用户测试的结果),那么您可以稍微调整一下并使用aria-describedby

<label for="phone">
 Telephone
</label>
<span id="phoneAddl">For the delivery</span>
<input type="text" name="phone" id="phone" aria-describedby="phoneAddl">

aria-describedby 仍然将它与字段相关联,但在字段之后宣布它并带有短暂的停顿。它对屏幕阅读器以外的任何东西都没有影响。

但是关于更大的点击区域,考虑到语义上可以将其留在&lt;label&gt; 中,我会像您的示例一样将其保留在那里。

这也意味着您不依赖 ARIA 来完成原生元素的工作(尽管它完全做同样的事情)。

【讨论】:

  • 我也更喜欢第一个解决方案,因为“交付”可能是一个重要的信息,应该立即说出。
  • 在第一个解决方案中,使用几个屏幕阅读器对其进行测试以听听它的声音。它可能会说“送货电话”作为一个连续的句子。您可能对它的声音感到满意,但在视觉上,“用于交付”似乎是一个不太强调的括号短语(因为它是灰色文本而不是黑色)。您可能希望将其解读为括号中的短语,在“电话”和“送达”之后稍作停顿。正如@aardrian 所说,Aria- describeby 会这样做,但我也喜欢更大的点击目标,因为它是一个大标签。 (续...)
  • (续...)您可以通过在文本中添加逗号来诱使屏幕阅读器暂停。但是,您并不真正希望显示逗号,因此它必须位于 aria-label 中。 &lt;span aria-label=', for the delivery'&gt;For the delivery&lt;/span&gt;。但如果你到了这一点,你可能会挑剔解决方案。您可能还有其他更大的问题需要花时间解决。我只是想指出诀窍:-)
猜你喜欢
  • 2011-10-14
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多