html工程化核心是让每行html经得起检查、协作和长期维护,需从首行起建立lint、规范与反馈闭环;必须配置htmlhint的5条底线规则:doctype-first、tagname-lowercase、attr-lowercase、attr-quote-style、meta-charset-require。

HTML工程化不是加一堆构建工具,而是让每行HTML都经得起检查、协作和长期维护。核心就一条:从写第一行开始,就得有 lint、有规范、有可验证的反馈闭环。
HTMLHint 配置必须覆盖这 5 条基础规则
不配规则的 HTMLHint 等于没装。以下 doctype-first、tagname-lowercase、attr-lowercase、attr-quote-style、meta-charset-require 是底线配置,缺一不可:
-
doctype-first防止页面触发怪异模式,必须是文件第一行,前面不能有任何空格或注释 -
tagname-lowercase和attr-lowercase同步解决大小写混用问题,比如<div> 或 <code><img src="...">会被直接标红 -
attr-quote-style强制双引号,class=header或class='header'都会报错,只接受class="header" -
meta-charset-require检查内是否存在<meta charset="UTF-8">,且必须在<title></title>之前 - 确认项目根目录存在
.htmlhintrc文件,且内容为 JSON 格式(不是 JS 导出对象) - 检查 VS Code 设置中是否启用了
html.validate.scripts和html.validate.styles,这两项默认关闭 - 如果 HTML 是通过 JS 模板字符串拼接(如 React JSX),HTMLHint 默认不扫描,需改用 ESLint +
eslint-plugin-html或@markuplint/markuplint -
<main></main>全局只能出现一次,且不能嵌套在<header></header>、<footer></footer>或<nav></nav>内 -
<section></section>必须自带标题(<h2></h2>–<h6></h6>),否则优先用<div> <li> <code><nav></nav>仅包裹导航链接,搜索框、登录入口、广告位不属于导航范畴 - 标题层级必须连续,
<h1></h1>后跟<h2></h2>,跳到<h4></h4>会被辅助技术忽略整段内容 -
<img>的alt=""仅适用于纯装饰图;带信息的图标(如 PDF 下载按钮里的图标)必须描述动作,例如alt="下载 PDF 文档" -
<input type="text">必须通过<label for="id"></label>显式关联,aria-label不能替代label—— 键盘用户 Tab 到输入框时,只有label能触发屏幕阅读器播报 - 动态插入的表单元素(如 JS 创建的
<select></select>),必须同步生成唯一id并绑定label,否则无障碍测试直接失败
VS Code 中 HTMLHint 不生效?先查这三处
常见现象是安装了扩展但保存后无提示,本质是配置未加载或路径不匹配:
语义标签不是“越多越好”,而是“用对位置”
滥用 <section></section>、<article></article> 反而破坏结构,浏览器和屏幕阅读器会按真实嵌套关系解析语义层级:
alt 属性和 label 关联不是“补上就行”,而是功能级要求
缺失 alt 或 label 不是警告,是导致部分用户完全无法操作的硬性缺陷:
真正卡住工程化落地的,往往不是工具链没搭好,而是团队对“HTML 是结构契约”这件事缺乏共识——它不渲染,也得能被解析;没人看,也得能被读取。











