去除IE6的png背景色,DD_belatedPNG的实现粗略分析

DD_belatedPNG.js是用来处理ie6中png透明背景的一个插件。ie6中处理png的插件很多,实现方式也是各式各样,不过这次不讨论哪个是最佳方案,只是单纯的分析一下DD_belatedPNG.js ( 以下简称DD ) 的实现过程。

DD是通过VML (Vector Markup Language) 实现的, 通过在被作用的元素前面插入两个shape来模拟具体的效果。

DD会创建两个shape并插入到被作用的元素前面,因为z-index值相同时,后面的元素将覆盖在前面的元素之上,所以前面的两个shape都会继承被作用元素的z-index。模拟background-image的shape将会在模拟background-color的shape之上。这样就构成了整个结构。

DD作用在img标签时,隐藏掉img标签,显示后面的shape,shape中fill的src地址为当前img标签的src地址,而大小位置也是继承了当前img标签。

DD作用在非img标签时,需要模拟css中background的各个子属性,image就是当前标签的image:url(../images/png.png),截取括号内的值填充到image的shape中,color则填充到color的shape中,接下来是repeat了,这个稍微有点复杂,首先要确定方向,如果是repeat的话,可以不做任何处理,但如果是no-repeat或repeat-x,repeat-y就会稍微复杂一点,要通过计算获取vml的特有css特性CLIP的值,如style=”CLIP:rect(1px 501px 501px 1px);” 来剪裁显示内容,no-repeat只显示一个图片的大小,而repeat-x则显示元素的宽图片的高,repeat-y显示图片的宽元素的高。下面是position属性,读取的是background-position,然后为image的shape中fill的position属性赋值。

DD的最大的优点就是可以实现背景的平铺,使用的时候也非常方便,只需要DD_belatedPNG.fix(“.png”),参数中加入需要作用的标签的css选择器就可以了。

DD是通过vml实现的,如果页面中需要处理的png数量太多的话,可能会造成浏览器占cpu100%的情况;被作用的标签会被触发layout,作为行内元素的话,可能会出现一些问题;有时候会出现错位的问题,特别是使用sprite的时候。这些问题还有待研究。

使用实例:

<!--[if IE 6]>
    <script language="JavaScript" type="text/javascript" src="js/DD_belatedPNG.js"></script>
    <script language="JavaScript" type="text/javascript">
        DD_belatedPNG.fix(".png");
    </script>
<![endif]-->
时间: 2024-10-21 20:26:31

去除IE6的png背景色,DD_belatedPNG的实现粗略分析的相关文章

Word 2010 去除文字或段落背景色

在复制网页文本到Word时,有时会带有网页上的背景颜色.下面采用两种方法解决这种问题,可根据不同需要进行选择. 方法一:清除样式 此种方法适用于只需要网页文字,而不想要网页任何样式信息,如字体大小,段落格式等等. 具体步骤如下: 1.首先选择含有背景颜色的所有文字: 2.然后,选择 "开始",单击 "更改样式" 下面的右下箭头:如下图所示 3.这时弹出显示"样式"窗口,单击"全部清除"即可,如下所示 最终的效果如下所示: 方法

去除IE6浏览器下获得焦点的元素的虚线框的两个小办法

[1]onfocus = "this.blur()"//得到焦点时,失去焦点 e.g. <a href="#" onfocus = "this.blur()">test</a> [2]使用HTML标签的特性 hidefocus e.g. <a href="#" hidefocus>test</a> [注意]由于使元素失去焦点后,该元素将无法通过Tab键选中,所以不到万不得已,不要

给input元素添加float. 去除IE6 下input的空隙

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <style> 7 .box{ 8 width: 200px; 9 border: 1px solid #000000; 10 background-color: red; 11 } 12 .box input{ 13 border: 0; 1

针对IE6,IE7,IE8,IE9,FF等不同浏览器的CSS写法

首先我们介绍一下HACK原理,就是不同浏览器对字符的识别不同 在 CSS中常用特殊字符识别表: (1)*: IE6+IE7都能识别*,而标准浏览器FF+IE8是不能识别*的; (2)!important: 除IE6不能识别 !important外, FF+IE8+IE7都能识别!important ; (3)_ : 除IE6支持_ 外, FF+IE8+IE7都不支持_; (4)\9:所有IE浏览器都识别(IE6.IE7.IE8.IE9) 示例: (1)区别FF(IE8)与IE6 IE7 back

IE6+IE7+IE8+IE9+FF兼容性调试

HACK原理:不同浏览器对各中字符的识别不同 (读完文章你会发现,FF和IE8对以下字符的识别能力完全相同) 在 CSS中常用特殊字符识别表: (1)*:  IE6+IE7都能识别*,而标准浏览器FF+IE8是不能识别*的; (2)!important: 除IE6不能识别 !important外,  FF+IE8+IE7都能识别!important ; (3)_ : 除IE6支持_ 外,  FF+IE8+IE7都不支持_; (4)9:所有IE浏览器都识别(IE6.IE7.IE8.IE9) 示例:

css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css

@charset "utf-8"; /*! * @名称:base.css * @功能:1.重设浏览器默认样式 * 2.设置通用原子类 */ /* 防止用户自定义背景颜色对网页的影响,添加让用户可以自定义字体 */ html { background:white; color:black; } /* 内外边距通常让各个浏览器样式的表现位置不同 */ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,le

[原创]ie6,7中td和img之间有间隙

情形描述 开发工具:VS2010: 浏览器版本:IE6以上,火狐,谷歌: 页面布局设计:Table+Img布局: 项目预览问题:火狐,谷歌,IE8以上未出现问题,IE6,IE7图片之间有间隙. 分析原因 1.td,img之间margin,padding设置不正确?    显然不是,如果设置了margin和padding其他浏览器应该也出现间隙. 2.前台页面顶部没有<!DOCTYPE html >之类的标签文档声明?    通过检查,已经设置了该文档标签. 3.是不是IE6,IE7对TD和IM

CSS兼容处理的相关案例

双倍显示:这个BUG出现在IE6以及下浏览器,当解析浮动元素时,会错误地把浮向边边界加倍显示. 修复问题方式: display:inline; 代码示例: /*[IE6及更低版本浏览器双倍浮向 hack]*/ div { margin:10px; float:left; width:100px; height :100px; display:inline;/*屏弊IE6及更低版本浏览器双倍浮向 hack*/ } 具体详解: 因浮动元素自动以块状显示,将元素设成display:inline,在这里

(转)我的 css 框架——base.css

原文链接:http://www.cnblogs.com/yjzhu/archive/2012/11/05/2755095.html@charset "utf-8"; /*! * @名称:base.css * @功能:1.重设浏览器默认样式 * 2.设置通用原子类 */ /* 防止用户自定义背景颜色对网页的影响,添加让用户可以自定义字体 */ html { background:white; color:black; } /* 内外边距通常让各个浏览器样式的表现位置不同 */ body,