解决IE6下png图片透明度不显示的问题
世界上最遥远的距离,不外乎我在搞前端,你却在用旧IE,现在随着XP要退休了,IE6的市场占有率应该也会逐步下滑。不过基于天朝人民的惰性以及企鹅微软的“扎篱笆”活动,做网站的朋友依旧不能忽视IE6的存在。
现在谈的是解决IE6下png图片透明度不显示的问题,这招是淘宝的伎俩,貌似12年双十一活动页面代码中用的就是这套路:
首先加一段这样的代码:
<!--[if IE 6]> <script src="js/DD_belatedPNG.js"></script> <script> DD_belatedPNG.fix('.hot,.new'); </script> <![endif]-->
这段代码是当浏览器为ie6时就执行“DD_belatedPNG.js”这个js文件,这里要注意斥是“.hot,.new”就是放透明图片的层class名(比如: DD_belatedPNG.fix('.main .information_box,.main .right_p'); )
此js文件代码如下:
1 | var DD_belatedPNG={ns: "DD_belatedPNG" ,imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace: function (){ if (document.namespaces&&!document.namespaces[ this .ns]){document.namespaces.add( this .ns, "urn:schemas-microsoft-com:vml" )}},createVmlStyleSheet: function (){ var b,a;b=document.createElement( "style" );b.setAttribute( "media" , "screen" );document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild); if (b.styleSheet){b=b.styleSheet;b.addRule( this .ns+ "\\:*" , "{behavior:url(#default#VML)}" );b.addRule( this .ns+ "\\:shape" , "position:absolute;" );b.addRule( "img." + this .ns+ "_sizeFinder" , "behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;" ); this .screenStyleSheet=b;a=document.createElement( "style" );a.setAttribute( "media" , "print" );document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule( this .ns+ "\\:*" , "{display: none !important;}" );a.addRule( "img." + this .ns+ "_sizeFinder" , "{display: none !important;}" )}},readPropertyChange: function (){ var b,c,a;b=event.srcElement; if (!b.vmlInitiated){ return } if (event.propertyName.search( "background" )!=-1||event.propertyName.search( "border" )!=-1){DD_belatedPNG.applyVML(b)} if (event.propertyName== "style.display" ){c=(b.currentStyle.display== "none" )? "none" : "block" ; for (a in b.vml){ if (b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}} if (event.propertyName.search( "filter" )!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity: function (b){ if (b.currentStyle.filter.search( "lpha" )!=-1){ var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf( "=" )+1,a.lastIndexOf( ")" )),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover: function (a){setTimeout( function (){DD_belatedPNG.applyVML(a)},1)},fix: function (a){ if ( this .screenStyleSheet){ var c,b;c=a.split( "," ); for (b=0;b<c.length;b++){ this .screenStyleSheet.addRule(c[b], "behavior:expression(DD_belatedPNG.fixPng(this))" )}}},applyVML: function (a){a.runtimeStyle.cssText= "" ; this .vmlFill(a); this .vmlOffsets(a); this .vmlOpacity(a); if (a.isImg){ this .copyImageBorders(a)}},attachHandlers: function (i){ var d,c,g,e,b,f;d= this ;c={resize: "vmlOffsets" ,move: "vmlOffsets" }; if (i.nodeName== "A" ){e={mouseleave: "handlePseudoHover" ,mouseenter: "handlePseudoHover" ,focus: "handlePseudoHover" ,blur: "handlePseudoHover" }; for (b in e){ if (e.hasOwnProperty(b)){c[b]=e[b]}}} for (f in c){ if (c.hasOwnProperty(f)){g= function (){d[c[f]](i)};i.attachEvent( "on" +f,g)}}i.attachEvent( "onpropertychange" , this .readPropertyChange)},giveLayout: function (a){a.style.zoom=1; if (a.currentStyle.position== "static" ){a.style.position= "relative" }},copyImageBorders: function (b){ var c,a;c={borderStyle: true ,borderWidth: true ,borderColor: true }; for (a in c){ if (c.hasOwnProperty(a)){b.vml.color.shape.style[a]=b.currentStyle[a]}}},vmlFill: function (e){ if (!e.currentStyle){ return } else { var d,f,g,b,a,c;d=e.currentStyle} for (b in e.vml){ if (e.vml.hasOwnProperty(b)){e.vml[b].shape.style.zIndex=d.zIndex}}e.runtimeStyle.backgroundColor= "" ;e.runtimeStyle.backgroundImage= "" ;f= true ; if (d.backgroundImage!= "none" ||e.isImg){ if (!e.isImg){e.vmlBg=d.backgroundImage;e.vmlBg=e.vmlBg.substr(5,e.vmlBg.lastIndexOf( '")' )-5)} else {e.vmlBg=e.src}g= this ; if (!g.imgSize[e.vmlBg]){a=document.createElement("img ");g.imgSize[e.vmlBg]=a;a.className=g.ns+" _sizeFinder ";a.runtimeStyle.cssText=" behavior:none; position:absolute; left:-10000px; top:-10000px; border:none; margin:0; padding:0; ";c=function(){this.width=this.offsetWidth;this.height=this.offsetHeight;g.vmlOffsets(e)};a.attachEvent(" onload ",c);a.src=e.vmlBg;a.removeAttribute(" width ");a.removeAttribute(" height ");document.body.insertBefore(a,document.body.firstChild)}e.vml.image.fill.src=e.vmlBg;f=false}e.vml.image.fill.on=!f;e.vml.image.fill.color=" none ";e.vml.color.shape.style.backgroundColor=d.backgroundColor;e.runtimeStyle.backgroundImage=" none ";e.runtimeStyle.backgroundColor=" transparent "},vmlOffsets:function(d){var h,n,a,e,g,m,f,l,j,i,k;h=d.currentStyle;n={W:d.clientWidth+1,H:d.clientHeight+1,w:this.imgSize[d.vmlBg].width,h:this.imgSize[d.vmlBg].height,L:d.offsetLeft,T:d.offsetTop,bLW:d.clientLeft,bTW:d.clientTop};a=(n.L+n.bLW==1)?1:0;e=function(b,p,q,c,s,u){b.coordsize=c+" , "+s;b.coordorigin=u+" , "+u;b.path=" m0,0l "+c+" ,0l "+c+" , "+s+" l0, "+s+" xe ";b.style.width=c+" px ";b.style.height=s+" px ";b.style.left=p+" px ";b.style.top=q+" px "};e(d.vml.color.shape,(n.L+(d.isImg?0:n.bLW)),(n.T+(d.isImg?0:n.bTW)),(n.W-1),(n.H-1),0);e(d.vml.image.shape,(n.L+n.bLW),(n.T+n.bTW),(n.W),(n.H),1);g={X:0,Y:0};if(d.isImg){g.X=parseInt(h.paddingLeft,10)+1;g.Y=parseInt(h.paddingTop,10)+1}else{for(j in g){if(g.hasOwnProperty(j)){this.figurePercentage(g,n,j,h[" backgroundPosition "+j])}}}d.vml.image.fill.position=(g.X/n.W)+" , "+(g.Y/n.H);m=h.backgroundRepeat;f={T:1,R:n.W+a,B:n.H,L:1+a};l={X:{b1:" L ",b2:" R ",d:" W "},Y:{b1:" T ",b2:" B ",d:" H "}};if(m!=" repeat "||d.isImg){i={T:(g.Y),R:(g.X+n.w),B:(g.Y+n.h),L:(g.X)};if(m.search(" repeat- ")!=-1){k=m.split(" repeat- ")[1].toUpperCase();i[l[k].b1]=1;i[l[k].b2]=n[l[k].d]}if(i.B>n.H){i.B=n.H}d.vml.image.shape.style.clip=" rect( "+i.T+" px "+(i.R+a)+" px "+i.B+" px "+(i.L+a)+" px) "}else{d.vml.image.shape.style.clip=" rect( "+f.T+" px "+f.R+" px "+f.B+" px "+f.L+" px) "}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f==" X ");switch(a){case" left ":case" top ":d[f]=0;break;case" center ":d[f]=0.5;break;case" right ":case" bottom ":d[f]=1;break;default:if(a.search(" % ")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?" W ":" H "]*d[f])-(c[b?" w ":" h "]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior=" none ";var g,b,f,a,d;if(c.nodeName==" BODY "||c.nodeName==" TD "||c.nodeName==" TR "){return}c.isImg=false;if(c.nodeName==" IMG "){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility=" hidden "}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(" .png ")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+" : "+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor=" none ";c.vml.image.fill.type=" tile ";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand(" BackgroundImageCache", false , true )} catch (r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); |
以上几步便能解决png无法在IE6透明的问题了,也不用去搞什么麻烦的滤镜(其实JS文件里面已经集成了过滤功能)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)