ie6–ie9需用filter:progid:dximagetransform.microsoft.alpha()设透明度、gradient()设渐变,参数严格(如opacity=60、#aarrggbb),且会触发haslayout和stacking context异常,须配合zoom:1等修复。

IE6–IE9 只能用 filter: progid:DXImageTransform.Microsoft.Alpha() 或 filter: progid:DXImageTransform.Microsoft.gradient() 实现颜色滤镜效果,现代写法如 opacity、filter: blur() 在这些版本中完全无效。
IE6–IE9 的透明度控制必须用 Alpha 滤镜
标准 opacity 属性在 IE6–IE9 不被识别,必须改用微软私有滤镜:filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60)(数值 0–100)。注意:
-
Opacity参数名首字母大写,不是小写的opacity - 值为整数,不带百分号,也不支持小数(比如不能写
Opacity=65.5) - 该滤镜会触发 hasLayout,若元素原本未设置宽高或浮动,可能引发布局偏移,建议配合
zoom: 1显式触发 - 与其他
filter值(如gradient)共存时,需按顺序书写,Alpha 应放在最后,否则可能被覆盖
IE 下渐变背景不能用 background-image: linear-gradient()
IE6–IE9 不支持 CSS3 渐变语法,必须降级为 filter: progid:DXImageTransform.Microsoft.gradient(),且格式严格:
-
startColorstr和endColorstr必须是#AARRGGBB格式(例如半透明白色是#80FFFFFF),不能用rgb()或十六进制简写(如#fff) -
GradientType=0表示垂直渐变,GradientType=1表示水平渐变;IE 不支持角度、多色停止等高级特性 - 该滤镜必须写在标准
background声明之后,否则会被覆盖;同时需加zoom: 1或position: relative确保触发渲染 - 如果同时需要透明度和渐变,不能叠加两个
filter,得把 Alpha 值融合进startColorstr或endColorstr的 AA 通道里
IE 滤镜的 stacking context 和 z-index 行为异常
启用 filter 后,IE6–IE9 会隐式创建 stacking context,导致 z-index 失效或层级错乱,常见现象包括:
- 下拉菜单被父级带
filter的导航栏遮挡 - 弹窗
position: absolute元素无法浮在最上层 - 解决方案不是去掉滤镜,而是让弹层父容器也加
zoom: 1或position: relative,使其独立形成 stacking context - 避免在 body 或全局 wrapper 上直接使用
filter,尤其不要用gradient做全屏背景——它会让所有后代绝对定位元素“困”在同一个层里
真正麻烦的不是写法本身,而是 IE 滤镜对渲染模型的底层干扰:它绕过标准盒模型与层叠规则,靠 hasLayout 和私有渲染路径实现。一旦混用现代属性(比如 transform 或 will-change),很容易触发不可预测的重绘崩溃。所以,能用条件注释或 JS UA 检测隔离 IE6–IE9 样式块,就别用 \9 hack 全局污染。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











