zoukankan      html  css  js  c++  java
  • css背景色半透明的最佳实践

    之前项目中遇到纯色的半透明背景,都是这么干:

    <style>
    .box {300px;height:300px;position:relative;}
     .mask {300px;height:300px;position:absolute;z-index:1;background-color:#000;opacity:0.4;filter:alpha(opacity:40);}
    .content {300px;height:300px;position:absolute;z-index:2;}
    </style>
    
    
    <div class="box">
        <div class="content">这里是内容</div>
        <div class="mask"></div>
    </div>

    但是,最近项目中,遇到高度不是固定的,这种方法就不行了。我也想过用Png24图片实现半透明效果,但是要用到图片,而且还有狗日的ie6兼容问题,虽然也可以解决,但是麻烦。

    那有木有更好的方法呢??答案是肯定的,不然我写这篇文章干嘛。

    <style>
    .box {300px;height:300px;background:rgba(0,0,0,0.4);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#66000000',EndColorStr='#66000000');}
    </style>
    
    
    
    <div class="box">
        就不告诉你这里是内容。
    <div>

    我们得到的效果是这样的,IE9 的透明度竟然有 60%!! 这显然不是我们想法的。原因是:IE9 也支持 filter,使得 filter 的结果和 background-color 叠加,所以是 60%。

    解决方法必须有的:

    .box{filter:progid:DXImageTransform.Microsoft.gradient(enabled='true',startColorstr='#66000000', endColorstr='#66000000');background:rgba(0,0,0,0.4);}
    :root .box{filter:progid:DXImageTransform.Microsoft.gradient(enabled='true',startColorstr='#00000000', endColorstr='#00000000');}/*for IE9*/
    或者ie9的hack使用: 
    :root .box{filter:none;}/*for IE9*/

    简单解释一下:

    background:rgba(0,0,0,0.4);  
    css3的RGBA,依次是red,green,blue,alpha,最后一个alpha透明度。

    filter 渐变滤镜详细用法,[参见这里]
    StartColorStr 和 EndColorStr:
    #4c000000 是 30% 透明度的 #000000 的意思
    组成: # + 透明度 + 颜色
    算法: Math.floor(0.6 * 255).toString(16);

    filter 渐变滤镜的用法看不懂???没关系,我也不太懂,网上有工具,转换一下就可以了:

    [请使劲点击这里]



     背景透明,内容不透明CSS代码生成器

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>背景透明,内容不透明CSS代码生成器</title>
        <script>
        if(window.top!=window){
            window.top.location.href = window.location.href;
        }
        </script>
    </head>
    <body>
    <style type="text/css">
    #hananBackgroundColorOpacity{margin:10px;} 
    #hananBackgroundColorOpacity span{margin-left:10px; color:#8a8c8e;}
    #hananBackgroundColorOpacity textarea{650px; height:120px; padding:5px; color:#fff; background:#000;}
    #hananBackgroundColorOpacity strong{color:#000;}
    #hananBackgroundColorOpacity h3{color:#000; border-bottom:1px solid #ccc; line-height:57px;}
    #hananBackgroundColorOpacity h3 img{ float:right;}
    #hananBackgroundColorOpacity h3 .c{ clear:both; height:0px;margin:0;padding:0;}
    #hananBackgroundColorOpacity .hanan_introduction,#hananBackgroundColorOpacity .hanan_introduction a{  font-size:12px; color:#6E6E6E; }
    #hananBackgroundColorOpacity img{border:none;}
    </style>
    <div id="hananBackgroundColorOpacity">
        <p class="hanan_introduction ">
            说明:为页面元素添加背景透明,内容不透明的效果,兼容IE6/7/8/9/10、Chrome、Firefox、Safari、Opera。
        </p>
        <p>选择器:<input id="hananDomChooser" type="text" value="" /><span>id或者class等CSS选择器,比如:<strong>#abc</strong></span></p>
        <p>颜色值:<input id="hananColorValue" type="text" value="" /><span>16进制颜色值,不带#号,比如:<strong>#c77eb5</strong>,请填:<strong>c77eb5</strong></span></p>
        <p>透明度:<input id="hananOpacity" type="text" value="" /><span><strong>0</strong>到<strong>1</strong>之间,比如:<strong>0.5</strong></span></p>
        <p><input id="hananGetCssCodeButon" type="button" value="生成CSS代码" /></p>
        <p>
            CSS代码:<br/>
            <textarea id="hananCssCode" type="text"/></textarea>
        </p>
        <p class="hanan_introduction ">
            实现原理参考:<a href="http://www.cssha.com/through-the-ie-private-filter-let-ie6-ie7-ie8-support-transparent-background" target="_blank">http://www.cssha.com/through-the-ie-private-filter-let-ie6-ie7-ie8-support-transparent-background</a>
        </p>
    </div>
    <script type="text/javascript">
    // <![CDATA[
    function hananColorToRGB(col,opa){
        var c = col
        var R = parseInt(c.substring(0,2),16), G = parseInt(c.substring(2,4),16), B = parseInt(c.substring(4),16);
        return 'rgba(' + R + ',' + G + ',' + B + ','+ opa +')' ;
    }
    function smallToBig(col){
        var str = '';
        if(col.length==6){
            str = col;
        }else{
            var _r = col.substring(0,1), _g = col.substring(1,2), _b = col.substring(2);
            _r += _r;
            _g += _g;
            _b += _b;
            str = _r + _g + _b;
        }
        return str;
    }
    function hananGetCssCode(){
        var chooser = document.getElementById('hananDomChooser').value;
        var col = smallToBig(document.getElementById('hananColorValue').value);
        var opa = document.getElementById('hananOpacity').value;
        var rgb = hananColorToRGB(col,opa);
        var iecol = parseInt((opa*255)).toString(16) + col;
        if(chooser=='' || col=='' || opa==''){
            alert('选择器、颜色值、透明度都要填完哦亲!');
        }else{
            document.getElementById('hananCssCode').value = chooser +'{background:' + rgb + ';filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#' + iecol + ',endColorstr=#' + iecol + ');zoom:1;}'+
        '
    :root ' + chooser +'{filter:none\9;}/*for IE9*/';
        }
    }
    window.onload = function (){
        document.getElementById('hananGetCssCodeButon').onclick = function(){
            hananGetCssCode();
        }
    }
    // ]]>
    </script>
    </body>
    </html>
  • 相关阅读:
    VS2005中乱码问题
    android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
    android中的ellipsize设置(省略号的问题)
    手机web——自适应网页设计(html/css控制)
    Android横屏竖屏切换的问题
    android webview js alert对话框 不能弹出 解决办法
    WebView点击加载的页面中的按钮时不弹出新窗口以及在加载后执行javascript
    MVC学习笔记---MVC需要用的那些知识点
    CLR via C#学习笔记---类型
    C#学习笔记---协变和逆变
  • 原文地址:https://www.cnblogs.com/huanlei/p/3290583.html
Copyright © 2011-2022 走看看