zoukankan      html  css  js  c++  java
  • 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 }

        效果如图: 

                      

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

  • 相关阅读:
    solaris如何启动ssh服务
    网页实现插入图片—css与html的区别
    Python与RPC -- (转)
    Python中的异常处理 -- (转)
    Python的异常处理机制 -- (转)
    HTML 学习
    链表练习 链表反转 链表插入..
    php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
    PHP队列的实现 算法
    利用redis List队列简单实现秒杀 PHP代码实现
  • 原文地址:https://www.cnblogs.com/cleaverlove/p/6309013.html
Copyright © 2011-2022 走看看