条件注释仅在ie5–ie9中有效,ie10起被禁用,ie11及所有现代浏览器(chrome/firefox/safari/edge)完全忽略,不解析、不加载、不报错;其本质是ie专属机制,非跨浏览器兼容方案。

条件注释只在IE有效,现代浏览器完全忽略
HTML条件注释是IE特有的解析机制,仅IE5–IE9(部分支持到IE10)能识别,Chrome、Firefox、Safari、Edge(Chromium版)等一律跳过整段注释内容。这不是“兼容性方案”,而是“IE专属通道”——想用它做跨浏览器适配,前提是你还在维护IE9及以下版本。
常见错误现象:<!--[if IE]><link rel="stylesheet" href="ie-fix.css"><![endif]--> 在Chrome里打开,开发者工具Network面板根本看不到ie-fix.css加载;但IE8会加载并应用。别指望它对非IE生效。
- IE10开始默认禁用条件注释(除非文档模式强制设为IE9或更低)
- IE11已完全移除条件注释支持,哪怕设置
document.documentMode = 9也无效 - 所有基于
<!--[if !IE]>的“非IE专用”写法,在IE10+和现代浏览器中都会被当普通注释丢弃,不执行其中代码
必须配合html5shiv才能让IE8识别语义标签
IE8及更早版本遇到<main>、<section>、<nav>等HTML5标签时,不会创建DOM节点,document.querySelector('main')返回null,CSS选择器也完全不匹配。光靠条件注释引入html5shiv还不够,漏掉关键一步就会白忙。
- 必须用
<!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script><![endif]-->—— 注意是lt IE 9,不是IE 8或IE -
html5shiv只解决DOM创建,不解决默认样式:IE9–IE11中<section></section>仍是display: inline,需额外加CSS:main, section, article, nav, header, footer { display: block; } - 不能用
document.write动态注入shiv脚本,IE9+已禁用该API;必须确保<script></script>标签在内静态存在
@supports和条件注释不能混用,IE11会直接跳过整个CSS块
有人试图用<!--[if IE]>@supports (display: grid) { ... }<![endif]-->来兜底,这是危险操作。IE11既不支持@supports语法,也不支持条件注释,结果是整段CSS规则被忽略,连降级的Flex布局都失效。
- IE11对
@supports报语法错误,并跳过包含它的整个<style></style>块或外部CSS文件 - 正确做法是先写通用降级样式:
.container { display: flex; },再用@supports包裹增强样式,且不包在条件注释里:@supports (display: grid) { .container { display: grid; } } - 如果必须区分IE10/11,只能靠JS检测:
if (navigator.userAgent.indexOf('MSIE 10') > -1 || navigator.userAgent.indexOf('Trident/7') > -1),然后动态加class控制样式
移动端和现代PC根本不需要条件注释
当前时间是2026年,主流项目已基本放弃IE支持。如果你的统计数据显示IE使用率低于0.1%,或目标用户明确不包含政府/银行等遗留系统场景,硬加条件注释只会增加HTML体积、拖慢首屏解析、干扰CDN缓存命中率。
容易被忽略的点:
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











