posts - 297,  comments - 1618,  trackbacks - 0

              轉(zhuǎn)載自:http://www.azuresky.com.cn/post/WebJourney-PngTransparentInIE6.php#topreply

             很多朋友在制作網(wǎng)頁時都會用到圖片透明。使其部分透明的圖片后面顯示背景部分。
          而現(xiàn)在流行的具有透明性的圖片有GIF和PNG兩種非常普及格式。

          GIF(Graphics Interchange Format圖像互換格式)可實現(xiàn)圖像區(qū)域的部分或全局透明。現(xiàn)非常多的網(wǎng)站都將其運用到其中。
          但是256色的限制GIF的使用范圍。還有一個問題:譬如,當(dāng)我們的圖像邊緣有陰影時,保存透明后會發(fā)現(xiàn)其邊緣不是以漸變式透明顯示,而是用灰度色顯示而無透明而言。

          解決上面GIF的缺陷方案最好方法就是使用現(xiàn)在網(wǎng)絡(luò)上流行使用的另一種圖像格式PNG(Portable Network Graphic Format流式網(wǎng)絡(luò)圖形格式)
          但是PNG最大的問題就是,它在IE6下無法顯示透明區(qū)域(Firefox、Opera、Safari均支持PNG透明),會有一種灰白色代替成為其背景色。這不是PNG這個格式圖片的問題,而是IE6的BUG,沒有將PNG的Alpha通道打開,造成透明PNG圖片的在IE6上顯示不出透明區(qū)域。

          現(xiàn)在就有種方法是通過引入JavaScript的方式解決這個問題。

          第一步:
          新建一個pngfix.js文件寫入以下代碼(放在你網(wǎng)頁的相同目錄下):


          var PIXELGIF="pngfix.gif";// 這個是個頭1*1像素的透明gif圖片,請自行建立并放在你網(wǎng)頁的相同目錄下

          var arVersion = navigator.appVersion.split("MSIE");
          var version = parseFloat(arVersion[1]);
          var pngxp=/\.png$/i;
          var AlphaPNGfix= "progid:DXImageTransform.Microsoft.AlphaImageLoader";
          function fixPNGAll() {
                  if(!document.all) return;
                  if ((version >= 5.5 && version < 7) && (document.body.filters)) {
                    for(var i=0; i<document.images.length; i++) {
                          var img = document.images[i];
                          if(img.src && pngxp.test(img.src)) {
                            var imgName = img.src;
                            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:" +AlphaPNGfix
                            + "(src='" + img.src + "', sizingMethod='scale');\"></span>";
                            if (img.useMap) {
                                  strNewHTML += "<img style=\"position:relative; left:-" + img.width + "px;"
                                  + "height:" + img.height + "px;width:" + img.width +"\" "
                                  + "src=\"" + PIXELGIF + "\" usemap=\"" + img.useMap
                                  + "\" border=\"" + img.border + "\">";
                            }
                            img.outerHTML = strNewHTML;
                            i--;
                          }
                    }
                    /* for type=image png button */
                    var kmax = document.forms.length;
                    for(var k=0; k<kmax; k++) {
                          var fmob = document.forms[k];
                          var elmarr = fmob.getElementsByTagName("input");
                          var jmax = elmarr.length;
                          for(var j=0; j<jmax; j++) {
                                  var elmob = elmarr[j];
                                  if(elmob && elmob.type=="image" && pngxp.test(elmob.src)) {
                                          var origsrc = elmob.src;
                                          elmob.src = PIXELGIF;
                                          elmob.style.filter = AlphaPNGfix+"(src='" +origsrc +"')";
                                  }
                          }
                    }
                  }
          }

          function fixPNG(img) {
                  if(!document.all) return;
                  var img;
              if(img && img.src && pngxp.test(img.src)) {
                var imgName = img.src;
                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:" +AlphaPNGfix
                + "(src='" + img.src + "', sizingMethod='scale');\"></span>";
                if (img.useMap) {
                  strNewHTML += "<img style=\"position:relative; left:-" + img.width + "px;"
                  + "height:" + img.height + "px;width:" + img.width +"\" "
                  + "src=\"" + PIXELGIF + "\" usemap=\"" + img.useMap
                  + "\" border=\"" + img.border + "\">";
                }
                img.outerHTML = strNewHTML;
              }
          }


          第二步:
          在head標(biāo)簽中引入js文件

          <script language="JavaScript" src="pngfix.js"></script>



          第三步(分兩種情況):
          1、指定PNG圖片使其在IE6下背景透明
          在img標(biāo)簽中加入onload="fixPNG(this)"事件

          <img src="Name.png" alt="Name"  onload="fixPNG(this)" />


          2、頁面內(nèi)所有PNG圖片使其在IE6下背景透明
          在body表情中加入onload="fixPNGAll()"事件

          <body onload="fixPNGAll()">



          需要注意的是:
          如果你的網(wǎng)頁需要符合XHTML 1.0標(biāo)準(zhǔn)的話,請用第三步中的2方法,因為1方法中img標(biāo)簽中的onload事件是不符合XHTML 1.0標(biāo)準(zhǔn)的

          特殊情況(用PNG為button按鈕的背景時):
          如果你要在input標(biāo)簽的背景中使用PNG圖片,此js文件同樣適用。

          先在head標(biāo)簽中引入js文件

          <script language="JavaScript" src="pngfix.js"></script>



          在body標(biāo)簽中加入onload="fixPNGAll()"事件

          <body onload="fixPNGAll()">


          示例

          <input type="image" src="Name.png" />



          其實還有其他一些方法也能解決PNG圖片格式在IE6中背景透明的問題,Tim將下次跟大家共同探討。

          posted on 2008-08-05 11:26 阿蜜果 閱讀(3544) 評論(3)  編輯  收藏


          FeedBack:
          # re: [轉(zhuǎn)]使PNG圖片格式在IE6中背景透明(pngfix)
          2008-08-31 01:10 | J.wei
          學(xué)習(xí)了呢,剛剛在想這個問題  回復(fù)  更多評論
            
          # re: 【轉(zhuǎn)】使PNG圖片格式在IE6中背景透明(pngfix)
          2009-02-17 16:56 | 笑嘻嘻
          根本就不行  回復(fù)  更多評論
            
          # re: 【轉(zhuǎn)】使PNG圖片格式在IE6中背景透明(pngfix)
          2009-09-03 17:06 | aisinvon
          不行啊,不起作用。你自己有沒有試過啊  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

                生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關(guān)注blog

          積分與排名

          • 積分 - 2296321
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沭阳县| 临汾市| 台湾省| 松江区| 丰原市| 五华县| 阜城县| 威远县| 武山县| 蚌埠市| 远安县| 长沙市| 清新县| 长垣县| 武夷山市| 那坡县| 沙坪坝区| 江北区| 宜都市| 奈曼旗| 华阴市| 博罗县| 万载县| 黄龙县| 扶绥县| 鄂托克前旗| 巴林左旗| 泸水县| 苍南县| 永善县| 青冈县| 安龙县| 忻城县| 和静县| 鄂伦春自治旗| 沙雅县| 普兰店市| 赤壁市| 安乡县| 乌什县| 兴仁县|