IE兼容性

常见hack的几种打法

第一种:加前缀

IE6 专用 _height: 100px;
IE7 专用 *+height: 100px;
IE6,IE7共用 *height: 100px;
IE6/IE7/IE8 通用 .color {color: #0FC\9};
IE8 专用.color {color: #0FC\0};
IE7+、FF 共用 height: 100px !important;

第二种:使用条件注释语句

推荐写法:

<!--[if lt IE 7]> <html class="ie ie6" lang="zh"> <![endif]--> <!--[if IE 7]> <html class="ie ie7" lang="zh"> <![endif]--> <!--[if IE 8]> <html class="ie ie8" lang="zh"> <![endif]--> <!--[if IE 9]> <html class="ie ie9" lang="zh"> <![endif]--> <!--[if gt IE 9]><!--> <html lang="zh" id="gray-scroll"> <!--<![endif]-->

另一种写法:

<!--[if IE 6]> <link rel="stylesheet" type="text/css" href="style_ie6.css" /> <![endif]-->

常见的bug汇总

1、png图片在IE6下出现透明或背景变灰的bug

分析:随处可见,遇到时就想好策略。 解决方法: 1、使用滤镜,语法如下

.image-style {
    background-image: none;
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="filename.png", sizingMethod="scale");
}

注意:使用滤镜需要性能损耗。 2、给IE6单独制作一张.gif图片,打上hack

.image-style{ 
    background:transparent url("filename.png") no-repeat scroll 0 0;
    _background-image:url("filename.gif");
}

这种方法只需要在切图时多存储一份.gif格式的图片,一般采用这种方法。

2、position:absolute定位在IE6下存在left和bottom相对最外层视窗(body)定位的bug

分析: 由于在IE6下,相对定位的元素没有获得IE内部的haslayout属性,因此不创建新的定位上下文,所以绝对定位的元素相对于视口进行定位。 解决方法: 1、设置height:1%;//小的高度不会对实际高度造成影响 2、相对定位的祖先元素设置过高度和宽度。 3、相对定位的祖先元素设置_zoom:1,用于触发元素的layout属性。

3、IE6下border不显示的bug

分析:对一个div定义border,但是却不显示。 解决方法:定义宽度;定义高度;清除浮动。

4、在 W3C 规范中 position 是可以使用在任何元素上的,但table元素的 position:relative 却有例外

分析:经测试,在浏览器(IE 除外)中给 table 定义 position:relative 属性是无效的。如果的确需要在表格中使用该属性,建议在单元格中嵌套一个 div 元素,再在其上设置 position:relative 属性来模拟。

5、IE6下overflow:hidden失效bug

分析:在开发中经常使用overflow:hidden来清除浮动,也就是在浮动元素的父元素中使用这个属性,就相当于添加了一个clear元素。但是,这在IE6下不给力。 解决方法:只要在父元素中给定一个宽度就可解决这个bug;

6、IE6下的双空白边浮动bug

分析:这是一个常见的出名BUG,给IE6下的浮动元素定义margin-left或者margin-right,实际上是数值的两倍。 解决方法:把这个浮动元素设置为display:inline;

7、IE6下float元素如果没有定义宽度,在浮动时它会自动占满一行的bug

分析:即使对这个浮动元素内部的元素设置了宽度,也是无效的 解决方法:一般用于布局的浮动元素不会要求横向可自由拓展的,那么可以通过设置宽度来解决这个bug.

8、IE6下img元素底部留白的bug

分析:代码结构如下

<div>
<img src="filename" alt="图片" />
</div>

解决方法: 把代码结构改成如下:

<div><img src="filename" alt="图片" /></div>;

并设置img元素的display:block(img元素默认是一个display:inline的元素)

9、IE6 7下的浮动元素的父元素在拖动滚动条时出现的边框缺失bug

解决方法:设置zoom,使元素获得布局。

10、 IE(6 7 8) 的 z-index bug###

分析:看代码 xhtml:

<div id="container">
<div id="box1">这个box应该在上面</div>
</div>
<div id="box2">
这个box应该在下面,IE浏览器会对定位元素产生一个新的stacking
context ,甚至当元素 z-index的为“auto”。
</div>
css:
container { position: relative; }

box1 { position: absolute; top: 100px; left: 210px; width: 200px; height: 200px; background-color: yellow; z-index: 20; }

box2 { position: absolute; top: 50px; left: 160px; width: 200px; height: 200px; background-color: green; z-index: 10; }

结果:ff/chrome显示为box1在box2上,而IE确实box2显示在了box1上 原因:IE浏览器会对定位的元素产生一个新的stacking context,并且从z-index:0开始

11、关于IE8的一些资料

IE8 – css-discuss IE8 beta 1 – first tests Internet Explorer 8

12、IE6下的重复字符bug

分析:如下图所示 IE6下的重复字符bug

出现这个BUG的“机遇“其实并不大,要满足以下一个或者多个条件: 1.父元素的内部有多个浮动元素。 2. 最后一个浮动元素前有隐藏元素:包括html注释和display:none的元素 3.子元素的宽度和父元素相同,父元素的宽度减去子元素宽度小于3px 最终得出的结论是:溢出文字的字数=注释的条数 *2-1 这个变态BUG的最早文献是出现在2004年,这里可见。 解决方法: 1.把浮动的子元素加上display:inline;属性(推荐) 2.去掉注释和所有隐藏元素(缺点:特殊情况下不一定可以删除) 3. 把浮动的子元素加上margin-right:-3px;属性(缺点:要加IE6的hack,也算是好方法) 4.在隐藏的DIV外嵌套一个DIV(缺点:增加的结果复杂性) 详解:http://www.cnblogs.com/javashi/archive/2010/05/08/1730504.html

13、IE6下的空div bug

分析:通常在实现可拓展的圆角框时,习惯在头尾使用两个空元素来放置背景图片如<div class="hd"></div>,但是这个空元素在IE6下会莫名的产生一个高度,为原先定义的2倍。代码如下:

<div class="hd"></div><br><div class="bd">content</div><br><div class="ft"></div><br>样式:<br> .hd{background:url("filename") transparent ...; height:5px;}

解决方法:为这个空元素设定line-height:0;font-size:1px;即可解决这个bug。

14、IE6下对position:fixed不支持的bug

分析:问题的原因是IE6下的fixed元素绝对定位位置是针对html元素的,而滚动条则是针对body元素的 解决方法:

body{background-image:("xx.gif");}/一张不存在的图片/
.fixed{_postion:absolute;expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight))}//底部
expression(eval(document.documentElement.scrollTop));/头部/
expression(eval(document.documentElement.clientHeight/2+document.documentElement.scrollTop-80));/右侧/

15、IE6下input/textarea/select元素继承父元素的水平margin的bug

分析:http://haslayout.net/css/Form-Control-Double-Margin-Bug 解决方法:这个bug在开发中是经常遇到的,解决方法就是在input或者textarea元素上使用负的margin,使元素重新布局。

16、IE6不支持min-height/max-height/min-width/max-width的bug

分析:无 解决方法:根据IE6的特性模拟出来

min-height: x px;/需要的最小高度/
height:auto!important;
height: x px

17、IE6下position:relative的bug

分析:在IE6下父层(或者上层)设置为position:relative且没有写宽度,而这个元素又被一个带有滚动条overflow:auto/scroll属性包含的时候,它将会表现出absulute,并且在鼠标移上去时,会在整个屏幕上滑动; 解决方法: 1、把父层(或者更上层)的relative删掉,但有时候这个relative是必须的,那就只能用第二种方法了; 2、不删除relative,但给这个元素设定一个宽度,可以是100%。

18、IE6下样式不表现

分析:通常一个页面需要载入2-3个样式文件,但其中有某个样式文件里的样式完全不表现,你或许怀疑这个文件没有被加载,这个时候打开IE Debug看文件的传输情况,很清晰的看到文件正常加载了,纳闷吧!后来找到了 原因,主要有两个: 1、这个文件的编码和页面定义的character编码不一致; 2、不正确的注释(这个也有可能是页面编码不正确,而注释是中文导致的) 解决方法:检查页面编码;去掉注释;

19、IE6浮动元素与非浮动元素间隔的3pxbug

分析:在IE下,一个浮动元素与一个非浮动元素相邻时候,中间会莫名的出现一个3px的间隔。 解决方法:1、由于明确知道是3px,所以可以使用负的margin,但是由于IE下不同的盒模式,又会导致宽度上的不同,浮动元素的宽度如果超出了父元素的宽度在IE下是会有bug的,所以不建议使用这种方法。 2、不让浮动元素和非浮动元素相邻,或者把非浮动元素也设置为浮动元素。

20、IE6下img元素底部出现5px的空白间隙bug

分析: 代码结构如下:

<li><a href="#"><img src="xxx.png" alt="xxx"/></a></li>

在ie6下会出现5px的空白。 解决方法: 1、

ul li{display:block;font-size:0;}
img{vertical-align:bottom;}

2、

img{_margin-bottom:-5px;}

21、IE下透明度无效bug

分析:在IE的所有版本中,父元素设置了透明度,而子元素如果有position:relative/absolute时,子元素无法继承父元素的透明度。 找了一些资料:http://younglab.blog.51cto.com/416652/431363 解决方法:除了资料中使用的方法(触发layout),还有个土方法,那就是在透明度比较小的区域中,使用具有透明度的图片和字体模糊。

22、IE下overflow:auto/scroll不起作用的bug

分析:在IE下overflow不起作用,但是在火狐下是正常显示的,IE下overflow如同虚设,内容是表现出来了,但是确实在区域的下面显示,滚动条也无法使用。 解决方法:对设置了overflow的元素设定高度和宽度(一般使用滚动条的都会设置这些属性),然后给这个元素进行position定位,relative或者absolute都是可以的

23、IE6 7 8下元素重叠bug

分析:页面操作过程中对一组li元素做remove()或者hide()时,被移除的li的下一个兄弟元素会往下偏移,从而发生元素重叠。 解决方法:js中对这个li元素的父元素加上toggleClass("ie-hack");//ie-hack为不存在的class。 原因不明。

24、IE6/7/8下直接对input输入框使用背景图片,当输入值冲出背景图片宽度时,背景图片会随字符滑动

解决方法:在input框外加一个div,在这个div上设置背景

25、去掉a链接难看外框的方法:

IE下设置hideFocus=true,其他浏览器设置:outline:none 即

<a href="..." hideFocus="true" title=".."/>
a{outline:none}

还有一种是用expression的方法,但是耗性能,原因是每秒钟执行了很多次。不推荐使用

a{blr:expression(this.onFocus=this.blue())}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值