微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

css – rgba背景与IE过滤器替代:IE9呈现两者!

我正在尝试使用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解决方案.

原文地址:https://www.jb51.cc/css/217205.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。