ie6的png24问题
解决IE6的PNG透明JS插件 DD_belatedPNG
引:http://www.cnblogs.com/cobby/archive/2012/05/11/2495801.html
IE6的PNG透明是个老问题了,最近有朋友问我有没有最好的解决这个问题的插件。虽然知道且在用DD_belatedPNG这个插件,今天抽空把这个发上来。
虽然之前在博客里发过一款jquery的png插件,但是不支持背景平铺。
DD_belatedPNG使用了微软的VML语言对PNG图片进行重新绘制,以达到半透明的效果,并且能支持background-position和background-repeat属性,支持伪类。是一款不错的值得推荐的插件,用法也比较简单。
使用方法:
1 |
<!--[if IE 6]> |
引用函数是DD_belatedPNG.fix(),括号里的 .png_bg 改成你的css选择器名称。
ID选择器例子:
1 |
DD_belatedPNG.fix('#png'); |
伪类例子:
1 |
DD_belatedPNG.fix('.png a:hover,.png a:focus'); |
img标签例子:
1 |
DD_belatedPNG.fix('img'); |
如果是多个直接加逗号(英文下的)就行。例如:
1 |
DD_belatedPNG.fix('.png_bg,#png,.png a:hover,.png a:focus,img'); |
JS文件下载地址:
0.0.8a.js (未压缩版本)
0.0.8a-min.js (压缩版)
官方网站:DD_belatedPNG
解决IE6下不支持 png24的透明图片问题
常用的两种解决方案:
第一:使用IE滤镜解决
关键代码:
css代码
_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='css/images/png24.png',sizingMethod='crop');
有几点注意点:
1:这里对应的src地址一定是相对于html页面的不是相对于css路径的。
2: 只能对单张的 png图片使用,意思是不能使用background-position的属性。
3: 必须加上 _background:none 这段。
第二: 使用DD_belatedPNG的js代码。
使用DD_belatedPNG.js可完美的解决IE6下PNG图片透明问题,并且支持backgrond-position与background-repeat. 这是其他方法所不具备的,同时DD_belatedPNG还支持a:hover属性,以及<img>。
使用方法:
首先下载JS文件:0.0.8a-min.js (压缩版) 0.0.8a.js (未压缩版本)
之后在页面中引用代码:
<!–[if IE 6]> <script type=”text/javascript” src=”下载下来的JS路径”></script> <script> DD_belatedPNG.fix(‘CSS选择器, 应用类型’); </script> <![endif]–>
引用函数是 DD_belatedPNG.fix() , 括号里分别填写应用PNG的CSS选择器(可使用ID选择器和类选择器)和应用类型(分为img和background两种)。
- 如DD_belatedPNG.fix(‘#box-one, img’) 或者 DD_belatedPNG.fix(‘.header, background’) 等。
- 更多选择器的如 DD_belatedPNG.fix(‘#box-one, .header, img,background’);
- 带有hover效果的写成 DD_belatedPNG.fix(‘#box-one, #box-one:hover’)
第一:DD_belatedPNG插件式支持backgrond-position等定位方法。所以可以使用"雪碧图"
第二: DD_belatedPNG支持hover方法,但是必须把hover之后的class也写进fix方法中去。
使用DD_belatedPNG的一些注意事项
引:http://blog.sina.com.cn/s/blog_8241e8510101ewmh.html
问题1: 为什么在iframe页面里使用了DD_belatedPNG后,页面显示空白?
办法:找到以下代码:
if (el.currentStyle.position == 'static') { el.style.position = 'relative' }
改成:
if (el.currentStyle.position == 'static') {
if(el.nodeName.toLowerCase()!='html'){
el.style.position = 'relative'
}
}
从代码上可以看出来,是因为没有排除html节点,所以整个页面飘了。
注意:修改后有可能会引起别的问题!
问题2: 为什么在有些页面里使用了DD_belatedPNG后,图片显示不全,只显示一部分?
办法:找到以下代码:
el.vml.image.fill.type = 'tile';
注:此部分代码在DD_belatedPNG.js中fixPng方法内.
改成:
el.vml.image.fill.type = 'frame';
原因:比如有些图片(png格式),原来是100px×100px的,你想用样式或者标签的属性来缩放它到50px长宽,那么这个图片在IE6中不会被缩放,而是被剪切,只显示图片左上角的50px长宽,其它部分隐藏,而且也不是必现的,好像跟加载图片速度有关系,慢的话容易出现。据说这个BUG在新版中被解决,但是我试过了,确实解决了,但是又引起了别的问题,就是在经常切换div结构的时候,别切换的div有可能会样式错乱。所以修改或升级还是需要谨慎。
问题3: 为什么在页面里使用了DD_belatedPNG后,我的图片延迟加载(比如取_src的值,赋值给src)的功能失效?或者类似的动态修改图片属性失败的问题?又或者我在图片上的一些点击事件等都失效?
首先说明一下为什么动态修改图片属性会失效(png图片)
因为一开始页面初始化之后,所有png图片都被fix了一遍,即DD_belatedPNG会对已经fix之后的图片设置一个私有属性,具体就是VML的一些相关知识了吧,反正你不能再对他进行一些设置src属性的一些操作了,包括点击事件
但是如果你的图片一开始是gif或别的,就没事,不会受到影响,还可以继续设置src属性
图片延迟加载失效的分析
这样图片延迟加载失效,很好理解了。图片延迟加载的原理就是,一开始图片的src值是一个空白图片,比如他 是一个gif图片,当然如果一开始的空白图片也是png,那就彻底悲催了,后续也无法被再次设置src。他初始化会对这个空白图片fix,然后你后来再重 新设置src,可以被设置成功,但是你会发现,重新设置后的png图片还是有灰色背景,没有被再次正确fix,这是因为他认为你已经被fix了,有了他自 己的私有属性,不能再次fix。
解决办法:
知道了原因,就能找到解决办法了,既然不能识别已经被fix的,那么我可以再次innerHTML一个图片出来不就可以了么?一个全新的图片!注意:你不能拿原来的图片用,或者通过clone原始的图片,生成一个新图片,那样也是不行的,因为你还不能去掉被fix后的私有属性。
以下是实现的方法:
var replaceImg = (function(){
var div = document_createElement_x_x_x('div');
return function (oldImg, newImgHtml){
div.innerHTML = newImgHtml;
oldImg.parentNode.insertBefore(div.firstChild, oldImg);
oldImg.removeNode(true);
}
}());
var nextImg = dom.getElementsByTagName_r('img')[0];
replaceImg(nextImg,"
");
可以看出,确实是重新弄一个图片出来,这样DD_belatedPNG就可以识别了。
ie6的png24问题的更多相关文章
- iepngfix.htc让PNG-24在IE6中透明的方法(转)
add:360用的一个方法: <!--[if IE 6]> <script src="http://se.360.cn/js/DD_belatedPNG.js"& ...
- 让ie6对png透明图片支持起来
[声明:此文仅是对低版本ie使用透明图片的一个研究,当时出于工作要求,所以花费了一番心思在兼容旧版本ie上,现在对ie8都是做降级处理了.不培养用户坏习惯.引导用户跟随潮流体验新技术应是我们前端开发者 ...
- 小结IE6的坑
1.z-index在position:relative/absolute等定位属性设置后还是无效,会导致top栏的导航栏目的子菜单被下面的层遮住,无法显示:解决办法:?http://www.wufan ...
- CSS在IE6中常见的兼容性问题
1.在IE6中png24格式的图片不透明 解决办法:写一个条件注释语句,引入一个js插件,然后调用一下js中的方法,把需要处理的元素的类名写在括号中,如下 (插件下载地址:http://www.dil ...
- 【转】png优化相关
Png是图像文件存储格式,在网页设计中已经不是一个陌生的名词,在前端开发中经常使用到它,如常用CSS 雪碧图.而Png的使用不仅仅如此,Png有多少种格式,有哪些特点,PC端中常用的Png格式是哪些, ...
- PNG的使用技巧
Png是图像文件存储格式,在网页设计中已经不是一个陌生的名词,在前端开发中经常使用到它,如常用CSS 雪碧图.而Png的使用不仅仅如此,Png有多少种格式,有哪些特点,PC端中常用的Png格式是哪些, ...
- PNG使用技巧 PNG的使用技巧
PNG的格式和透明度 这个Fireworks会比较清楚,打开Fireworkd优化面板,可以清楚看到png有3种不同深度的格式:png8.png24.png32. 其中,在优化面板选择png8,可发现 ...
- Responsive Design响应式网站设计心得笔记
这个词已经喊了很久了,一直都是小打小闹,没正经的做过大的响应式全站,这次终于有机会了.网站刚上线半个月,就要改版为响应式设计,支持手机/PC等各类终端显示浏览.今天把首页做好,并测试无误,这里把一些应 ...
- REST风格的服务
使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[三]——Web Api入门 系列导航地址http://www.cnblogs.com/fzrain/p/3490137.htm ...
随机推荐
- java.io.IOException: Unable to open sync connection!的解决方案
在学习Android的时候,经常是使用手机调试程序,很方便,后来 在使用手机调试程序的时候出现了 [2012-03-08 11:27:43 - Tea_marsListActivity] ------ ...
- 【汇编语言】DEBUG的使用
在masm for windows中,需要先生存exe文件,然后再点调试按钮. 常用的命令有: R命令:查看.改变CPU寄存器的内容:如果要修改某个寄存器的内容,可以在r的后面接上空格和寄存器名.如: ...
- LaTeX入门教程
LaTeX(LATEX,音译"拉泰赫")是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发,利用这种格式,即使使用 ...
- Scrapy框架安装配置小结
Windows 平台: 系统是 Win7 Python 2.7.7版本 官网文档:http://doc.scrapy.org/en/latest/intro/install.html 1.安装Pyt ...
- Struts1和Struts2的区别和对比
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 ...
- 【6】锋利的 jQuery 笔记
1. 代码技巧 1. 利用 id, class 实现同级隐藏显示 效果如下: 2. 字体放大效果 效果图: 3. tab 切换 效果图: 4. 切换样式 添加 Cookie 效果图: 5. 编写插件 ...
- idea svn 更新覆盖了本地代码
idea 更新svn代码,覆盖了本地代码,还不能ctr+z怎么办? 下图
- Long类型比较大小,long型和Long型区别
今天写代码发现发现本地程序是正常的,但是发送到测试环境就不正常了,本着对数据的怀疑态度链接了测试数据库,调试程序发现,确实是数据问题,然后数据出现在什么地方呢?才发现是在判断用户所属的teamGrou ...
- solr常用命令
1.启动和关闭 a.启动和重启 启动和重启命令有很多选项让你运行在SolrCloud模式,使用示例配置,以hostname为开头或者非默认端口,指向本地ZooKeeper. bin/solr star ...
- js时间戳转换时间格式
function getLocalTime(time){ if(time > 0){ var dateStr = new Date(time * 1000); var str = "& ...