最稳妥写法是按优先级倒序:color: blue; color: red\9; *color: green; _color: purple,因ie6识别能力最弱须放最后,否则会被高版本覆盖;\9兼容ie6–ie10,\0仅ie8–ie10,\9\0仅ie9–ie10,*和_在ie8+标准模式下已失效。

IE6/7/8 的属性前缀 Hack 怎么写才不冲突
直接用 _color、*color、color\9 是最常用也最稳妥的方式,但必须严格按优先级倒序书写:IE6 识别能力最弱,所以它的规则要放在最后,否则会被更高版本覆盖。
-
color: blue;—— 所有现代浏览器(包括 IE9+)都走这条 -
color: red\9;—— IE6–IE10 都识别,但 IE11+ 和 Edge 已废弃支持 -
*color: green;—— IE6–IE7 识别,IE8+ 忽略(注意:IE8 标准模式下已不识别*) -
_color: purple;—— 仅 IE6(标准模式)识别;IE7+ 和怪异模式下失效
关键点是:顺序不能错。如果把 _color 放在 *color 前面,IE6 会先匹配到 _color,再被 *color 覆盖——结果反而变成 IE6 和 IE7 显示一样。
\9 和 \0 这类后缀 Hack 的兼容边界在哪
\9 实际上在 IE6–IE10 全系生效,不是“只到 IE8”;而 \0 是 IE8–IE10 的专属,IE11+ 完全不认。这两个后缀本质是 IE 解析器对非法转义序列的容错行为,不是标准语法,所以不能跨浏览器预测。
-
background: #fff\9;→ IE6–IE10 生效,Chrome/Firefox/Safari 忽略整行 -
background: #fff\0;→ IE8–IE10 生效,IE6/7/11+ 和其他浏览器忽略 -
background: #fff\9\0;→ 仅 IE9–IE10 生效(因为 IE8 不支持\9\0连用)
别用 或 \ie —— 这些根本无效,IE 只认 和 <p>别用 <code>\8 或 \ie —— 这些根本无效,IE 只认 \9 和 \0 这两个魔数。
为什么 *html 和 *+html 选择器现在基本不用了
这类选择器 Hack 依赖 IE 对 CSS 选择器解析的漏洞,在 IE8+ 标准模式下已被修复,且现代构建工具(如 PostCSS、Autoprefixer)默认会删掉它们,容易导致样式突然失效。
-
*html .box→ IE6 专属,但 IE7 在怪异模式下也会误匹配 -
*+html .box→ IE7 专属,但某些 IE8 早期 beta 版本也识别,不可靠 - 更严重的是:这些选择器无法被 CSS 预处理器(如 Sass)原生编译,需额外插件或绕过处理
除非维护一个明确锁定 IE6/7 的遗留系统,否则优先用属性前缀法,它更轻量、可内联、调试直观。
实际项目里怎么避免 Hack 污染主样式流
不要把 Hack 直接混在组件 CSS 里。推荐两种隔离方式:
- 抽成独立文件,比如
ie-hacks.css,通过条件注释加载:<!--[if lt IE 9]><link rel="stylesheet" href="ie-hacks.css"><![endif]--> - 用 CSS 自定义属性兜底 + 属性 Hack 覆盖:
.btn { --bg: #007bff; background: var(--bg); background: #007bff\9; },这样主逻辑清晰,Hack 只负责降级
特别注意:所有 Hack 规则必须加注释说明目标浏览器和生效条件,否则半年后你自己都看不懂哪条是给 IE6 的、哪条是防 IE8 解析 bug 的。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











