CSS3 之 RGBa 可透明颜色

在 CSS3 中,增加了一个 opacity 属性,允许开发者设置元素的透明度,现在 opacity 已被主流的现代浏览器支持,但 opacity 会把被设置的元素及其子元素同时设置为同一个透明度,这样的透明规则相当不灵活,在实际开发中往往也是会遇到很多麻烦。其实,在 CSS3 中还有另外一套颜色透明解决方案 —— RGBa 。相对于 opacity ,RGBa 可以在单个元素上设置透明度,而不影响其子元素,只是 RGBa 的浏览器支持度并没有 opacity 的广泛,因此相对较少引起开发者注意。下面开始详细介绍 RGBa 颜色。

一. RGBa 颜色基础

RGBa 在本质上看也是为设置的元素增加了一个 alpha 通道,即在红色、绿色、蓝色三种颜色通道之外增加一个代表透明度的通道,其中 RGB 值使用我们熟悉的用3个 0 到 255 的整数分别表示红色、绿色、蓝色,而 alpha 取值则为 0 到 1 (小数位一位)。下面例举一个例子说明其具体的使用方式:

在 CSS 2.1 中,支持使用 RGB 色彩声明(尽管开发者可能更加习惯使用如:#343434 的 16 进制表示方式),例如要为 id 为 example 的 div 元素设置背景色 #343434 ,可以这样写


1

2

/* RGB 表示方式 */

#example {background: rgb(52, 52, 52); }

接下来再使用 RGBa ,把例子中的背景颜色修改成带 0.5 透明度。


1

2

3

4

/* 设置 0.5 透明度 */

#example-a {background: rgba(52, 52, 52, 0.5); }

/* 也可以省略小数点前的 0 */

#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 时出现完全没有颜色的情况。下面对上例进行扩展说明:


1

#example1 {background: rgb(52, 52, 52); background: rgba(52, 52, 52, .5); }

不支持 RGBa 的浏览器会忽略第二个 background 属性设置,按照第一个属性值设置元素的背景色,这样虽然不能使浏览器之间的效果相同,但已经达到相似的效果了,并且体现了一种不错的渐进增强解决方案。

当然,对于 IE ,可以使用滤镜达到与支持 RGBa 浏览器中相同的效果,例如:针对以上例子,你可以如下地编写代码


1

2

3

4

5

6

7

8

9

10

11

12

<style type="text/css">

    #example-a {background: rgba(52, 52, 52, .5); }

</style>

<!--[if IE]>

    <style type="text/css">

        #example-a {

            background: transparent;

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

            zoom: 1;

        }

    </style>

<![endif]-->

这里需要注意,滤镜中使用的是上例中相同的颜色和透明度,只是使用 16 进制表示。

IE 会忽略 RGBa 颜色设置,并且根据 filter 滤镜设置颜色,这样的效果与 RGBa 的效果相同。

三. 不影响子元素

在文章的开头已经介绍过,RGBa 相对 opacity 的优势是不会影响其子元素,即可以单独为被设置的元素设置透明度,而子元素而不受该设置影响。下面再例举一个具体的例子,分别以 RGBa 和 opacity 为元素设置透明度说明两者的区别。

完整代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<!DOCTYPE HTML>

<html lang="zh-CN">

<head>

    <meta charset="UTF-8">

    <title>RGBa 与 opacity 效果的区别</title>

    <style type="text/css">

        body {padding-top: 200px; background: url(bg.png); }

        #example, #example-a {width: 200px; height: 100px; margin: 0 auto; }

        #example {background: rgb(52, 52, 52); opacity: 0.5; }

        #example-a {margin-top: 20px; background: rgba(52, 52, 52, .5); }

        .inside {display: block; width: 50px; height: 50px; margin-left: 10px; background: rgb(100, 140, 180); }

    </style>

</head>

<body>

    <div id="example">

        <span class="inside"></span>

    </div>

    <div id="example-a">

        <span class="inside"></span>

    </div>

</body>

</html>

具体效果

也可以浏览完整 Demo 。

可以看出,opacity 会使其中的子元素 span 同时变为半透明的效果,而 RGBa 则只改变被设置的元素的透明度,而在大多数情况下,开发者只需要设置当前元素的透明度(如遮罩,半透明背景等),因此使用 RGBa 会更加的灵活。

另外,在 IE9 中,直接使用 RGBa 颜色与使用 opacity 设置透明的效果会有差异(读者可以在 IE9 下浏览 Demo 查看具体的效果),开发者需要注意这一点差异。

本文由 Kayo Lee 发表,本文链接:http://kayosite.com/css3-rgba-color.html

时间: 2024-10-08 20:04:26

CSS3 之 RGBa 可透明颜色的相关文章

使用CSS3滤镜让图片反转颜色

CSS提供的滤镜也是一大亮点,我一直痴迷其中,有些滤镜的效果很有用,可是有些的滤镜效果可能只是为了玩玩儿,CSS常见的滤镜有这些:grayscale, blur, sepia,所有常见的过滤器.但是如何使用和转化图片呢?今天我们主要是来讲讲如何使用CSS3滤镜让图片反转颜色. CSS代码 invert滤镜就是为了设置元素的反色效果,他的值设置范围为:0-100%,100%为完全反色,0为显示正常的颜色. .normal {     filter: invert(0%); } .inverted

CAD填充颜色透明颜色设置

CAD的填充色透明颜色是255,255,255 填充工具中点删除边界是删除边框了 需要选择对象 点删除边框需要替换成别的填充 不能直接删除,直接删除点删除键就可以了 在多个图层组合的情况下,我们想底色透明,需要选择255255,255 CAD透明色 255,255,255 如填充框中 改成白色打印出来是黑色 在填充框亮度中找三个255 图上看是白色打印出来是黑色 确定后就是白色的了,打印出来是没色,框中如果我们需要需要添加图案填充,或者打文字的话,如何打印出来不显示,就是图层叠放的事,需要改图层

用Less定义常用的CSS3效果函数及常用颜色搭配(让CSS写起来更有趣)

定义圆角及调用 /* 定义圆角 @radius 圆角大小 */ .round(@radius:5px){ border-radius:@radius; -webkit-border-radius: @radius; -moz-border-radius: @radius; } .round7{ .round(7px); } 定义盒子阴影及调用 /* 盒子阴影 @right_left 右边阴影为正数 左边负数 @bottom_top 下边阴影为正数 上边负数 @box 阴影大小 @box_colo

IE 下的rgba背景透明

rgba+filter实现兼容性的半透明背景效果background:rgba(0,0,0,0.5); filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7F000000,endcolorstr=#7F000000); startColorStr:可选项.字符串(String).设置或检索色彩渐变的开始颜色和透明度. 其格式为 #AARRGGBB . AA . RR . GG . BB 为十六进制正整数.取值范围为

用CSS3实现带有阴影效果和颜色渐变的按钮

这里讲下如何利用css3里的两个新属性 box-shadow和transition来实现如下所示的带有阴影和颜色渐变效果的按钮(下面这个只是图片:本想直接在这个页面下嵌html的,,试了后发现有些css样式貌似不给用就只能放图片了...=_=): 首先是box-shados语法,用于向框添加一个或多个阴影: box-shadow: h-shadow v-shadow blur spread color inset; 值 描述 h-shadow 必须.水平阴影的位置 v-shadow 必须.垂直阴

css3自定义滚动条背景透明

.editor{ overflow:hidden; height:640px; padding:0 45px; border: 0 none; outline: none; } .editor::-webkit-scrollbar{ //设置整个滚动条宽高 width:6px; height:100%; } .editor::-webkit-scrollbar-thumb{ //设置滑块 width:4px; height:60px; background-color:#ccc; border-

安卓透明颜色设置说明

首先举例说明:定义透明黑色 80%透明. 透明度设置是从0到255 ,百分之80显然大约设置在204的位置,在以下找到204相应的16进制数据是d6,所以 所以该颜色设置为 #d6000000 以下10进制于16进制相应表 0===0 1===1 2===2 3===3 4===4 5===5 6===6 7===7 8===8 9===9 10===a 11===b 12===c 13===d 14===e 15===f 16===10 17===11 18===12 19===13 20==

css3基础 rgba 背景半透明 简单示例

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜.              ide:visual studio 2017             browser:Chrome                     os:win7 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu

Css3颜色值RGBA得表示方式

RGBA(R,G,B,A) 取值 R:红色值.正整数 | 百分数 G:绿色值.正整数 | 百分数 B:蓝色值.正整数 | 百分数 A:Alpha透明度.取值0~1之间. 说明: RGBA记法. 此色彩模式与RGB相同,只是在RGB模式上新增了Alpha透明度. ie6-8版本不支持.其他版本支持.其他浏览器支持