posts - 297,  comments - 1618,  trackbacks - 0

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

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

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

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

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

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


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

          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、頁(yè)面內(nèi)所有PNG圖片使其在IE6下背景透明
          在body表情中加入onload="fixPNGAll()"事件

          <body onload="fixPNGAll()">



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

          特殊情況(用PNG為button按鈕的背景時(shí)):
          如果你要在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" />



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

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


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

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


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

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

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

          留言簿(263)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          相冊(cè)

          關(guān)注blog

          積分與排名

          • 積分 - 2297849
          • 排名 - 3

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 南澳县| 犍为县| 龙井市| 清河县| 枣阳市| 辽阳县| 盐池县| 济阳县| 扎囊县| 榆树市| 得荣县| 汉中市| 鸡东县| 额尔古纳市| 新密市| 保亭| 双辽市| 承德县| 调兵山市| 涿鹿县| 县级市| 永德县| 若尔盖县| 都匀市| 许昌县| 龙泉市| 房产| 涟源市| 东城区| 海丰县| 彭泽县| 通道| 新野县| 浦北县| 贵州省| 阿坝| 长治县| 乌海市| 社旗县| 云阳县| 恩平市|