条件注释是IE5–IE9专属私有语法,非标准HTML,现代浏览器直接丢弃;VS Code等工具报错因其非法;维护老项目外应避免使用,改用特性检测等现代方案。

HTML条件注释只在IE6–IE9中有效,现代浏览器完全忽略它;如果你不是在维护老项目,别用它。
什么是条件注释(IE专属语法)
条件注释是微软为旧版IE(IE5–IE9)设计的私有语法,形式类似HTML注释但带方括号逻辑,例如。它不是标准HTML,W3C从未接纳,Chrome/Firefox/Safari/Edge(Chromium版)一律跳过解析——连“当作普通注释”都不做,直接丢弃整段。
常见写法包括:
<!--[if IE]><!-->仅IE可见内容<!--<![endif]--><!--[if lt IE 9]><script src="ie8-fix.js"><![endif]-->-
<!--[if !IE]><!-->非IE浏览器内容<!--<![endif]-->(注意:这个“非IE”在IE10+也失效)
为什么VS Code或Prettier会把它标红或格式错乱
因为条件注释根本不是合法HTML标记,只是IE解析器的特例hack。主流编辑器和Linter(如HTMLHint、eslint-plugin-html)默认按标准HTML校验,遇到这种结构会报Parse error或Unexpected token。
立即学习“前端免费学习笔记(深入)”;
解决办法只有两个:
- 在构建流程中用
html-webpack-plugin或自定义loader预处理,把条件注释提前移除或替换 - 在编辑器设置里关掉对该类警告的提示(不推荐,掩盖真实问题)
切勿尝试用<!--手动包裹条件注释来“修复”——那会变成双重注释,IE也不认。
替代方案:现代项目该怎么做
条件注释已死,但“按浏览器特性加载资源”的需求还在。正确做法是:
- 用
document.documentMode或navigator.userAgent检测(仅限JS运行时) - 用
@supports在CSS中做特性检测,而不是浏览器检测 - 用
feature detection库如Modernizr(渐进增强) - 服务端根据
User-Agent头返回不同HTML(需后端配合)
比如要给IE9以下加Polyfill,应该用loadjs动态加载,而不是写



















