png透明问题解决方法(png图片ie6不兼容问题)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在web前端开发中,经常会遇到需要用背景或图片透明的问题。

首先,目前我们所面临的情况是:
1.在ie7+,firefox,safari,opera这些常用浏览器中,直接使用透明png是没有问题的,但在ie6下却不能透明。

2.ie6目前的时常份额仍然很大,我们必须考虑兼容ie6的问题。

png背景透明解决办法
.pngbackground{
background:url(your.png);
_background: none;
_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');
}

注:当属性前面加_,则只在ie6下被解析。


那 么到目前为止,基本解决了png在ie6下的透明问题,但事情似乎没有这么顺利,很快我们就可以发现,当png作为透明背景的时候,会另自己失去焦点,此 时加在上面的事件如:onmouseover,onclick等事件都失去了作用,这也是滤镜的一个特性,这时候我们需要将该元素的position设置 为relative就可以解决问题,即:
.pngbackground {
position:relative;
background:url(your.png);
_background: none;
_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');
}


png图片解决方案
作为图片插入是用以下代码即可解决。

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
   };
  };
};
if(navigator.userAgent.indexOf("MSIE")>-1)
{
window.attachEvent("onload", correctPNG);
};



另一种解决方案

在做WEB设计时最让人头痛的就是不同浏览器之间的显示差异,这一点尤其以IE6最让人深恶痛绝。最近就碰到一个非常让人头痛的问题,PNG在IE6下的透明效果失效。研究了差不多三天,终于不完美解决了这个问题。

W3C标准推荐使用PNG图片作为网页首选图像资源,但是漂亮、和谐而且有透明效果的PNG却在IE6下显示得一塌糊涂。为了解决这个问题查阅了很多资料,核心原理是使用IE独有的CSS样式中的behaviro属性,最终用如下方法解决:

1.下载iepngfix.zip,其中有三个文件:iepngfix.htc、iepngfix_tilebg.js、blank.gif,将这几个文件解压出来放到所需要使用png做为CSS背景的网站的根目录下。


2.假定一个div需使用png作为背景,标准的做法是:

#mydiv {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

}

此时该背景能在FF和IE7下正常显示,但是在IE6下会有恐怖的“灰边”。需要使用滤镜来解决。具体做法是使用上面提到的htc文件,在CSS样式的最后定义一个behaviro属性。新的的样式定义为:

#login_main {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

behavior: url("iepngfix.htc");

}

此时要注意url内的路径是相对于index.htm来说的,而不是相对于定义其样式的css文件。


3.在index.htm文件中需要引入上文中提到的第二个javascript文件,使用

<script language="javascript" src="iepngfix_tilebg.js"></script>

插入到<head></head>中


此 时大功告成,使用IE6浏览index.htm文件看看效果,得意的笑吧。顺便提醒一句,对于普通IE6升级成IE7的XP用户,这两种浏览器是无法在同 一个操作系统中共存的,笔者比较愚笨,使用了SUN的virtual box装了一个WIN2K3,幸好virtual box提供全屏和无缝模式,使得虚拟机用起来还是蛮流畅的。



优化:

方案一:可以发现,当需要用到的 png图片比较多时IE6反应会有些迟钝,因为IE6每次加载需要透明的PNG时都会进行一系列的运算,将png中的alpha透明部分用 blank.gif空白位图代替,可以想象这样的计算规模有多庞大。没办法,这是无法避免的,Vista 和IE7早就出来了,还有非常卓越的FF可供选择,使用IE6的客户所占的份额总会渐渐下降的。观察一下,此时使用IE7打开刚刚index.htm可以 发现,本来非常完美而且不需要做任何改动的页面在IE7下也加载得特别慢,看来behaviro属性也影响到了IE7,让IE7也做了繁重的无用功。

此 时我们的目标是将IE7解放出来,查阅各种浏览器的hack,发现只有IE6在CSS中能够认识下划线“_”,所以我们在刚刚的CSS样式中的 behaviro前加上一个下划线。而这个下划线无论是FF或者IE7都是不会去解析的,这样IE7就会忽略这个CSS属性,既而解放了IE7。

方 案二:既然此次处理的目标就是IE6浏览器,所以在首页中的JS加载语句也可以加上一个小小的改动,加上“<!--[if IE 6]><![endif]-->”标签,既而只针对IE6,而解放了其他浏览器,使它们在页面加载时就忽略 iepngfix_tilebg.js这个文件,提高效率。而可怜的IE6,让它接受暴风骤雨般的CPU消耗吧,没办法,爱莫能助了。在web前端开发中,经常会遇到需要用背景或图片透明的问题。

首先,目前我们所面临的情况是:
1.在ie7+,firefox,safari,opera这些常用浏览器中,直接使用透明png是没有问题的,但在ie6下却不能透明。

2.ie6目前的时常份额仍然很大,我们必须考虑兼容ie6的问题。

png背景透明解决办法
.pngbackground{
background:url(your.png);
_background: none;
_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');
}

注:当属性前面加_,则只在ie6下被解析。


那 么到目前为止,基本解决了png在ie6下的透明问题,但事情似乎没有这么顺利,很快我们就可以发现,当png作为透明背景的时候,会另自己失去焦点,此 时加在上面的事件如:onmouseover,onclick等事件都失去了作用,这也是滤镜的一个特性,这时候我们需要将该元素的position设置 为relative就可以解决问题,即:
.pngbackground {
position:relative;
background:url(your.png);
_background: none;
_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');
}


png图片解决方案
作为图片插入是用以下代码即可解决。

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
   };
  };
};
if(navigator.userAgent.indexOf("MSIE")>-1)
{
window.attachEvent("onload", correctPNG);
};



另一种解决方案

在做WEB设计时最让人头痛的就是不同浏览器之间的显示差异,这一点尤其以IE6最让人深恶痛绝。最近就碰到一个非常让人头痛的问题,PNG在IE6下的透明效果失效。研究了差不多三天,终于不完美解决了这个问题。

W3C标准推荐使用PNG图片作为网页首选图像资源,但是漂亮、和谐而且有透明效果的PNG却在IE6下显示得一塌糊涂。为了解决这个问题查阅了很多资料,核心原理是使用IE独有的CSS样式中的behaviro属性,最终用如下方法解决:

1.下载iepngfix.zip,其中有三个文件:iepngfix.htc、iepngfix_tilebg.js、blank.gif,将这几个文件解压出来放到所需要使用png做为CSS背景的网站的根目录下。


2.假定一个div需使用png作为背景,标准的做法是:

#mydiv {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

}

此时该背景能在FF和IE7下正常显示,但是在IE6下会有恐怖的“灰边”。需要使用滤镜来解决。具体做法是使用上面提到的htc文件,在CSS样式的最后定义一个behaviro属性。新的的样式定义为:

#login_main {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

behavior: url("iepngfix.htc");

}

此时要注意url内的路径是相对于index.htm来说的,而不是相对于定义其样式的css文件。


3.在index.htm文件中需要引入上文中提到的第二个javascript文件,使用

<script language="javascript" src="iepngfix_tilebg.js"></script>

插入到<head></head>中


此 时大功告成,使用IE6浏览index.htm文件看看效果,得意的笑吧。顺便提醒一句,对于普通IE6升级成IE7的XP用户,这两种浏览器是无法在同 一个操作系统中共存的,笔者比较愚笨,使用了SUN的virtual box装了一个WIN2K3,幸好virtual box提供全屏和无缝模式,使得虚拟机用起来还是蛮流畅的。



优化:

方案一:可以发现,当需要用到的 png图片比较多时IE6反应会有些迟钝,因为IE6每次加载需要透明的PNG时都会进行一系列的运算,将png中的alpha透明部分用 blank.gif空白位图代替,可以想象这样的计算规模有多庞大。没办法,这是无法避免的,Vista 和IE7早就出来了,还有非常卓越的FF可供选择,使用IE6的客户所占的份额总会渐渐下降的。观察一下,此时使用IE7打开刚刚index.htm可以 发现,本来非常完美而且不需要做任何改动的页面在IE7下也加载得特别慢,看来behaviro属性也影响到了IE7,让IE7也做了繁重的无用功。

此 时我们的目标是将IE7解放出来,查阅各种浏览器的hack,发现只有IE6在CSS中能够认识下划线“_”,所以我们在刚刚的CSS样式中的 behaviro前加上一个下划线。而这个下划线无论是FF或者IE7都是不会去解析的,这样IE7就会忽略这个CSS属性,既而解放了IE7。

方 案二:既然此次处理的目标就是IE6浏览器,所以在首页中的JS加载语句也可以加上一个小小的改动,加上“<!--[if IE 6]><![endif]-->”标签,既而只针对IE6,而解放了其他浏览器,使它们在页面加载时就忽略 iepngfix_tilebg.js这个文件,提高效率。而可怜的IE6,让它接受暴风骤雨般的CPU消耗吧,没办法,爱莫能助了。

解决IE6PNG透明问题JavaScript 本文还有配套的精品资源,点击获取 简介:在旧版IE6浏览器中,PNG图像格式的Alpha通道透明度无法被正确显示,导致透明效果出现问题。为了解决这一问题,开发者们提出多种JavaScript库和技术方案,包括Alpha Image Loader滤镜、DD_belatedPNG库、CSS精灵技术、JavaScript透明修复库等。这些技术使IE6能够模拟或修复PNG图像的透明... 阅读详情

相关推荐

IE6不兼容png透明背景解决方法

IE6不兼容png透明背景解决方法,有效解决IE6透明图片浅灰背景的问题

解决IE6PNG图片背景透明的三种方法(CSS/JS/JQuery)

透明效果有时候会给页面增加少色彩,特别是Vista盛行之后,半透明效果更加受推崇。在诸多可用于Web浏览的图片格式中,只有PNG格式和Gif格式可以实现半透明效果,过Gif格式的半透明效果很有限,而且会大范围失真,所以目前最流行的方式就是使用PNG格式图片过可惜的是,在Internet Explorer 6及以下版本中都支持PNG透明效果(至少是直接支持)。过幸好Mic...

weixin_30539835的博客 208

完美解决pngie6兼容问题完整示例

完美解决pngie6兼容问题完整示例,采用js

浏览器支持PNG图片背景透明解决办法

img.png {    background-image: expression(        this.runtimeStyle.backgroundImage = "none",        this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + thi

yh_bxhl的专栏 1940

完美解决IEPNG格式透明背景图片显示异常的各种方法【Z】

NG半透明背景图片效果 PNG图片在网页设计中扮演着一个很重要的角色,利用PNG图片的特点可以制作出实用,绚丽的效果,可是对于PNG图片的支持却是很理想,Firefox和Opera对PNG支持的比较好,特别是Firefox浏览器。可是IEPNG,使得设计者无法很随意的使用png图片IE5.5+的 AlphaImageLoader滤镜为通向png提供了一个道路,如果他载入的是PN...

liuchang0001的专栏 1042

electron制作聊天界面(仿制qq)

效果图: 样式使用scss和flex布局 这也是制作IM系统的最后一个界面了!在制作之前参考了qq和千牛 需要注意的点 qq将滚动条美化了 而且在无操作的情况下是会显示的 滚动条美化 ::-webkit-scrollbar { /*滚动条整体样式*/ width: 5px; /*高宽分别对应横竖滚动条的尺寸*/ heig...

weixin_33827590的博客 1737

SVG动态创建image失败解决方案

在用JS动态创建SVG标签的时候,像g标签,circle标签,rect标签等都可以正确创建并显示,但是image标签却总是能显示。我的初始代码如下:var svgNS = 'http://www.w3.org/2000/svg'; var oImg = document.createElementNS(svgNS, 'image'); oImg.setAttribute('xlink:href',

foreverling_ling的博客 2748

IE6的BUG列表

1.IE6png图片透明2.IE6不兼容line-height3.IE6DIV最小高度4.IE6 中的最大最小宽度和高度5.IE6 Select Bug6.img图片元素有多余空白7.IE6支持position:fixed 8.IE6绝对定位元素的1px间距 9.Opacity(透明)10.Double Margin Bug(双倍margin)11.3px Gap Bug aka Tex...

weixin_30763455的博客 77

IE6PNG图片背景透明的处理方法

<br />E6PNG背景透明的显示问题 <br />PNG格式比起GIF来表现色彩更丰富,特别是表现渐变以及背景透明的渐变要比GIF格式出色很多,目前,最新的浏览器基本上都支持PNG格式。但是IE6支持PNG背景透明,会显示一个灰色的框。<br />IE6PNG背景透明解决办法<br />一.gif替换png<br />.pngImg { background:url(image.png); _background:url(image.gif);}<br />注意上文的_号,目前IE7,8以及Fi

wjbaiverson的专栏 5497

ie6下background png 透明问题

PNG 图片在网站设计中是可或缺的部分,最大的特点应该在于 PNG 可以无损压缩,而且还可以设置透明,对于增强网站的图片色彩效果有重要的作用。 但为什么 PNG 图片却没有 GIF 和 JPG 图片的使用来得广泛呢,这个祸因应归属于微软的 IE 浏览器(Firefox 和 Opera 对 PNG 支持的比较好,而现在浏览器的主流IE6 却无法很好的支持)。过微软在最近也开始改过自新了,新

扈亚楠(Java) 2238

解决PNG图片透明IE不兼容问题

图片透明可以有两种,一种是GIF透明,一种是PNG透明,如果用GIF透明的话,在所有浏览器中都兼容,但是GIF图片像素低,图片产生锯齿。管你怎么保存,图片能达到客户想要的效果,这个时候就可以用PNGL图片透明图片像素高,易失真。但PNG图片透明IE6却显示一个蓝色的背景,IE7显示白色的背景,只有IE8是OK的。解决PNG图片透明IE不兼容问题我这里有两种方法。 1:直接插入图片是用以

643

解决png图片IE6背景无法透明不兼容解决方法

做页面经常碰到浏览器兼容问题,其中最蛋疼的就是IE6下面一堆问题,其中png图片无法透明就很让人纠结 网上有好多解决方法,大体都是一样的思路;以前有一种方法就是用gif图片IE6下面是支持gif图片背景透明的 但是有时候gif图片IE6下面会有毛边,显示效果好; 可以使用滤镜来使IE6也完美使用Png图片; 代码CSSfilter : progid:DXImageTr...

dijiao7951的博客 276

IE使用png透明图片方法

应用PNG图片透明或半透明的特性能做出非常漂亮的网页来。Firefox和Opera对PNG的支持非常的好,都是IE却无视PNG图片这一特性的“存在”,虽然IE7已经支持都是IE6还是行。查了一些资料,基本解决了这一问题,准备应用到PJskin上。虽然有让IE6支持PNG透明背景的JS程序,都是是很方便,还是用CSS来实现的好。使用到的就是:IE5.5+的AlphaImageLoader滤镜

鹰击长空 3557

解决IE6png图片透明问题方法

看了群的聊天记录,一直有人问IE6png图片怎么透明,其实有关png透明的文章网上有很多,方法也有很多,这里就小小的总结一下: 1、使用GIF代替 .pngImg { background:url(...

qq_37555524的博客 276

解决IE6透明PNG图片有灰底

FF和IE7已经直接支持透明png图了,下面这个主要是解决IE6透明PNG图片有灰底的=============================================================================此效果简单,。。。。相当错 推荐style="FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/fl.png')"语法:filter : progid:DXImageTra

EASYBOOR 1141

ie6 png 图片背景透明解决方法

我本来以为 我对程序 的菜菜脑袋可能解决ie6 png图片透明背景不兼容问题了,只能使用所谓的  在保存png 图片时,保存为文件更小,有gif 效果,被ie6支持的png8 索引色透明度格式 但是png8 支持的色彩位数实在是太低,很多时候直接处理的图片保存出来是有锯齿,就是有毛边,放在网页上一点都平滑,真是令人抓狂。 png24 png32 虽然支持了更多的色彩位数,但是ps 的

zyjia_study的专栏 874

解决PNG图片IE6中背景透明方法_解决IE6PNG背景透明方法

1、解决PNG图片IE6中背景透明CSS与JS代码 function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6. { var arVersion = navigator.appVersion.split("MSIE") var version = parseFloat(arVersion[1]

asoula的专栏 492

解决IE6PNG透明显示灰底的8种方法

方案一 - 滤镜解决方案 介绍:滤镜从IE4.0被微软正式引入,所以我们可以使用滤镜解决IE6PNG透明问题,滤镜仅可以实现目前CSS3的一些旋转效果而且还可以引入图片。注意:此方法在部分版本的IETest中无效,建议使用标准的IE6来进行测试! 思路:1、书写正常的CSS代码,通过background导入图片,这样所有的浏览器均使用了此PNG图片; background:url(....

happyqyt的专栏 650
上一篇: 做网站的二十六大定律
下一篇: 去掉点击链接,a链接过后产生的虚线框
nb_pdd
博客等级 码龄16年 4粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值