最近做个项目,美工要用到png透明图标。在ie7,8都正常,ie6下png那个灰色背景显示出来了,不友好,网上
找了2种解决方案,一种是js消除,一种是滤镜处理。
但是各有优缺点,js消除后我自己写的按钮代码以及css变化控制的js代码无法执行,好像直接屏蔽了不认了;
css滤镜处理速度有点慢,要1秒以上才能显示,特别是做特效比如鼠标放上去按钮图片变换时,这个速度无法接受啊!有谁有更好的办法么?头大了,如果没好的办法,现在只能改美工设计了!在线等.................

解决方案 »

  1.   

    将png的图在做成 一个gif格式的图。。然后判断下如果是ie6就显示gif格式的。。就、应该就可以了
      

  2.   

    gif不行啊,如果可以了就不用这么麻烦了,因为gif做成透明图片会失真,而且比较严重,所以没法用。
      

  3.   

    我以前用过,是利用的JSDD_belatedPNG.js
    加入项目,然后引用 的,不知道LZ有没有试过
      

  4.   

    我贴个代码,网上找的,图片是处理了,我的js代码没反应了
    function correctPNG()
       {
       for(var i=0; i<document.images.length; i++)
          {
         var img = document.images[i]
         var imgName = img.src.toUpperCase()
         if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
            {
           var imgID = (img.id) ? "id='" + img.id + "' " : ""
           var imgClass = (img.className) ? "class='" + img.className + "' " : ""
           var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
           var imgStyle = "display:inline-block;" + img.style.cssText
           if (img.align == "left") imgStyle = "float:left;" + imgStyle
           if (img.align == "right") imgStyle = "float:right;" + imgStyle
           if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle     
           var strNewHTML = "<span " + imgID + imgClass + imgTitle
           + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
            + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
           + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
           img.outerHTML = strNewHTML
           i = i-1
            }
          }
       }
    function alphaBackgrounds(){
       var rslt = navigator.appVersion.match(/MSIE (d+.d+)/, '');
       var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
       for (i=0; i<document.all.length; i++){
          var bg = document.all[i].currentStyle.backgroundImage;
          if (bg){
             if (bg.match(/.png/i) != null){
                var mypng = bg.substring(5,bg.length-2);
                document.all[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+mypng+"', sizingMethod='crop')";
                document.all[i].style.backgroundImage = "url('')";
             }                                               
          }
       }
    }if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer") {
    window.attachEvent("onload", correctPNG);
    window.attachEvent("onload", alphaBackgrounds);
    }
      

  5.   

    ie版本导致的这种问题,最麻烦了建议你优化你的js代码吧,或者使用成熟的js框架,比如jquery,它里面就有解决png的方法.
      

  6.   

    3楼的试验了一下,png是处理了,但是onmouseover等事件的js代码不执行啊,图标不能动态变换,和我刚开始一个样,我写的代码没用了,很奇怪,不知道为啥。
    5楼的没用过呢,能否发个连接看看,学习学习,谢谢!
      

  7.   

    <!–[if IE 6]>
    <script type=”text/javascript” src=”下载下来的JS路径”></script>
    <script>
    DD_belatedPNG.fix(‘CSS选择器, 应用类型’);
    </script>
    <![endif]–>
    这样来用,放在其他的javascript后面
      

  8.   

    试了上面的调用方法,onmouseover="this.src=''"还是没执行,图标不变换,我的意思是当鼠标放上去,图标变换另外一个,这个变换的也要处理了,因为都是png。
      

  9.   

    我直接这样调用的DD_belatedPNG.fix('*'); 
    上面的css选择器具体是指的啥?
      

  10.   

    我直接这样调用的DD_belatedPNG.fix('*'); 
    上面的css选择器具体是指的啥?
      

  11.   


    最好不要用*,就用你css样式中引用的class
    如果用*的话就是过滤所有的css然后,你的鼠标事件可以写在方法里onmouseover="changePng()"这样写试试
      

  12.   

    要兼容IE6最好不要用PNG格式,转GIF吧
    毕竟IE6本身的确不支持PNG,只能通过js滤镜来获取效果,但是这样还是会造成其他的js问题
      

  13.   

    哎!找了个折中的方法解决了,默认png,调用css过滤器处理png,这样加载速度是慢了点,但是不明显;鼠标放上去采用gif图片,不过滤处理,变换也快了,麻烦的是每个连接都要对应2个css类来控制,做好后效果不错!非常感谢各位的关心,再次谢谢大家!散分。
      

  14.   

    我最近也是用onmouseover事件做:当鼠标放上去,图标变换另外一个效果,有没有完美的办法处理png透明度,谢谢!
      

  15.   

    @zgqasd  还望高手指点,能否发一个css过滤处理png,我在网上找了好几个,但是background:none;一下子就把我的图片给隐藏了,求解