条件注释是ie专属html语法,仅ie5.5–ie9解析,其他浏览器完全忽略;它非标准但曾是最稳妥的兼容手段,用于精准加载html5shiv等修复脚本,避免现代浏览器额外请求。

条件注释是IE专属的HTML语法,仅在IE(5.5–9)中被解析,其他浏览器完全忽略。它不是HTML标准,但曾是解决IE兼容问题最稳妥的手段——尤其适合精准加载html5shiv、respond.js等修复脚本,避免现代浏览器额外下载无用资源。
只给IE加载脚本:语法与位置
条件注释必须写在HTML文档的 内,且紧贴
-
<!--[if IE]><script src="ie-fix.js"></script><![endif]-->→ 所有IE版本 -
<!--[if lt IE 9]><script src="html5shiv.min.js"></script><![endif]-->→ IE8及以下(最常用) -
<!--[if gte IE 9]><link rel="stylesheet" href="ie9-plus.css"><![endif]-->→ IE9及以上
注意:IE10+已彻底废弃条件注释,所以无需为IE10/11写对应逻辑;现代项目若不支持IE9及以下,可直接跳过这步。
搭配html5shiv使用的关键细节
仅引入html5shiv还不够。IE8及以下连 <header></header> 标签都创建不出DOM节点;IE9–11虽能识别标签,但默认按 inline 渲染,导致布局塌陷。因此必须同步做两件事:
- 在条件注释中加载html5shiv(如上例)
- 在CSS中显式声明语义标签为块级元素:
article, aside, footer, header, nav, section { display: block; }
这条CSS规则建议放在全局基础样式里,无需条件加载——现代浏览器也认,且不影响渲染。
替代方案:现代项目如何安全降级
随着IE市场份额归零,多数新项目已移除条件注释。若仍需兼顾旧环境,更推荐组合策略:
- 用
<script></script>动态检测:判断document.createElement('header').nodeType是否为1,再决定是否注入polyfill - 用Modernizr做特性检测:它会自动给
添加no-js、js等类名,配合CSS可做细粒度控制 - 服务端UA识别(慎用):仅限内网或政企场景,需严格校验,避免被伪造UA干扰
条件注释本质是“浏览器类型开关”,而现代兼容思路转向“能力开关”——检测 'localStorage' in window 比检测 navigator.userAgent.includes('MSIE') 更可靠。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











