<p>HTML注释语法<!-- ... -->从HTML4到HTML5完全一致且兼容IE6+,但注释内禁用--;script/style内禁用HTML注释;条件注释是IE私有语法,HTML5不支持。</p>

HTML 注释语法从 HTML4 到 HTML5 完全没变
能用,而且写法一模一样。HTML 的注释语法是 SGML 遗留下来的通用格式,并非 HTML4 或 HTML5 特有,所以 <!-- ... --> 在两者中都完全合法、被所有浏览器支持,包括 IE6+。
注释里不能出现 -- 连续两个短横线
这是最容易踩的坑:只要注释内容里出现 --(比如误写成 <!-- 这里--有问题 -->),整个注释会提前终止,后续内容可能被当成普通文本或引发解析错误。
常见错误场景:
- 复制粘贴带双短横的英文破折号(如 em dash —)但被误转为
-- - 在注释里写正则表达式或命令行参数(如
grep -v --invert-match)时未转义 - 用自动化工具生成 HTML 时未过滤掉源数据中的
--
HTML5 不允许注释出现在 <script> 或 <style> 内部
这不是注释语法变了,而是解析规则更严格了。在 HTML4 中,有人会这样写:
立即学习“前端免费学习笔记(深入)”;
<script>
// <!--
console.log("hello");
// -->
</script>这种“伪装成注释”的 JS 写法,在 HTML5 中已被废弃。现代浏览器仍兼容,但 <!-- 和 --> 在 <script> 内部不再被当作 HTML 注释处理,而是原样传给 JS 引擎——而 JS 引擎不认识 <!--,直接报 SyntaxError: Unexpected token '<'。
正确做法是用 JS 自己的注释:// 或 /* */。
HTML5 新增了条件注释?不,那是 IE 专属,且已淘汰
你可能见过这样的写法:
<!--[if IE]> <link rel="stylesheet" href="ie.css"> <![endif]-->
这根本不是标准 HTML 注释,而是 IE5–IE9 的私有语法,HTML4 和 HTML5 规范里都不存在。它依赖 IE 特有的条件编译逻辑,Chrome/Firefox/Safari 一律忽略整段。HTML5 标准明确不支持该语法,现代项目应改用特性检测(如 document.body.classList)或 CSS @supports。
顺带提醒:<!--[if ...]> 在 HTML5 文档中虽不会报错,但会被当作普通注释跳过,里面的标签不会被解析。
注释本身很简单,难的是在嵌套脚本、自动化模板、跨团队协作时守住那条底线:别让 -- 悄悄混进去,也别把 IE 时代的幻觉当真。










