我正在尝试使用CSS3 rgba()和微软的过滤器属性混合使用div的背景透明度:
div { width: 200px; height: 200px; /* blue,50% alpha */ background: rgba(0,255,0.5); /* red,50% alpha */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFF0000,endColorstr=#7FFF0000); }
如预期的那样,支持rgba()的浏览器会将div渲染为蓝色,而IE 6-8会将其呈现为红色.
IE9可以显然处理这两个(以前我以为过滤器支持被删除),结果是一个紫色的div.有没有办法使IE9支持这些属性,但不支持其他属性? rgba()显然是首选.
注:我正在使用IETester来运行这些测试.如果IE9的正确构建不这样做,请让我知道.
解决方法
我想出了一个我认为我会分享的恶作剧.
IE9及以上版本支持:not()CSS伪选择器.通过使用元素上不存在的属性,我们可以让IE9禁用它的过滤器渐变:
div { width: 200px; height: 200px; /* For FF,Chome,Opera,IE9+ */ background: rgba(0,0.5); /* For IE6-9 */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#7FFF0000,endColorstr=#7FFF0000); } div:not([dummy]) { /* IE9 only */ filter: progid:DXImageTransform.Microsoft.gradient(enabled='false'); }
我最终使用这个,因为我的透明div只有一次功能.它也似乎有点整洁地保存CSS,而不是在HTML中使用条件注释.
编辑:为了支持其他答案,我发现微软开发团队的this article鼓励开发人员使用条件注释,而不是我的CSS解决方案.