多数时候该用 aria-labelledby,因其复用可见文本、避免同步和翻译问题;aria-label 仅用于无对应可见文本的控件(如纯图标按钮),且两者不可共存。

aria-label 和 aria-labelledby 怎么选
多数时候该用 aria-labelledby,而不是硬塞 aria-label。前者复用已有文本节点,后者是额外字符串,容易和视觉文案不同步,也绕过翻译系统。
比如一个搜索框旁有 <label>搜索商品</label>,直接用 aria-labelledby="id-of-label" 就行;如果按钮图标没配文字(如仅一个放大镜 SVG),才用 aria-label="搜索" 补充语义。
- 优先用
aria-labelledby关联真实可见文本,避免重复维护 -
aria-label仅用于无对应可见文本的控件(如纯图标按钮、装饰性 icon) - 两者不能同时存在——
aria-label会覆盖aria-labelledby
role="button" 什么时候必须加
当用 <div> 或 <code><span></span> 模拟按钮时,必须加 role="button",否则屏幕阅读器不识别为可交互元素,也无法触发键盘回车/空格响应。
但更推荐直接用 <button></button> ——它自带 role、tabindex、键盘行为,且默认可聚焦。用 <div onclick="..."> + <code>role="button" 还得手动加 tabindex="0" 和键盘事件监听,极易漏。
- 能用
<button></button>就别用<div role="button"> <li>若必须用非 button 元素(如封装组件内部),除了 <code>role="button",还得加tabindex="0"并监听keydown处理 Enter/Space - 别给
<a></a>加role="button":链接和按钮语义不同,会误导用户操作预期 -
alt=""表示“此图无信息价值”,屏幕阅读器跳过 -
alt文本要简洁、具体,避免“图片”“图标”等冗余词 - 含链接的图片,
alt应说明链接目的,如alt="前往用户帮助中心",而非alt="问号图标" - 不要只依赖
placeholder作为标签——它会在输入后消失,且很多屏幕阅读器不读它 - 多选/单选组用
<fieldset></fieldset>+<legend></legend>做组标签,比多个独立 label 更清晰 - 动态生成的表单控件(如 JS 添加的 input),务必同步创建对应
<label></label>并正确绑定
alt 属性不是“随便写个描述就行”
alt 不是装饰性图片的“占位符”,而是替代整个图像信息的文本。空字符串 alt="" 只适用于纯装饰图(如分隔线、背景花纹);图表、图标、产品图都必须提供有意义的替代文本。
例如商品图不能写 alt="产品图",而应写 alt="黑色无线降噪耳机,带触控面板和折叠收纳盒";SVG 图标若已用 <title></title> 描述,且父容器有 role="img",也可省略 alt,但需确保 <title></title> 内容被读出。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
表单控件没 label 就等于没无障碍
所有 <input>、<select></select>、<textarea></textarea> 必须有明确关联的 <label></label>。靠 CSS 隐藏 <label></label> 但保留其 DOM 结构是可以的;靠 placeholder 或旁边文字“暗示”则完全无效——屏幕阅读器不会把 placeholder 当标签读,也不会自动关联邻近文本。
两种合法方式:显式 for/id 关联(<label for="name">姓名</label><input id="name">),或隐式包裹(<label>姓名<input></label>)。后者更简洁,且天然防 ID 冲突。
最常被忽略的是焦点管理:模态框打开后焦点没进到内部,关闭后没回到触发点;页面跳转后焦点卡在顶部而非主内容区。这些不属于 HTML 标签范畴,但直接影响视障用户操作流——光写对 alt 和 label 远不够。










