<p>HTML注释唯一合法形式是<!-- -->,天然支持跨行但禁止嵌套、禁用--和-->组合,不可出现在标签内部或DOCTYPE前,仅对HTML解析器生效。</p>
HTML 没有 // 或 /* */ 这类语法,<!-- --> 是唯一合法形式。它天然支持跨行,所谓“多行注释”只是把换行符写在 <!-- 和 --> 之间而已,浏览器不关心里面有没有回车或缩进。
常见错误现象:VS Code 里按 Ctrl+/ 自动加的注释变成每行都套一层 <!-- 和 -->,结果生成一堆嵌套或断裂的注释,直接破坏结构。
<!-- 导航栏开始 -->
<!-- 用户登录表单 包含邮箱、密码、记住我选项 -->
<!-- 注释开始 <!-- 嵌套 --> -->(嵌套不被识别,第二个 <!-- 变成普通文本)<!-- 这里用了--双横线 -->(-- 出现在中间,解析器会在第一个 -- 处提前闭合)在 <script> 里写 <!-- 不是注释 JS 代码,而是告诉 HTML 解析器:“从这儿开始一段 HTML 注释”。JS 引擎根本不管它,反而可能因语法错乱报 Uncaught SyntaxError: Unexpected token '('。
使用场景很明确:HTML 注释只对 HTML 解析器生效,JS/CSS 引擎完全无视。临时屏蔽整段脚本?应该用 <!-- 包裹整个 <script>...;想注释 JS 逻辑?必须用 // 或 /* */。
立即学习“前端免费学习笔记(深入)”;
<!-- <script>console.log("test");</script> -->
<script>// 这才是 JS 注释</script>
<script><!-- console.log("test"); --></script>(HTML 解析器认为注释从 <!-- 开始,但没闭合,后续 JS 被当作文本渲染)<style> 同理,CSS 注释必须用 /* */,<!-- 在里面会失效甚至触发解析异常-- 是注释结束的触发信号,只要 HTML 解析器在 <!-- 后看到连续两个短横线,就会立刻终止注释——哪怕后面还跟着 -->。同理,--> 组合一旦出现,也会被当作结束标记处理,导致注释提前收口,后面内容裸露。
这不是编辑器高亮问题,是真实解析行为。页面突然空白、DOM 结构错乱、某些标签消失,大概率是这个原因。
<!-- 当前版本:v2.1--beta -->(--beta 中的 -- 提前结束注释)<!-- 这里写了 > 符号 -->(> 单独出现没问题,但若前面紧挨着 --,如 -->,就危险)<!-- 当前版本:v2.1—beta -->(用长破折号 — 替代 --)<!-- 这里写了 > 符号 -->(用实体 > 编码,虽非必需,但最保险)HTML 注释不能插在标签内部、属性值中、DOCTYPE 前,也不能打断 CDATA 上下文。看似只是“加点说明”,但位置错了等于删代码——比如把 <!-- 放在 <div class="x"> 的引号中间,属性值会被截断,整个标签解析失败。
性能上它不影响渲染,但体积大了会拖慢首屏加载。构建时建议用 html-minifier 等工具自动移除调试用注释,注意别误删版权或生成标记这类关键注释。
<div class="<!-- test -->x">(注释在属性值中,引号提前闭合)<!-- <!DOCTYPE html> -->(注释在 DOCTYPE 前,某些旧版 IE 会触发怪异模式)<div><!-- <p>内容</p> --></div>(看起来没问题,但如果 <p> 里本身含 -- 或未转义 <,就可能出事)实际写注释时,最容易被忽略的是:它不是“写给人看的便签”,而是 HTML 语法的一部分,受解析器严格约束。一个 --、一个错位的 >、一段没闭合的 <!--,都可能让整页结构塌掉。