必填项星号应加在 label 文本内部最稳妥,需与 label 同一文本节点或紧邻 span(带 aria-hidden="true"),同时必须设置 required 属性;aria-required="true" 仅作可选补充,不可替代 required;css 应单独控制星号样式并确保对比度 ≥4.5:1。

必填项星号该加在 label 里还是 input 旁边?
加在 label 文本内部最稳妥。浏览器和读屏器能正确关联星号与控件,且 CSS 容易统一控制样式。不要用伪元素(如 ::after)动态插入星号——部分读屏软件会忽略它,导致无障碍失效。
- 星号必须和
label 文本在同一文本节点,或紧邻的 span 中(带 aria-hidden="true")
- 不要写成:
<label>姓名</label><span>*</span><input name="name">(label 和 input 未显式关联,语义断裂)
- 推荐写法:
<label>姓名<span aria-hidden="true">*</span></label><input name="name" required>
- 必须同时设置
required 属性,仅视觉标记不触发浏览器原生校验
aria-required="true" 和 required 能只用一个吗?
不能省略 required。仅设 aria-required="true" 不会触发表单提交拦截、不激活浏览器默认提示,纯属辅助说明。它只对读屏软件有效,对功能无实质影响。
-
required 是功能必需:控制校验逻辑、影响 :valid/:invalid 伪类、决定 submit 行为
-
aria-required="true" 是可选补充:仅增强无障碍描述,且仅当 label 无法清晰表达必填时才需添加
- 实际项目中,只要 label 含星号 + input 有
required,通常无需额外加 aria-required
CSS 控制星号颜色/大小时要注意什么?
避免用 color 或 font-size 直接作用于整个 label——这会把星号和文字一起缩放/变色,降低可读性对比度。应单独选中星号元素。
- 正确:
label span[aria-hidden] { color: #f00; font-size: 1.2em; vertical-align: middle; }
- 错误:
label { color: #f00; }(整段文字变红,包括正常文字)
- 必须保证星号与背景的对比度 ≥ 4.5:1(WCAG AA 级),尤其在深色模式下测试
- 不要用
position: absolute 偏移星号——可能脱离流式布局,影响屏幕阅读顺序
后端渲染模板里动态加星号容易漏哪些点?
模板引擎拼接时,常忘记同步更新 required 属性或遗漏 aria-hidden。更隐蔽的问题是:同一页面多个同名字段(如地址行1/行2),for/id 关联出错导致星号绑定错位。
- 检查每处
label for="xxx" 是否严格匹配对应 input id="xxx"
- 动态生成时,确保
required 属性存在且值为非空字符串(required="" 或 required 均可,但 required="false" 无效)
- 若使用 React/Vue,避免在
label 内用条件渲染星号却没同步控制 required 属性
label 文本在同一文本节点,或紧邻的 span 中(带 aria-hidden="true")<label>姓名</label><span>*</span><input name="name">(label 和 input 未显式关联,语义断裂)<label>姓名<span aria-hidden="true">*</span></label><input name="name" required>
required 属性,仅视觉标记不触发浏览器原生校验aria-required="true" 和 required 能只用一个吗?
不能省略 required。仅设 aria-required="true" 不会触发表单提交拦截、不激活浏览器默认提示,纯属辅助说明。它只对读屏软件有效,对功能无实质影响。
-
required是功能必需:控制校验逻辑、影响 :valid/:invalid 伪类、决定 submit 行为 -
aria-required="true"是可选补充:仅增强无障碍描述,且仅当 label 无法清晰表达必填时才需添加 - 实际项目中,只要 label 含星号 + input 有
required,通常无需额外加aria-required
CSS 控制星号颜色/大小时要注意什么?
避免用 color 或 font-size 直接作用于整个 label——这会把星号和文字一起缩放/变色,降低可读性对比度。应单独选中星号元素。
- 正确:
label span[aria-hidden] { color: #f00; font-size: 1.2em; vertical-align: middle; }
- 错误:
label { color: #f00; }(整段文字变红,包括正常文字)
- 必须保证星号与背景的对比度 ≥ 4.5:1(WCAG AA 级),尤其在深色模式下测试
- 不要用
position: absolute 偏移星号——可能脱离流式布局,影响屏幕阅读顺序
后端渲染模板里动态加星号容易漏哪些点?
模板引擎拼接时,常忘记同步更新 required 属性或遗漏 aria-hidden。更隐蔽的问题是:同一页面多个同名字段(如地址行1/行2),for/id 关联出错导致星号绑定错位。
- 检查每处
label for="xxx" 是否严格匹配对应 input id="xxx"
- 动态生成时,确保
required 属性存在且值为非空字符串(required="" 或 required 均可,但 required="false" 无效)
- 若使用 React/Vue,避免在
label 内用条件渲染星号却没同步控制 required 属性
label span[aria-hidden] { color: #f00; font-size: 1.2em; vertical-align: middle; }
label { color: #f00; }(整段文字变红,包括正常文字)position: absolute 偏移星号——可能脱离流式布局,影响屏幕阅读顺序required 属性或遗漏 aria-hidden。更隐蔽的问题是:同一页面多个同名字段(如地址行1/行2),for/id 关联出错导致星号绑定错位。
- 检查每处
label for="xxx"是否严格匹配对应input id="xxx" - 动态生成时,确保
required属性存在且值为非空字符串(required=""或required均可,但required="false"无效) - 若使用 React/Vue,避免在
label内用条件渲染星号却没同步控制required属性
星号不是装饰,是表单契约的一部分。漏掉 required、断开 label 关联、或让星号脱离语义流,都会让验证逻辑和无障碍支持直接失效。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










