问题 rgba()的颜色IE回退不起作用


为什么IE的后续回退 color: red; 不起作用?
在IE7中,颜色是 black 而不是 red
现场演示

HTML:

<div>
    <span>Hello</span>
</div>

CSS:

div {
    width: 200px;
    height: 100px;
    background-color: blue;
    text-align: center;
}
span {
    font-size: 2em;
    color: red;
    color: rgba(250, 250, 97, 0.9);
}

第三方编辑

关于css颜色的mozilla mdn 列出了不同的选项 color: value

  • CSS 2规范color: <value> 和值可以是关键字 red 要么 rgb(255,0,0)
  • CSS颜色模块3级 (推荐2017-12)增加了SVG颜色,rgba(),hsl()和hsla()函数,例如: rgba(0,0,0,0) 

9026
2017-07-13 10:48


起源



答案:


IE中不支持RGBA。

但是,当它看到您的颜色:样式时,它会尝试对其进行评估并恢复为默认颜色(#00000000)。 您 可以 在这里使用IE特定的黑客,例如

*color: red;

但是,假设您试图仅影响背景颜色,而不是整个元素的不透明度,那么最好使用过滤器将所需的rgba值设置为渐变的开始和结束颜色 - 创建一个rgba背景。

filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000050,endColorstr=#99000050);

-ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000050,endColorstr=#99000050);

但请记住 - IE假设Alpha是第一个,而不是最后一个,所以不要只是转换和复制你的值。 双重过滤器分别用于IE6和IE7。

http://css-tricks.com/rgba-browser-support/


11
2017-07-13 11:22



嗨,我试过了 *color: red; 但它不起作用。看这里: jsfiddle.net/JryG2/9 我不是想改变背景颜色的不透明度。通过设置 color: rgba(250, 250, 97, 0.9); 我的意思是设置文本颜色的不透明度。所以我仍然不明白如何定义适当的后备 rbga()。 - Misha Moroshko
Woops,我的坏。匆忙,但那很糟糕。第一:明星黑客只针对ie6和7,所以这是错误的。在IE 6/7中,它将追踪其他声明,并且可行(在您的小提琴上测试)。 span {font-size:2em;颜色:rgba(250,250,97,0.9); *红色;更技术上正确的方法是使用IE条件,这意味着如上所述编写代码,关闭样式元素,然后创建一个新的样式元素 - 只有一个规则 - 括号内如下:<! - [如果IE]> <style> span {color:red} </ style> <![endif] - > - SamGoody
其次,没有办法在IE中设置文本颜色的透明度,您可以做的最好是将文本放入元素中,并设置元素的不透明度。 - SamGoody
好,谢谢 !似乎IE条件是最好的解决方案。 - Misha Moroshko


答案:


IE中不支持RGBA。

但是,当它看到您的颜色:样式时,它会尝试对其进行评估并恢复为默认颜色(#00000000)。 您 可以 在这里使用IE特定的黑客,例如

*color: red;

但是,假设您试图仅影响背景颜色,而不是整个元素的不透明度,那么最好使用过滤器将所需的rgba值设置为渐变的开始和结束颜色 - 创建一个rgba背景。

filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000050,endColorstr=#99000050);

-ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000050,endColorstr=#99000050);

但请记住 - IE假设Alpha是第一个,而不是最后一个,所以不要只是转换和复制你的值。 双重过滤器分别用于IE6和IE7。

http://css-tricks.com/rgba-browser-support/


11
2017-07-13 11:22



嗨,我试过了 *color: red; 但它不起作用。看这里: jsfiddle.net/JryG2/9 我不是想改变背景颜色的不透明度。通过设置 color: rgba(250, 250, 97, 0.9); 我的意思是设置文本颜色的不透明度。所以我仍然不明白如何定义适当的后备 rbga()。 - Misha Moroshko
Woops,我的坏。匆忙,但那很糟糕。第一:明星黑客只针对ie6和7,所以这是错误的。在IE 6/7中,它将追踪其他声明,并且可行(在您的小提琴上测试)。 span {font-size:2em;颜色:rgba(250,250,97,0.9); *红色;更技术上正确的方法是使用IE条件,这意味着如上所述编写代码,关闭样式元素,然后创建一个新的样式元素 - 只有一个规则 - 括号内如下:<! - [如果IE]> <style> span {color:red} </ style> <![endif] - > - SamGoody
其次,没有办法在IE中设置文本颜色的透明度,您可以做的最好是将文本放入元素中,并设置元素的不透明度。 - SamGoody
好,谢谢 !似乎IE条件是最好的解决方案。 - Misha Moroshko


将这两个颜色声明拆分为单独的CSS规则集可以解决此问题:

span {
    font-size: 2em;
    color: red;
}
span {
    color: rgba(250, 250, 97, 0.9);
}

现在IE获取红色文本,更好的浏览器获得RGBA声明。


5
2018-04-24 15:23



哇,你是对的Lamah ......任何想法为什么会这样? - Simon East
这是一个总猜测,但也许IE的css解析器没有看到一个有效的规则,所以折扣整个块?可以通过向第二个块添加第二个IE有效规则来测试该理论,并查看它是否停止工作。 - Chris O'Kelly