HTML 内的名称、id、咏叹调、角色属性

Name, id, aria, role attributes within HTML

我知道 name 和 id 在将它们包含到 Web 表单元素中时具有关键重要性,所有这些属性,如 name、id、role、aria-xxx、title,都应始终包含在 html元素?

那么,每篇文章、每个部分、每个导航菜单项都必须具有所有这些属性吗?或者其中一些将与某些元素相关,例如 "name" 用于网络表单或 "id" 用于 javascript 定位?不幸的是,如果某些属性不受支持或不需要,浏览器不会 return 向我发送验证消息。请指点。

在表格中可以吗?

<label for=”first-name”>First Name</label> <input type=”text” id=”first-name” name=”first-name” required aria-required=”true” role="textbox" aria-labelledBy="something">

如您所见,我将 required AND aria-required 和角色放在一起,可能会发生冲突吗?我知道 role attribute=textbox 不是正确的,只是为了说明我的疑问。提前致谢。

这是个好问题。 TLDR 是不,您不必为所有 HTML 元素添加所有这些属性。更详细的解释,请查看以下文字。

您提到的每个属性都扮演着不同的角色。以你说的那几个为例:

  • id:用来给元素一个唯一的标识符。对于使用 JavaScript getElementById 进行引用很有用,对于在同一页面中使用其他属性进行引用也很有用(例如 <label for="first-name"> 如何通过 id 引用输入元素)。

  • name:主要用于读取表单元素的数据。在通过传统的 POST 调用服务器发布表单的某个时间点,name 属性将表示服务器将从网页接收的 key/value 对的键。如今,人们依赖 Web API 调用和 AJAX 调用,但它们仍在使用。

  • 作用:这个对屏幕阅读器很有用,辅助。当 HTML 元素的原始标记元素 未在页面 中描述它们的真实语义时,您应该将角色放在 HTML 元素上。一个常见的例子是人们使用 div 元素来构建 tables。在这种情况下,您需要为构成 table 的各个 div 元素添加 table、网格、行、单元格等角色。如果您使用构建 table 的原生 HTML 元素(、 、 等),角色将是多余的。

  • aria-xxxx:也用于屏幕阅读器和辅助技术。由于多种原因,使用了多种类型的 aria 属性。网络上不乏参考资料;你可以很容易地在 MDN 或其他网站上搜索它们。我在这里要注意的是,某些属性使它们变得多余。

    • 让我们以上面的代码段为例。 <input required aria-required="true" />。 required 属性是在 HTML 5 中引入的,对于屏幕阅读器来说已经足够了。因此,如果您的目标是现代浏览器(很有可能),则添加 aria-required 是多余的。但是,如果您的目标浏览器不支持 HTML 5,那么拥有它会很有用,因为这些浏览器会忽略 required 属性。
    • 从您的代码片段中获取的另一个示例展示了相同的观点,即 aria-labelledBy 在这里也是多余的。这是因为借助 for 属性,您已经拥有由 <label> 元素标记的输入。简而言之,如果原生 HTML 元素和属性还不够,aria 属性很有用。

总而言之,每个属性都有其不同的用途。并非所有这些都需要始终存在,这取决于您的代码结构、您使用的 HTML 元素、您定位的浏览器等。

希望对您有所帮助! :)