HTMLHint通过在.htmlhintrc中显式配置"alt-require":true和"input-requires-label":true强制执行这两条可访问性规则,否则默认不启用;前者要求所有<img>含alt属性,后者要求<input><textarea><select>必须被<label>包裹或通过for/id严格关联。

HTML可访问性标准和代码质量检测不是两套平行系统,而是同一把尺子的正反两面:可访问性规则是质量检测中不可妥协的硬性约束,而质量检测工具(如 HTMLHint、axe)是落地这些标准的唯一可靠执行者。
HTMLHint 怎么强制执行 alt-require 和 input-requires-label 规则
HTMLHint 的可访问性规则默认不启用,必须显式配置。不配置就等于没开——这是最常被忽略的前提。
- 在
.htmlhintrc中必须包含"alt-require": true和"input-requires-label": true,仅靠安装插件不会自动生效 -
input-requires-label会拒绝所有未被<label>包裹或未通过for属性关联的<input>,包括<textarea>和<select> - 若用
<label>包裹方式,<input>必须在标签内部;若用for关联,id值必须严格匹配,大小写敏感 - 该规则不检查
aria-label或aria-labelledby—— 它只认原生语义,这是设计使然,不是缺陷
W3C 验证器为什么查不出缺少 alt 的问题
W3C Markup Validation Service 只验证语法合规性,不校验可访问性实践。它认为 <img src="icon.svg"> 是合法 HTML5 代码,哪怕它对屏幕阅读器完全失明。
- W3C 标准本身未将
alt设为强制属性(装饰性图片可设alt=""),但 WCAG 2.1 AA 级要求所有非纯装饰图片必须有有意义的alt - 这意味着:W3C 报“通过”,HTMLHint 报“错误”,axe 报“严重”——三者目标不同,不能互相替代
- 真实项目中,必须把 HTMLHint 的可访问性规则集成进 CI 流程,否则 W3C 通过 ≠ 可访问
axe 和 HTMLHint 在 CI 中怎么分工才不重复不遗漏
axe 检查运行时 DOM,HTMLHint 检查源码结构;一个看“最终呈现”,一个看“原始意图”。两者叠加才能覆盖静态与动态场景。
立即学习“前端免费学习笔记(深入)”;
- HTMLHint 在 pre-commit 或 lint 阶段运行,拦截
<img>缺alt、<input>无<label>、<section>缺aria-labelledby等模板级问题 - axe 在测试环境启动后运行,能捕获 JS 动态插入的
<img>未补alt、模态框打开后焦点未管理、aria-live区域未正确声明等运行时缺陷 - CI 脚本中应分开报告:HTMLHint 失败直接阻断构建,axe 失败标记为“需人工确认”,因为部分结果依赖上下文判断(例如某张图是否真为装饰性)
真正难的从来不是工具会不会报错,而是当 HTMLHint 报出 frame-title-require 错误时,你得立刻判断那个 <iframe> 是嵌第三方地图、客服 widget 还是自己可控的内嵌页——前者可能只能加 title 后手动测试,后者必须补 aria-label 并验证 NVDA 朗读效果。工具只划线,画哪条线、为什么画,还得人来定。



















