RGBa 是一种在 CSS 中声明颜色并包含 Alpha 透明度支持的方式。它看起来像这样
div {
background: rgba(200, 54, 54, 0.5);
}
这使我们能够使用透明颜色填充区域;前三个数字表示 RGB 值的颜色,第四个数字表示 0 到 1 之间的透明度值(零表示完全透明,一表示完全不透明)。我们长期以来一直拥有opacity属性,它与此类似,但opacity强制所有后代元素也变得透明,并且无法阻止这种情况(除非使用 奇怪的位置黑客)跨浏览器不透明度 也有些混乱。
使用 RGBa,我们可以使一个盒子透明,同时保留其后代元素
声明备用颜色
并非所有浏览器都支持 RGBa,因此,如果设计允许,您应该声明一个“备用”颜色。此颜色很可能是**纯色**(完全不透明)。不声明备用颜色意味着在不支持它的浏览器中不会应用任何颜色。这种备用颜色在一些非常旧的浏览器中会失效。
div {
background: rgb(200, 54, 54); /* The Fallback */
background: rgba(200, 54, 54, 0.5);
}
但请注意 此错误,它与在 IE 6 和 7 中不使用简写有关。
RGBa 的浏览器支持
上次更新 05/14/2010
浏览器、版本、平台 | 结果 | 备用颜色 |
---|---|---|
Mozilla Firefox 3.x(及更高版本) | 有效 | — |
Mozilla Firefox 2.x(及更低版本) | 无效 | 纯色 |
Google Chrome(任何版本) | 有效 | — |
WebKit – Safari 3.x(及更高版本) | 有效 | — |
WebKit – Safari 2.x(及更低版本) | 无效 | — |
移动版 Safari(iPhone / iPod Touch / iPad) | 有效 | — |
Opera 10.x(及更高版本) | 有效 | — |
Opera 9.x(及更低版本) | 无效 | 纯色 |
Internet Explorer 9 预览版 | 有效 | — |
Internet Explorer 8(至 6) | 无效 | 纯色 |
Internet Explorer 5.5(及更低版本) | 无效 | 无颜色 |
Netscape(任何版本) | 无效 | 纯色 |
BlackBerry Storm 浏览器 | 有效 | — |
数据来自 此演示,其中包含更完整的浏览器兼容性列表。
针对 IE 的更好的备用颜色
由于 IE 支持 条件样式表,因此我们可以使用它们和专有的 Microsoft CSS 过滤器来实现相同的结果
<!--[if IE]>
<style type="text/css">
.color-block {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#50990000,endColorstr=#50990000);
zoom: 1;
}
</style>
<![endif]-->
更新:正如一些人指出的那样,alpha 值应该是字符串开头的两位数字,而不是结尾的两位数字,因此我已更新了上面的代码以使其正确。(例如,startColorstr=#50990000 而不是 startColorstr=#99000050)
另一个更新:我们已经过了可能不再需要使用过滤器渐变的时期。但尽管如此,显然前两位数字(上面为“50”)不是 50%。您必须使用“十六进制”。正如 Julio Loayza 写给我的那样
rgba(255, 255, 255, 0.5) 不等效于 (startColorstr=#50FFFFFF,endColorstr=#50FFFFFF)
rgba(255, 255, 255, 0.5) 等效于 (startColorstr=#7FFFFFFF,endColorstr=#7FFFFFFF)
00 为透明,FF 为不透明。以下是完整的映射
100% — FF
95% — F2
90% — E6
85% — D9
80% — CC
75% — BF
70% — B3
65% — A6
60% — 99
55% — 8C
50% — 80
45% — 73
40% — 66
35% — 59
30% — 4D
25% — 40
20% — 33
15% — 26
10% — 1A
5% — 0D
0% — 00
更多信息
- Tim Kadlec:并非看起来那么清晰:CSS3 不透明度和 RGBA
- Andy Clarke:CSS3 RGBa 是否已准备好震撼?
- Lea Verou:PHP 库,用于创建具有 Alpha 透明度的 PNG 文件,用作 RGBa 的备用方案。
其他示例



颜色变化
无需记住或查找大量不同的十六进制灰度值,您只需使用 RGBa 将纯黑色调整到适合的阴影,例如 rgba(0, 0, 0, 0.3);
也就是说,假设透明度对于任何应用程序来说都很酷(非常适合阴影,不适合文本)。当然也不必是黑色,您可以通过这种方式创建整个单色配色方案。
此外,如果您需要通过代码手动调整颜色,则 HSLa 比 RGBa 更易于使用。
很棒的文章 Chirs!
您真的很好地涵盖了它
关于 rgba 的精彩讨论…… 不常使用 rgb 颜色,但一旦它具有更好的跨浏览器兼容性,我相信它会被更多地使用。
我不知道 IE 的黑客功能…… 非常棒!
同意 Brenelz 的观点,是的,感谢您如此清晰地阐述了 Hedger 的 IE 黑客方法。
我希望浏览器开始使用它,因为它似乎是一种合理的方法,易于编程/学习。
仅供参考,Vista 上的 IE 8 RC1 也不支持它。:(
我们能不能直接抛弃 IE?我厌倦了花那么多时间去迁就它。
不错!以前从未了解过这一点。
IE 5.5 不支持它?可以理解。
IE 8?不可原谅。我将把它添加到我每次有人说他们使用 IE 时就会变得狂躁的无数理由列表中。
Camino 1.6.6 回退到纯色。
Camino 2.0b1 正常工作。
非常有用!
IE 不支持这一点令人惊讶,甚至 IE8 也不支持。
IE 不支持它?听起来像是新东西!;-) 很棒的黑客方法,继续努力。
IE 让我如此兴奋。
Opera 10 也将支持 RGBa,参考:http://dev.opera.com/articles/view/presto-2-2-and-opera-10-a-first-look/#opacity
这能否也使用 png 图片来完成?
你应该删除这里的撇号。
Opera 10 Alpha及更高版本完全支持RGBA和HSLA。
就在昨天,我读了一篇关于使用不透明度的文章,并且打算写一篇关于RGBa是一种更现代、更具前瞻性的方法的文章。
Chris的文章很棒,我个人不会使用IE修复,因为我相信使用CSS表达式会带来性能损失(如果网站的性能存在问题),但同意讨论这种方法可以使文章完整。
就我个人而言,我更倾向于IE使用纯色,但项目会议可能会决定其他方案;-)
上个月我设计的网站已经使用了这个功能。回退效果很好,因为本来就是一个黑暗的粗糙背景。如果你好奇的话,可以查看http://www.2x3campaign.com的页脚部分。
感谢分享。
各位设计师,请远离IE hack!我再也受不了它们了。
真的很棒……我以前总是使用1像素半透明png来达到同样的效果。唯一令人失望的是缺乏广泛的浏览器支持。
非常棒且内容丰富的文章,Chris。我之前不知道IE的回退方案,这是一个不错的技巧。
无论如何,在浏览器支持(指的是IE(此外,在我的祖国,Opera的市场份额比全球更大))赶上来之前,我不会使用RGBa。
感谢分享……:D
Biju Subhash
我很高兴看到更多**CSS3的优势**在实际应用中发挥作用,并**见证网页变得更好**……一如既往,感谢所有很棒的技巧和窍门。
嗯,我使用了那个回退方案
background:url(cyan_transparent_50.png);
background:rgba(0,255,255,.5);
不知道filter这个东西,我试试。
同意。png回退方案涵盖了IE *和*大多数其他不支持的浏览器;更少的代码,更少的工作量。此外,多年来大家都是这么做的,所以不那么令人困惑。
呃……回退方案的技巧只有在
/*回退方案*/CSS中的注释中有效,是吗?
不,这只是供你参考。
很棒的文章!我一开始对透明的事情不太感兴趣,因此对这篇文章也不太感兴趣,直到我看到了你在“24 ways”中提到的那个网站。
这是一个很棒的透明度应用,非常鼓舞人心……
在获得灵感并想要了解如何实现它以及让IE正常工作后,这篇文章绝对是金子般珍贵。
传奇!
每次都是如此,这次也要赞美Css Tricks,你的工作很棒。
布鲁塞尔问好。
很棒的文章。我偶尔会使用它,但从不处理IE回退,虽然我应该这样做。
现在我们可以让所有浏览器都正常工作了。感谢Chris!
IE去死吧
拜托
使用1x1像素的png并使用“belated”png修复脚本对IE进行修复,难道不更容易吗?
刚刚测试了一下,rgba在palm webos浏览器(palm pre/+ palm pixi/+)上也适用,这很合理,因为它基于webkit。
想在今天开始学习新东西,而这正是我得到的。
(chris我在twitter上关注你(*_*)
不错的快速教程,感谢Chris。
你的颜色代码为什么是#99000050?是打错了还是我在这里学到了两件事?
这是针对IE回退方案的。前六位是十六进制代码,最后两位是alpha值。
抱歉,错了!!
前两位字符是alpha值(AARRGGBB)
FF = 1.0不透明度,因此在示例中99 = 0.6不透明度
顺便说一句,此过滤器适用于从5.5开始的所有IE版本。
嘿,Chris,
你能验证一下Deos下面的评论吗?
白色的10%不透明度应该是#10FFFFFF还是#FFFFFF10?
谢谢!
IE 不支持这一点令人惊讶,甚至 IE8 也不支持。
非常感谢你的文章,Chris。实际上,看看一篇关于HSLa在现代浏览器中的支持的文章也会很有趣。此外,关于HSL的更通用的文章也很好——说实话,我还没有看到很多类似的文章。
感谢你的光临,Vitaly=)
我实际上对HSL了解不多。我在我的Photoshop CS5颜色选择器中看到了这些值,因此这些值很容易获取和使用。我只是不确定使用它的确切优势是什么?我想乍一看,它似乎是一种更简单的语法来创建颜色变化,而无需切换到颜色选择器(例如,需要更暗的绿色,只需降低饱和度值即可)。我必须把这记下来,作为需要进一步研究的内容。=)
你是设计Rick Wilcox的网站的吗?它看起来非常棒。
什么?IE不支持它??好吧,这真是闻所未闻!!(讽刺计爆表……)
很棒的技巧,Chris——我一定会尝试在我的下一个网站中使用它。谢谢!
新版浏览器的支持看起来不错。可能没有必要担心旧版本,因为用户正在升级他们的软件,并且供应商在其浏览器中实现了自动更新功能。并且Internet Explorer 9计划于2011年发布——http://en.wikipedia.org/wiki/Internet_Explorer#Internet_Explorer_9
Chris,这太棒了。完美地起作用了。谢谢!
hedgerwow.com网站似乎宕机了……:(
很棒的文章,正是我需要的。我一直都在与一个使用了大量透明度的网站作斗争,这可能完全能拯救我!
这是一个更深入地解释IE rgba透明度hack的文章。甚至还有一个方便的工具可以将rgba值转换为十六进制代码。不错。
http://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
你好,
我也不是IE的朋友,但在这种情况下,你应该考虑到CSS2是标准。RGBA作为CSS3不是标准!
所以它并不是IE中的错误。
顺便说一句:在某些情况下,在宣布IE死亡之前,值得再仔细看看。我在IE中遇到了不同的问题,而在Firefox中一切正常,尽管错误在我的源代码中,而Firefox只是没有那么“严格”。
最近我也遇到了一些Firefox的问题。
例如,jQuery的一些闪烁(在IE6-8和Safari中运行完美)
无论如何
感谢IE8中的解决方案——在我的案例中
filter: alpha(opacity=’80’);
就足够了。
但我仍然会牢记渐变解决方法。
谢谢!
Sithlord
IE回退方案仅适用于“background”属性,而不适用于“background-color”(在IE6和IE7中——IE8很好)。太遗憾了:(
有人找到使用sass/less/compass或其他任何方法来计算IE回退方案(filter gradient)的解决方案吗?
这是一种简单(javascript)的方法来计算IE过滤器无意义的前缀alpha。
parseInt((n/100) * 255, 10).toString(16).toUpperCase();
将结果输出到控制台。用百分比替换n,它将输出alpha前缀的十六进制值。
或者
用函数表示,类似这样…
http://codepen.io/fliptopbox/pen/eLsCh
ps:感谢Chris做了大量工作。:D
嗨,Chris。别怪我懒,有没有rgba白色值的快捷方式?
我实在受不了每次都写255,255,255,哈哈。
我知道,我知道,SASS,LESS。我很快就会用上的。
~ s
嗨,Scott,
为什么不直接用“白色”这个词呢?
color: white;
或者我更喜欢用十六进制代码
color: #FFFFFF;