IE6 png背景图片显示不正常处理

http://xiaoboss.iteye.com/blog/1167829

现在web设计,画面是越来越炫

但是使用了透明的背景图,在IE6下,

在ie78 ff等浏览器显示正常。

 解决办法:

Html代码  收藏代码
  1. body{ background-color:#CCC;}  
  2. 一般普通写法如下:  
  3. div.bg1{ background:url(logo.png) no-repeat center;width:100px; height:100px;}  
  4. 特殊处理写法如下:  
  5. /** Only Used For IE */  
  6. *.bg2{filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src="logo.png"); width:100px; height:100px;}  
  7. /** Only Used For FF,Sa*/  
  8. html > body .bg2{ background:url(logo.png) no-repeat center;width:100px; height:100px;}  

  

一下是html调用css写法:

Html代码  收藏代码
  1. <body>  
  2.     <div class="bg1">test content</div>  
  3.     <hr/>  
  4.     <div class="bg2">test content</div>  
  5. </body>  

 

一下为ie7对比显示,上面为一般写法,可以发现ie6处理的不好。

下面为特殊写法,可见比较完美。

分析:

 ie系列浏览器可以通过filter 属性来设置背景图,而filter属性在除ie系列浏览器就不生效。

所以这里想到hack处理办法。

 

IE系列自己特殊的css写法可以通过*,*.bg2 这种css样式只能在ie系列浏览器生效

同样使用html > body .bg2,只有IE系列不生效的写法。

这样可以看出效果在ie ff等下都显示正常

 

 

 案例1:定义一个样式,给某个div应用这个样式后,div的透明png背景图片自动透明了。(注意两处图片的路径写法不一样,本例中,icon_home.png图片与html文件在相同目录)

 

Html代码  收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title>无标题文档</title>  
  6. <style type="text/css">  
  7. <!--  
  8. .qq {  
  9. height: 90px;  
  10. width: 90px;  
  11. background-image: url(icon_home.png)!important;/* FF IE7 */  
  12. background-repeat: no-repeat;  
  13.   
  14. _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='icon_home.png'); /* IE6 */  
  15. _ background-image: none; /* IE6 */  
  16. }  
  17. -->  
  18. </style>  
  19. </head>  
  20.   
  21. <body>  
  22.   
  23. <div class="qq"></div>  
  24.   
  25. </body>  
  26. </html>  

 

 

案例2: 给img定义样式,页面上所有透明png即自动透明了。(这方法只对直接插入的图片有效,对背景图无效)注意,要准备一个透明的小图片transparent.gif,大小不限。必须放在和html相同的目录
请勿大量使用,否则会导致页面打开很慢!!!)

 

Html代码  收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title>无标题文档</title>  
  6. <style type="text/css">  
  7. .mypng img {  
  8. azimuth: expression(  
  9. this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none",  
  10. this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "', sizingMethod='image')",  
  11. this.src = "transparent.gif"):(thisthis.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),  
  12. this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "', sizingMethod='crop')",  
  13. this.runtimeStyle.backgroundImage = "none")),this.pngSet=true);  
  14. }  
  15.   
  16. </style>  
  17. </head>  
  18.   
  19. <body>  
  20. 换成你的png图片  
  21. <div class="mypng">  
  22. <img src="icon_face_07.png" width="30" height="30" />  
  23. <img src="icon_face_10.png" width="30" height="30" />  
  24. <img src="icon_face_08.png" width="30" height="30" />  
  25. </div>  
  26. </body>  
  27. </html>  

 

案例3:用JS实现,加上一段js代码后,所有插入的透明png自动透明了.(注意,这方法也是只对直接插入的图片有效,对背景图无效

 

Html代码  收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title>无标题文档</title>  
  6. <script language="JavaScript">   
  7. function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6.   
  8. {   
  9.     var arVersion = navigator.appVersion.split("MSIE")   
  10.     var version = parseFloat(arVersion[1])   
  11.     if ((version >= 5.5) && (document.body.filters))   
  12.     {   
  13.        for(var j=0; j<document.images.length; j++)   
  14.        {   
  15.           var img = document.images[j]   
  16.           var imgimgName = img.src.toUpperCase()   
  17.           if (imgName.substring(imgName.length-3, imgName.length) == "PNG")   
  18.           {   
  19.              var imgID = (img.id) ? "id='" + img.id + "' " : ""   
  20.              var imgClass = (img.className) ? "class='" + img.className + "' " : ""   
  21.              var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "   
  22.              var imgStyle = "display:inline-block;" + img.style.cssText   
  23.              if (img.align == "left") imgStyle = "float:left;" + imgStyle   
  24.              if (img.align == "right") imgStyle = "float:right;" + imgStyle   
  25.              if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle   
  26.              var strNewHTML = "<span " + imgID + imgClass + imgTitle   
  27.              + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"   
  28.              + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"   
  29.              + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"   
  30.              img.outerHTML = strNewHTML   
  31.              jj = j-1   
  32.           }   
  33.        }   
  34.     }       
  35. }   
  36. window.attachEvent("onload", correctPNG);   
  37. </script>  
  38. <style type="text/css">  
  39. <!--  
  40. body {  
  41. background-color: #9999CC;  
  42. }  
  43. -->  
  44. </style></head>  
  45.   
  46. <body>  
  47. 把图片换成你自己的图片  
  48. <img src="img/icon_face_03.png" width="30" height="30" /><!--把图片换成你自己的图片 -->  
  49. <img src="img/icon_face_05.png" width="30" height="30" />  
  50. <img src="img/menu_title_over.png" width="130" height="36" />  
  51. </body>  
  52. </html>       

 案例4:

 

Html代码  收藏代码
  1. <script language="javascript">  
  2. // 修复 IE 下 PNG 图片不能透明显示的问题  
  3. function fixPNG(myImage) {  
  4. var arVersion = navigator.appVersion.split("MSIE");  
  5. var version = parseFloat(arVersion[1]);  
  6. if ((version >= 5.5) && (version 7) && (document.body.filters))  
  7. {  
  8.      var imgID = (myImage.id) ? "id='" + myImage.id + "' " : "";  
  9.      var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : "";  
  10.      var imgTitle = (myImage.title) ? "title='" + myImage.title   + "' " : "title='" + myImage.alt + "' ";  
  11.      var imgStyle = "display:inline-block;" + myImage.style.cssText;  
  12.      var strNewHTML = "<span " + imgID + imgClass + imgTitle  
  13.   
  14.    + " style=\"" + "width:" + myImage.width  
  15.   
  16.    + "px; height:" + myImage.height  
  17.   
  18.    + "px;" + imgStyle + ";"  
  19.   
  20.    + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"  
  21.   
  22.    + "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>";  
  23.      myImage.outerHTML = strNewHTML;  
  24. } }   
  25.   
  26. window.onload=function(){  
  27.          document.getElementById("top").style.height=screen.height/5+"px";  
  28.           
  29. }//  
  30. </script>  

 

用法如下:
<img src="logo.png" width="328" height="325" border="0" onload="fixPNG(this)" />

 

以下是微软官方提供的解决方法:

Js代码 
    1. /*  
    2. Correctly handle PNG transparency in Win IE 5.5 & 6. 
    3. Copyright 2007 Ignia, LLC 
    4. Based in part on code from from http://homepage.ntlworld.com/bobosola. 
    5.  
    6. Use in <HEAD> with DEFER keyword wrapped in conditional comments: 
    7. <!--[if lt IE 7]> 
    8. <script defer type="text/javascript" src="pngfix.js"></script> 
    9. <![endif]--> 
    10.  
    11. */  
    12.   
    13. function fixPng() {  
    14.   var arVersion = navigator.appVersion.split("MSIE")  
    15.   var version = parseFloat(arVersion[1])  
    16.   
    17.   if ((version >= 5.5 && version < 7.0) && (document.body.filters)) {  
    18.     for(var i=0; i<document.images.length; i++) {  
    19.       var img = document.images[i];  
    20.       var imgName = img.src.toUpperCase();  
    21.       if (imgName.indexOf(".PNG") > 0) {  
    22.         var width = img.width;  
    23.         var height = img.height;  
    24.         var sizingMethod = (img.className.toLowerCase().indexOf("scale") >= 0)? "scale" : "image";   
    25.         img.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + img.src.replace('%23', '%2523').replace("'", "%27") + "', sizingMethod='" + sizingMethod + "')";  
    26.         img.src = "images/blank.gif";  
    27.         img.width = width;  
    28.         img.height = height;  
    29.         }  
    30.       }  
    31.     }  
    32.   }  
    33.   
    34. fixPng(); 

posted on 2014-09-16 14:54  鬼鬼丫404  阅读(277)  评论(0编辑  收藏  举报

导航