<p>HTML模板中只能用<!-- -->注释,因解析器仅识别该格式;其他如//或/ /会被当作普通文本显示,可能污染DOM、破坏结构或引发XSS风险。</p>

HTML模板里用 <!-- --> 注释,别搞花活,也别混用其他语言风格。 所有非标准注释(比如 //、/* */、{# #})在 HTML 解析阶段会被当作文本或非法内容暴露,轻则污染 DOM,重则破坏结构或触发 XSS 风险。
为什么不能用 JS/CSS 风格注释写在 HTML 模板里
HTML 解析器只认 <!-- -->。哪怕你写的是纯静态 HTML 文件,只要放在 <body> 或 <head> 里,// 或 /* */ 就只是普通字符,浏览器会原样显示或截断——尤其当它们出现在 <script> 外部、又没被包裹在 CDATA 里时:
<p>// 这不是注释,是文字</p>
常见后果包括:
- 页面中意外出现
// TODO: fix this这类残留文本 - 条件编译注释(如 IE 的
<!--[if IE]>...<![endif]-->)被其他注释干扰而失效 - 构建工具(如 Webpack + html-webpack-plugin)无法识别非标准注释,导致提取/压缩逻辑出错
HTML 注释的合理用法和边界
真正安全、可维护的注释只做三件事:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
立即学习“前端免费学习笔记(深入)”;
- 说明区块用途:
<!-- header navigation start --> - 标记模板片段归属:
<!-- @include partials/footer.html -->(仅限预编译场景,且需工具支持) - 临时禁用一段结构:
<!-- <div class="legacy-widget">...</div> -->
注意:
- 不要在注释里塞 JS 逻辑或变量(如
<!-- {{ user.name }} -->),服务端模板引擎可能不处理,前端运行时又不可见 - 避免嵌套注释:
<!-- outer <!-- inner --> -->是非法的,解析器会提前闭合 - 生产环境建议用构建步骤移除注释(如
html-minifier-terser配置removeComments: true),防止敏感信息泄露
多人协作时注释容易踩的坑
团队里最常出问题的不是“写不写注释”,而是“怎么写”和“写在哪”:
- 把 TODO 当行动项写进注释(
<!-- TODO: migrate to useIntersectionObserver -->),但没人跟踪、不进 issue 系统,半年后还在那儿 - 用注释替代语义化标签,比如写
<!-- main content --><div>...,而不是直接用<main> - 在组件级 HTML 模板里重复写大段说明(如 Vue/React 的
.vue或.tsx中),其实该挪到README.md或 JSDoc 里 - Git diff 里大量注释增删,掩盖真实变更;建议把结构性注释(如
<!-- end sidebar -->)改用 class 命名约定(class="sidebar-end")代替
真正难的不是语法对不对,而是判断哪句话值得留在 HTML 里——它得同时满足:能被所有开发者一眼看懂、不会随逻辑变动过期、不增加运行时负担。多数时候,少写比多写更稳妥。


















