CSS实现半透明效果实现及兼容性

来源:互联网 发布:ocr 软件 编辑:程序博客网 时间:2024/05/17 01:10


网页半透明效果经常在一些很酷网站中用到,虽然说现在还没有被纳入W3C标准中,但对于CSSer们还是很热捧的。从网上收集并整理了一下以后备用。

1. 旧的Opacity设置
以下代码是Firefox和Safari旧版本所需的透明度设置:

复制内容到剪贴板
代码:
#ceng { -khtml-opacity:0.5;-moz-opacity: 0.5; }
-khtml-opacity设置是针对旧版本的Webkit渲染引擎,这种专用属性现在已经过时了,除非你还有需要兼容Safari 1.x.的用户。
-moz-opacity是为了兼容Mozilla渲染引擎的早期版本,以及追溯到Netscape Navigator。Firefox 0.9以后就不要求使用-moz-opacity属性,Firefox 3.5(现在使用Gecko引擎)已经不在支持这个属性。

2. 在Firefox, Safari, Chrome和Opera下的CSS透明度
以下代码是除了IE外的所有当前浏览器的最简单,最最新的不透明度设置的CSS语法:
复制内容到剪贴板
代码:
#ceng { opacity: 0.7; }
上述语法将设置一个元素为70%不透明(或30%透明)。
设置opacity:1将使元素不透明,而设置opacity:0将使得元素完全不可见。你只要记住“opacity”等同于“不透明”就很容易记住了,opacity值越小就越接近透明。
opacity属性可以精确地小数点后两位,所以值取“0.01”和“0.02”实际上是不同的,虽然可见度很难被发觉。一般情况下,精确到一位就可以了,取值如“0.3”或“0.7”。

3. IE下的CSS透明度
IE下照旧有别于其他浏览器,并且目前也有三个不同版本的IE在广泛使用,透明度设置是不同的,有时需要额外的CSS来控制:
复制内容到剪贴板
代码:
#ceng { filter: alpha(opacity=40); }
上面的CSS使用专用的filter属性来设置IE6-8透明度。对于IE6和IE7需要注意:为了使得透明设置生效,元素必须是“有布局”。一个元素可以通过使用一些CSS属性来使其被布局,有如width 和 position。

另外一个设置IE8的CSS透明度的方法语法如下(注意注释中指出的版本):
复制内容到剪贴板
代码:
#ceng { 
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40);
/* 第一行在IE6, IE7和IE8下有效 */ 
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=40)"; 
/*第二行仅在IE8下有效 */
}
第一行代码针对当前所有IE版本,第二行仅针对IE8。
注意两行代码的不同之处:在第二行代码中,在filter属性前跟着-ms-前缀,并且属性值有加引号,这些都是语法所必须的。

因此,为了实现半透明的兼容性,我们可以综上所述,这么来定义CSS,基本上可以兼容大部分浏览器了:查看demo演示>>http://www.uedcss.com/upload/webcss/css-opacity.html
复制内容到剪贴板
代码:
#ceng{
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
4. 使用JavaScript设置和改变CSS透明度 
可以使用下面的语法访问JavaScript中的CSS opacity 属性:
复制内容到剪贴板
代码:
document.getElementById("ceng").style.opacity = ".4";  // 针对所有现代浏览器  
document.getElementById("ceng").style.filter = "alpha(opacity=40)";// 针对IE 
 
上面的代码可以使用行内循环或者其他动态函数递增修改透明度的值。当然,你必须先通过特征检测来决定使用哪一行代码。

5. 使用JQuery设置和改变CSS透明度 
直接使用jQuery设置CSS透明度更直观更容易实现,因为在所有浏览器代码都一样,并且你不必担心在IE下元素是否“haslayout”:
复制内容到剪贴板
代码:
$("#ceng").css({ opacity: 0.4 }); // 所有浏览器有效
您也可以使用一下jQuery代码使一个元素动画透明:
复制内容到剪贴板
代码:
$("#ceng").animate({ opacity: 0.4 }, 1000, function() { // 动画完成,所有浏览器下有效  });
不管元素的透明度在动画开始时是多少,它都会渐变到透明度为“0.4”。动画的速度通过值“1000”设定,动画时间以毫秒为单位。代码中的最后一个属性是一个可选回调函数,将在动画完成后执行。

如果该元素的透明度在CSS中已经设定为“0.4”,那在动画运行的时候,你将不会发觉有任何不同,所以动画开始和最终透明度要有所不同。

6. 通过 RGBA的透明度
另一个CSS3技术只支持部分新的浏览器(Firefox 3+, Opera 10.1+, Chrome 2+,Safari 3.1+),可通过RGBA的alpha通道的方式设定。语法如下:
复制内容到剪贴板
代码:
#rgba { background: rgba(98, 135, 167, 0.4); }
在上面的定义中,通过RGB(前三个数字)给背景设定颜色,然后最后一个是alpha设置,以执行给定颜色的透明度。这个alpha设置跟opacity 属性一样,可设定任何0到1的数字,精确得到两位小数点。数字值越大,就越接近完全不透明的颜色。

7. 通过 HSLA的透明度
类似之前的定义,CSS3还允许使用HSLA单独设置颜色和alpha值,HSLA表示Hue(色调), Saturation(饱和度), Lightness(亮度), 和Alpha。以下是HSLA透明的例子:
复制内容到剪贴板
代码:
#hsla { background: hsla(207, 38%, 47%, 0.4);  }
更多关于HSLA颜色的解释,参考这篇来自W3.org的文章。如同RGBA透明度,最后的数字表示透明度设置,跟RGBA起同样的作用。注意RGBA和HSLA透明度的一个重要的好处是这些透明度设置不会影响到子元素的,但通过opacity属性的方式则会。alpha设置的RGBA和HSLA只影响背景颜色的透明度,仅此而已。