快速业务通道

CSS教程:关于网页中的透明元素

作者 佚名技术 来源 CSS技术 浏览 发布时间 2012-03-02
置了{writing-mode:tb-rl}的元素的hasLayouttrue
  • 元素的contentEditable的属性值为true
  • 在IE8标准模式下设置了{display:block}的元素的hasLayout一直为true,如demo8。
  • 关于hasLayout的更多详情可以看Exploring Internet Explorer “HasLayout” Overview和On having layout

    从上面就可以看出IE实现HTML元素的透明如此混乱,为了向下兼容和自己的私有属性让IE上实现元素透明有多种方式,比如CSS Opacity实例中的demo1到demo8,虽然IE团队推荐实现透明的方式是:

    {
      -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
      opacity: .5;
    }

    而目前简单最好用的实现方式是如CSS Opacity中demo4这样:

    {
        filter:alpha(opacity=30);
        opacity:.3;
    }

    实际上目前最流行的JavaScript框架的设置样式方法都是应用这种方式,并且针对IE设置了{zoom:1}来让元素的hasLayouttrue,但在IE8的标准模式下zoom并不能触发hasLayout,所以利用它们设置hasLayoutfalse的元素的透明度时在IE8的标准模式下是失败的,这个bug在YUI、Prototype、jQuery和Mootools的最新版本中都存在,具体请在IE8标准模式下看demo9到demo11。同样由于在IE8中设置透明度的方式多种多样,所以利用JavaScript获取HTML元素的透明度值需要考虑多种情况,YUI完美解决了这个问题,Prototype比jQuery稍微周全一点,而Mootools直接是bug,具体可以在IE下看demo1到demo8的演示。从这个角度给4个框架来个排名的话,YUI第一、Prototype第二、jQuery第三、Mootools垫底。

    我简单的实现了设置和获取Opacity的函数,可以避开上面框架存在的bug,请在IE8标准模式下看demo12:

    //设置CSS opacity 属性的函数,解决IE8的问题
    var setOpacity = function(el,i){
      if(window.getComputedStyle){// for non-IE
        el.style.opacity = i;
      }else if(document.documentElement.currentStyle){ // for IE
        if(!el.currentStyle.hasLayout){
          el.style.zoom = 1;
        }
        if(!el.currentStyle.hasLayout){ //在IE8中zoom不生效,所以再次设置inline-block
          el.style.display = ''inline-block'';
        }
        el.style.filter = ''alpha(opacity=''+ i * 100 +'')'';
      }
    }
    
    //获取CSS opacity 属性值的函数
    //借鉴自http://developer.yahoel.com/yui/docs/YAHOO.util.Dom.html#method_getStyle
    

    凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

    分享到: 更多

    Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

    地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

    电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

    《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号