首页 > 其他 > 详细

让ie6对png透明图片支持起来

时间:2015-12-09 07:07:41      阅读:248      评论:0      收藏:0      [点我收藏+]

一个老生常谈的问题就是ie6不支持透明png图片啊。但其实ie6只是不支持png-24格式的透明背景图片,但对透明背景的png-8图片还是支持的,只是png-8图片只有256色,放到任意浏览器都会呈现白色的锯齿。

当代码这样时:

<style type="text/css">
    .gif{
        width: 400px;
        height:200px;
        background:#f00 url(png8.png) no-repeat;
     }
 </style>

<div class="gif"></div>

 

div中的背景图片是下图的透明背景png-8图片:

技术分享

浏览器打开的效果如下(chrome,firefox,ie6+都是这么个效果):

技术分享

 

 

看到这些泛白的锯齿要哭瞎了,怎么去除这恶心的锯齿呢,ps保存png-8图片时,有多个选项,经测试通过勾选“扩散透明度仿色”时锯齿的能达到最小,

技术分享

 

如下图所示,锯齿此时没那么恶心:

技术分享

但是远远不够啊,这个视觉效果还是太差了。上网查询下,这是由于png-8白色杂边导致的问题,可以在保存图片前将杂边的颜色设置成和背景一致来解决。

在ie6下的效果如下,其他浏览器显示效果也一致:

技术分享

 

此时ie6下png-8透明背景图片能正常显示了,且不只是针对ie6,对其他浏览器也是用,好像很好用,但是png-8只有256色啊,色彩不丰富,而现在广泛使用的png-24有2^24=1678万色,能展示很丰富的色彩,而且没有锯齿。所以如果原图色彩很丰富,那么只能转换为png-8图片作为降级的方法用到ie6上。还有个问题是,杂边处理的前提是图片覆盖区域的背景色是单色,如果是多种颜色,那么总会出现锯齿了。

 

我们需要寻找更灵活的方法,ie有专用的AlphaImageLoader过滤器,可以让ie6支持png-24的透明背景,而不是将透明色显示为灰色,这里要用到ie hack技巧,将background-image设置为none去掉背景图片,在使用滤镜加载图片。AlphaImageLoader过滤器中的参数src指向要显示的png-24图片,sizingMethod有3个可选值:crop:直接放置到容器中,图片左上角对齐容器左上角,image:让容器的边缘调整至包住整个图片,scale:让图片调整至充满整个容器。

      .gif{
        width: 400px;
        height:200px;
        background: #f00 url(ie6.png) no-repeat;
        *background-image:none;
        filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=‘png_24.png‘,sizingMethod=crop);
      }

 

效果妥妥的:

技术分享

 

不过需要注意的是浏览器会有提示,需要用户点击允许才能运行滤镜效果,否则不仅没有滤镜效果,而且由于取消了背景图片,图片压根就看不到(只看到红色,字是见不到的,图略):

技术分享

 
如果觉得一个个图片添加滤镜效果麻烦,还可以用js写个函数一次性将页面所有png图片抓出来添加ie滤镜效果。不过用户喜欢禁掉js脚本的话,就呵呵了。
 
 
还有一种方法是利用ie专有的css扩展--行为,引用.htc文件来修复png透明背景问题(也有使用.htc文件来解决圆角框的):
div{
   behavior:url(iepngfix.htc);
}

 

这里有个介绍这种技术的网站:http://www.twinhelix.com/css/iepngfix/,也可以直接下载demo文件,详细使用流程在demo页面有引导:www.twinhelix.com/css/iepngfix/iepngfix.zip
未引用htc文件,可以看到背景灰蓝色:
 
技术分享
 
 
引用htc文件后,透明背景正常显示了(需要点击允许运行阻止的内容才能正常显示):
 
技术分享
 
 
让ie6支持透明背景的png的方法就总结到这里。既然是兼容,就不可能百分百完美,具体用什么技术去完成网页的开发还是要思量下再做决定。虽然开发者总是吐槽兼容旧版本浏览器很恶心,但是旧版本浏览器曾经也作出过巨大贡献。

ie6虽已是耄耋之年,但由于xp用户还是挺多的,而且一般家庭不换电脑的话就不会去升级浏览器,所以ie6退出历史舞台还需花费一些时日。在ie6剩余不多的生命时光,我们需要做的就是修好各种bug,静静等待ie6挂掉。

 

 

-------------------------------转载注明出处^_^:  http://www.cnblogs.com/suspiderweb/

让ie6对png透明图片支持起来

原文:http://www.cnblogs.com/suspiderweb/p/5031656.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!