CSS3中使⽤RGBa来调节透明度的教程癣是什么引起的
在 CSS3 中,增加了⼀个 opacity 属性,允许开发者设置元素的透明度,现在 opacity 已被主流的现代浏览器⽀持,但 opacity 会把被设置的元素及其⼦元素同时设置为同⼀个透明度,这样的透明规则相当不灵活,在实际开发中往往也是会遇到很多⿇烦。其实,在 CSS3 中还有另外⼀套颜⾊透明解决⽅案 —— RGBa 。相对于 opacity ,RGBa 可以在单个元素上设置透明度,⽽不影响其⼦元素,只是 RGBa 的浏览器⽀持度并没有 opacity 的⼴泛,因此相对较少引起开发者注意。
RGBA(R,G,B,A)
取值:
R:红⾊值。正整数 | 百分数
G:绿⾊值。正整数 | 百分数
B:蓝⾊值。正整数 | 百分数
A:Alpha透明度。取值0~1之间。
下⾯是⽤rgba() 设置50%透明度的⽩⾊.
CSS Code复制内容到剪贴板
1. p {
2. color: rgba(255, 255, 255, 0.5);
3. }
RGBA是RGB⾊彩模型的⼀个扩展。这个缩写词代表红绿蓝三原⾊的⾸字母,Alpha值代表颜⾊的透明度/不透明度。
下⾯开始详细介绍 RGBa 颜⾊。
⼀. RGBa 颜⾊基础
RGBa 在本质上看也是为设置的元素增加了⼀个 alpha 通道,即在红⾊、绿⾊、蓝⾊三种颜⾊通道之外增加⼀个代表透明度的通道,其中 RGB 值使⽤我们熟悉的⽤3个 0 到 255 的整数分别表⽰红⾊、绿⾊、蓝⾊,⽽ alpha 取值则为 0 到 1 (⼩数位⼀位)。下⾯例举⼀个例⼦说明其具体的使⽤⽅式:
在 CSS 2.1 中,⽀持使⽤ RGB ⾊彩声明(尽管开发者可能更加习惯使⽤如:#343434 的 16 进制表⽰⽅式),例如要为 id
为 example 的 div 元素设置背景⾊ #343434 ,可以这样写
CSS Code复制内容到剪贴板
1. /* RGB 表⽰⽅式 */
2. #example {background: rgb(52, 52, 52); }
接下来再使⽤ RGBa ,把例⼦中的背景颜⾊修改成带 0.5 透明度。源源不断的意思
CSS Code复制内容到剪贴板
1. /* 设置 0.5 透明度 */
2. #example-a {background: rgba(52, 52, 52, 0.5); }
3. /* 也可以省略⼩数点前的 0 */
4. #example-a {background: rgba(52, 52, 52, .5); }
增加透明度前后效果如下(为了更明显的反映透明度带来的效果,例⼦中的 body 增加了背景纹理):
可以看出,RGBa 只是在原有的 RGB 的基础上增加⼀个参数,这个改动虽⼩,却为开发者提供了很⼤的⽅便。
另外,RGBa 除了可以⽤在 background 属性外,还可以⽤在 color 和 border 属性(注:border 属性使⽤ RGBa 在 Firefox 中会与在其他浏览器中的效果略有不同)。
⼆. 浏览器⽀持与渐进增强
尽管 RGBa 已经在主流现代浏览器中获得了良好的⽀持,其中 Webkit 对 RGBa 的⽀持是最早的,Chrome ⾄少在 0.415 版本便开始⽀持 RGBa ,在这个⽅⾯ Chrome 可以说是⾮常给⼒的,另外 Gecko 和 Presto 内核也逐步实现了对 RGBa 的⽀
鱼缸增氧
持,IE 浏览器则从 IE9 开始才⽀持 RGBa 。更具体的浏览器⽀持情况如下:
Chrome 0.4.154.33+ , Firefox 3.0+ , Safari 3.2.1+ , Opera 10.10+ , IE9+
更加详细的浏览器⽀持情况请参考这⾥。
对于不⽀持 RGBa 的浏览器,这⾥可以采⽤渐进增强的⽅案解决,Kayo 推荐的是指定⼀个保留⾊的解决⽅案。⾸先,开发者必须知道,不⽀持 RGBa 的浏览器会把使⽤了 RGBa 的 CSS 属性值视为语
法错误,因此不理会该 CSS 属性设置。因此,开发者可以在设置 RGBa 颜⾊之前⾸先设置⼀个不使⽤透明度的属性,避免当浏览器不⽀持 RGBa 时出现完全没有颜⾊的情况。下⾯对上例进⾏扩展说明:
#example1 {background: rgb(52, 52, 52); background: rgba(52, 52, 52, .5); }
不⽀持 RGBa 的浏览器会忽略第⼆个 background 属性设置,按照第⼀个属性值设置元素的背景⾊,这样虽然不能使浏览器之间的效果相同,但已经达到相似的效果了,并且体现了⼀种不错的渐进增强解决⽅案。
当然,对于 IE ,可以使⽤滤镜达到与⽀持 RGBa 浏览器中相同的效果,例如:针对以上例⼦,你可以如下地编写代码
CSS Code复制内容到剪贴板
1. <style type="text/css">
2. #example-a {background: rgba(52, 52, 52, .5); }
3. </style>
4. <!--[if IE]>
5. <style type="text/css">美国留学
6. #example-a {
7. background: transparent;
8. filter: progid:adient(startColorstr='#34343432', endColorstr='#34343432');
9. zoom: 1;
10. }
11. </style>
12. <![endif]-->
这⾥需要注意,滤镜中使⽤的是上例中相同的颜⾊和透明度,只是使⽤ 16 进制表⽰。
IE 会忽略 RGBa 颜⾊设置,并且根据 filter 滤镜设置颜⾊,这样的效果与 RGBa 的效果相同。
三. 不影响⼦元素
落花满地在⽂章的开头已经介绍过,RGBa 相对 opacity 的优势是不会影响其⼦元素,即可以单独为被设置的元素设置透明度,⽽⼦元素⽽不受该设置影响。下⾯再例举⼀个具体的例⼦,分别以 RGBa 和 opacity 为元素设置透明度说明两者的区别。
十大名校
完整代码:
CSS Code复制内容到剪贴板
1. <!DOCTYPE HTML>
2. <html lang="zh-CN">
3. <head>
4. <meta chart="UTF-8">
5. <title>RGBa 与 opacity 效果的区别</title>
6. <style type="text/css">
7. body {padding-top: 200px; background: url(bg.png); }
8. #example, #example-a {width: 200px; height: 100px; margin: 0 auto; }
9. #example {background: rgb(52, 52, 52); opacity: 0.5; }
10. #example-a {margin-top: 20px; background: rgba(52, 52, 52, .5); }
11. .inside {display: block; width: 50px; height: 50px; margin-left: 10px; background: rgb(100, 140, 180); }
12. </style>
13. </head>
14. <body>
15. <div id="example">
16.
17. <span class="inside"></span>
18.
19. </div>
20.
21. <div id="example-a">
22.
23. <span class="inside"></span>
24.
25. </div>
26. </body>
27. </html>
具体效果
古之学者必有师
可以看出,opacity 会使其中的⼦元素 span 同时变为半透明的效果,⽽ RGBa 则只改变被设置的元素的透明度,⽽在⼤多数情况下,开发者只需要设置当前元素的透明度(如遮罩,半透明背景等),因此使⽤ RGBa 会更加的灵活。
一年级课外阅读
另外,在 IE9 中,直接使⽤ RGBa 颜⾊与使⽤ opacity 设置透明的效果会有差异(读者可以在 IE9 下浏览 Demo 查看具体的效果),开发者需要注意这⼀点差异。