opacity兼容性以及存在问题处理

           opacity兼容性以及存在问题处理  

  opacity兼容性

    opacity属性是CSS3的属性,用于设置元素的不透明级别。语法: opacity: value | inherit; ①值value表示规定不透明度,从0.0(完全透明)到1.0(完全不透明)。 ②值inherit表示应该从父元素继承opacity属性的值。

    注意: IE以及更早的版本支持替代的filter属性:例如 filter: Alpha(opacity = 50)。

    在铺"酷狗音乐"官网时,每个歌单和榜单的区域,当鼠标浮在区域上时,需要有灰色的遮罩层效果。

    鼠标没有浮在区域时:       鼠标浮在区域时: 

    鼠标浮在区域时,产生这遮罩层效果,并且有一个播放的图标。我当时使用的遮罩层代码:

1 .mask {
2     background-color: rgb(0, 0, 0);
3     opacity: 0.4;
4     filter: alpha(opacity = 30);
5     *zoom: 1;
6 }

    亲测是可以兼容IE7-9的。但毕竟没有真正在上线的网站中使用过。所有我特意留意了这个问题。在后面有遇到类似的效果,就查看别人的代码是如何写的。下面是我从不同网站获取的关于透明度问题的兼容性代码:

/* 凡客网中遮罩层效果 */
.mask {
    background: #000;
    filter: alpha(opacity = 40);
    opacity: 0.4;
    -moz-opacity: 0.4;
}
/* 熊猫TV中遮罩层效果 */
.mask {
    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
    filter: alpha(opacity = 40);
    opacity: .4;
}

    以上代码亲测都只是兼容IE7-9的。目前我还没有遇到可以兼容IE6的,有大神可以做到的,给我指点一二。

  存在问题

    其实说起来,这个应该不算问题,是这个属性本身的特点吧。但是在项目中如果遇到问题不知道怎么回事的话,就会感觉莫名其妙的。所以就顺便提提这个问题。

    我举的例子W3CSchool的CSS图像透明度中的实例3-透明框中的文本。

    我直接将实例3的代码复制黏贴,为了突出我要说明的内容,我将opacity = 60 改为 opacity = 20,将 filter: 60; 改为 filter: 20; 在网站打开是这样的:

                                                   然后这三句注释掉:

/*background-color: #ffffff;*/
 /* for IE */
 /*filter:alpha(opacity=0.2);*/
 /* CSS3 standard */
 /*opacity:0.2*/

    添加这句: background-color: rgba(255, 255, 255, 0.2);  效果图:

                                        

    仔细看,我们发现后第二张图的文字是清晰的,而第一张图的文字也是模糊的,透明度很低。这个就是opacity属性的问题。因为CSS3中的opacity透明度属性具有继承性,opacity会把所有的元素都变透明,不仅仅是背景颜色,当某个对象设置了opacity透明度时,其子元素也会有透明度效果。 特别注意下:如果父元素定义了opacity,那么子元素在定义一个opacity,那么子元素的效果其实是两者的乘积…例如,父元素的opacity:0.5,子元素opacity:0.2,那么子元素实际的opacity=0.5x0.2=0.1这个大家可以自己尝试下就知道了。

    那么如何在项目中只需要背景是透明的,而不需要文字是透明的,那么要怎么做呢?

    方法一:  使用上面提到的rgba()方法,可以很直接的设置对象的透明度效果,不存在子元素也变透明的问题。但是IE7,8不支持此属性。

    方法二: 将透明层独立出来,父元素relative,子元素absolute,靠层叠样式分层。

 1 //  .background 只需加上 positon: relative;
 2 // .transbox的改动如下
 3 div.transbox {
 4     width: 338px;
 5     height: 204px;
 6     background-color: #fff;
 7     border: 1px solid black;
 8     filter: alpha(opacity = 20);
 9     opacity: 0.2;
10     position: absolute;
11     left: 50%;
12     top: 50%;
13     margin-left: -169px;
14     margin-top: -102px
15 }
16 // p元素变化如下
17 div.background > p {
18     position: absolute;
19     margin: 30px 40px;
20 }

    效果如图: 

                  

    这种方式其实还是蛮重要的,后面我做的项目只要涉及到有遮罩层这类效果的,做法都是这么做的。我个人感觉这样做是挺好的,而且我看了各种网站关于遮罩层这效果的样式大概也都是这么写的。

原文地址:https://www.cnblogs.com/cleaverlove/p/6309013.html