使用占位符作为标签是否符合 WCAG 2?

tyl*_*ter 6 accessibility section508 wcag placeholder wcag2.0

我知道使用占位符文本作为标签不太容易理解,但它在技术上违反 WCAG 2 吗?我找不到任何明确的内容,但我想知道以更专业的方式阅读该标准是否会发现其中的内容。

Gra*_*hie 8

首先阅读:这并不是建议您应该使用占位符代替标签,更多的是关于占位符在 WCAG 指导下是否足够的思想实验。如果您确实使用占位符而不是标签,那么您的网站将无法访问,正如我之前在数百个答案中所说的那样。如果您因歧视而被起诉,我怀疑这个答案中的任何内容都会对您有帮助(也不应该)。

需要明确的是 - 使用可见且正确关联的标签!/结束咆哮呵呵。

简答

只有占位符而没有标签很可能符合 WCAG 2.1,但谁知道所有的准则都是相互冲突的。

您可能会认为在数万个单词中会有一行写着“使用标签”或“仅占位符输入将不符合此标准”,但我找不到它。

以下内容可能很难阅读,因为我阅读了我能找到的每一页以获得明确的答案,因此可能有点脱节,抱歉!

进入问题

好吧,让我们假设我们暂时不关心可用性,而是关注 WCAG 2.1 的“法律条文”,因为这是一个有趣的问题。

现在,我们还假设我们纯粹讨论 standard<inputs>和<textarea>s 以使这变得容易(如复选框、选择等。都肯定需要标签),而且它们是唯一接受占位符值的(我认为?!)。

哪些规则适用于可能相关的输入和标签?

此处相关的是1.1.1 非文本上下文、1.3.1 信息和关系、2.4.6 标题和标签、3.3.2 标签或说明以及4.1.2 名称、角色、值。后来我发现2.5.3: Label in Name。

1.1.1

控件、输入:如果非文本内容是控件或接受用户输入,则它有一个描述其用途的名称。

现在从技术上讲,这里还没有完全涵盖标准<input>,这个标准更多地适用于用作按钮的图像、自定义控件等。

然而,如果我们假设我们可以扩展 1.1.1 来覆盖<input>此标准中是否有任何内容,这意味着我们不能使用占位符(或必须有关联的标签)。

如果您阅读整个页面,则不会具体提及<label>需要在表单控件上使用的元素。

结果:到目前为止都没有答案

1.3.1

检查 1.3.1 - 尽管它提到了标签,但它没有<label>在任何地方具体提到该元素。它还指出,对于关系是否应该以编程方式确定或以文本形式呈现,这是一个“判断”。

在某些情况下,可能需要判断关系是否应该以编程方式确定或以文本形式呈现。然而,当技术支持编程关系时,强烈鼓励以编程方式确定信息和关系,而不是用文本描述。

结果:无论哪种方式都没有明确的答案

2.4.6

现在我们可以忽略 2.4.6 标题和标签,因为它只要求标签是描述性的,它并没有明确规定必须提供标签。

结果:不相关

3.3.2

现在我们说,“标签或说明书”必须给我们一些具体的答案,对吧?

此成功标准不要求标签或说明正确标记、识别或与其各自的控制相关联。

好吧,这很烦人,这里没有答案!

事实上,它让我们回到了 1.3.1,我们已经研究过该版本并确定没有明确的答案。

它还向我们指出了 4.1.2——也许我们会看看这个标准?

结果:不相关

4.1.2

对了,一定是这个!至少一开始就走在正确的轨道上!

对于所有用户界面组件(包括但不限于:表单元素、链接和脚本生成的组件),可以通过编程方式确定名称和角色;

现在关键部分是“以编程方式确定”。

好吧,那么“以编程方式确定”的定义是什么?

由软件根据作者提供的数据确定,不同的用户代理(包括辅助技术)可以提取这些信息并将其以不同的方式呈现给用户

好吧,现在我们可能正在做某事。不同的用户代理和辅助技术可以提取占位符信息吗?这是一种有效的标签技术吗?

结果:仍然没有明确的答案

这是我们最终找到相关 WCAG 建议的地方(或者我们找到了吗?)

成功标准 2.5.3:名称中的标签

2.5.3 名称中的标签肯定是我们正在寻找的确认。

请注意,输入字段中的占位符文本不被视为提供标签的适当方式。HTML5 规范规定 placeholder 属性不应用作 . 然而,值得注意的是,HTML5 语句中的“标签”位于代码括号中并链接到标签元素。出于名称成功标准中的此标签的目的,“标签”不是在编程意义上使用的,而只是指在视觉上与组件非常接近的文本字符串。因此,在没有任何其他附近文本字符串的情况下(如前面的列表中所述),如果输入包含占位符文本,则此类文本可能是“名称中的标签”的候选者。这通过可访问名称计算(稍后讨论)和从实际意义上得到支持,即在未以其他方式提供可见标签的情况下,语音输入用户可能会尝试使用占位符文本值作为交互方式与输入。

在所有这些漫无目的的内容中(正如你所知,我厌倦了阅读那些令人费解且不明确的指导方针。)它说了一些有趣的事情。

“如果输入包含占位符文本,则此类文本可能是名称中标签的候选者。”

这样我们就可以为控件提供一个“以编程方式确定”的名称。(见下一个标题)

上面段落的附注: “请注意,输入字段中的占位符文本不被视为提供标签的适当方式”部分。会让您相信占位符作为标签无效。

它还指出“HTML5 规范规定占位符属性不应用作 . 的替代品<label>”。

现在对我来说这足以说服你使用标签。

然而,WCAG 再次表示网页应该是“有效的 HTML”(根据SC 4.1.1 - 解析)。

那么带有<input>占位符的 HTML 是有效的吗?那么答案(根据W3C 验证器是肯定的!以下是有效的 HTML!

<html lang="en">
  <head>
    <title>test</title>
  </head>
  <body>
    <form>
      <input placeholder="test"/>
    </form>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

因此,如果它是有效的,我会说这在技术上是可以接受的。

可访问的名称计算

我有一秒钟偏离了方向。我正在谈论这样一个事实:placeholder属性是可访问名称计算的有效候选者。

这就是 的可访问名称计算<input>。相关点是第 4 点:

  1. 否则使用控件的占位符属性。

好的,这placeholder对于“以编程方式确定”是有效的,但是标签不是必须是可见的吗?

有趣的是,您不必为 1.1.1、1.3.1 和 4.1.2 提供可见标签,因此我们不能使用该参数来表示需要实际标签。

摘自H44:使用标签元素将文本标签与表单控件关联起来

无论标签元素是否可见,此技术(将标签与输入相关联)足以满足成功标准 1.1.1、1.3.1 和 4.1.2 。也就是说,它可以使用CSS隐藏。

说到这里,下一句话......

但是,对于成功标准 3.3.2,标签元素必须可见,因为它为所有需要帮助理解该字段用途的用户提供帮助。

但在 3.3.2 中,虽然它必须是可见的,但它不必被正确标记(记住,我很久以前就说过了!)。

所以我可以在 WCAG 中找到所有相关信息,但结果仍然模糊,但话虽如此,我确实有一个结论给你!

结论

WCAG 中没有任何地方明确声明占位符不能用作标签。

WCAG 还指出 atitle可以用来标记 aninput,这比占位符更糟糕。

我可能在某个地方错过了将所有内容联系在一起的关键句子,但从我所读到的内容来看,我相信(非常令人惊讶!!)在 WCAG 2.1 下只有一个占位符是有效的<input>。

显然,正如我多次所说,不要仅在输入上使用占位符,因为很多用户无法访问它(患有焦虑症或学习困难的人真的很讨厌带有占位符标签的输入,因为当他们键入时标签会消失,这样他们就可以'不要检查他们是否填写了正确的字段而不删除所有内容),某些屏幕阅读器和浏览器组合不适用于它们等。