html - aria-label 与表单标签
问题描述
这两种屏幕阅读器技术在表单上是否有任何区别,并且比另一种更受鼓励:
<label for="titleInput">Title</label>
<input type="text" id="titleInput" name="title" value="">
<div>Title</div>
<input type="text" aria-label="Title" name="title" value="">
第一种方式一直是设置它的方式,但自从引入了 WAI-ARIA 后,我开始思考使用aria-label
with forms 是否比使用<label for="x">
.
解决方案
作为一个经验法则:如果一个真正的元素可以完成这项工作,那么就使用一个真正的元素。当没有表达语义的真实元素或者当你做一些非常奇怪的事情阻止你使用正常元素时,你会回退到 ARIA。
(大多数时候,当你在做一些非常奇怪的事情时,你应该停止做那些奇怪的事情)。
在这种特殊情况下,两者之间存在一些主要差异。
浏览器不会像使用标签元素那样将点击目标扩展到 div 元素。单击标签将聚焦输入,单击 div 不会。
您现在有两个标签。div 和属性在两个不同的地方提供相同的信息。该属性不会替换 div,因此屏幕阅读器将读出 div 文本和与输入关联的标签。
使用<label>
. 它专门用于将文本与表单控件相关联。
aria-label
旨在提供屏幕阅读器无法读取的某些内容的文本描述。例如,当您使用背景图像而不是使用属性来传达信息时<img>
(alt
请参阅我之前关于怪异的注释)。
推荐阅读
- flutter - 两个包在颤振中使用两个不同的 compileSdkVersion
- python - matplotlib 中使用函数 z = f(x,y) 绘制曲面图,其中 f 不能用标准函数编写。如何?
- github - 如何在所有组织存储库中使用 GitHub 操作工作流?
- javascript - 如何将输入值推送到本地存储的数组中?
- java - 不能在 Java 中使用协程......但是插入 Kotlin 协程呢?
- javascript - 如何获取由属性标识的表格行的位置
- node.js - 当由公共 IP 地址触发时,来自 nodejs express 服务器的本地 http 请求被 CORS 阻止
- c - 如何仅将结构矩阵中的元素移动一次?
- node.js - 解码 LoRaWAN 数据包(加入接受)
- c - 获取 zsh:arm64 Visual Studio 代码中的分段错误