1. 文字本身的大小不兼容。同样是font-size:14px的宋体文字,在ie、ff、opera下占的空间不一样。解决方案:给文字设定 line-height 。确保所有文字都有默认的line-height 值。这点很重要,在高度上我们不能容忍1px 的差异。
2.不要轻易给容器定义height。ff下容器高度限定,即容器定义了height之后,容器边框的外形就确定了,不会被内容撑大,而ie下是会被内容撑大,高度限定失效。
3.横向上的撑破容器问题。如果float 容器未定义宽度,ff下内容会尽可能撑开容器宽度,ie下则会优先考虑内容折行。故,内容可能撑破的浮动容器需要定义width。
小实验:有兴趣大家可以看看这段实验。在不同浏览器下分别测试以下各项代码。
a.<div style=”border:1px solidred;height:10px”></div> b. <div style=”border:1px solidred;width:10px”></div>
c. <div style=”border:1px solidred;float:left”></div> d. <div style=”border:1px solidred;overflow:hidden”></div>
上面的代码在不同浏览器中是不一样的,实验起源于对小height 值div 的运用,<div style=”height:10px;overflow:hidden”></div>,小height 值要配合overflow:hidden一起使用。实验好玩而已,想说明的是,浏览器对容器的边界解释是大不相同的,容器内容的影响结果各不相同。
4.double-margin bug。ie6下给浮动容器定义margin-left 或者margin-right 实际效果是数值的2倍。解决方案,给浮动容器定义display:inline。
5.mirror margin bug。当外层元素内有float元素时,外层元素如定义margin-top:14px,将自动生成margin-bottom:14px。 padding也会出现类似问题,都是ie6下的特产,该类bug 出现的情况较为复杂,远不只这一种出现条件,还没系统整理。解决方案:外层元素设定border 或 设定float。
引申:ff 和ie 下对容器的margin-bottom,padding-bottom的解释有时不一致,似乎与之相关。
6. 吞吃现象。还是ie6,上下两个div,上面的div设置背景,却发现下面没有设置背景的div 也有了背景,这就是吞吃现象。对应上面的背景吞吃现象,还有滚动下边框缺失的现象。解决方案:使用zoom:1。
7.注释也能产生bug。解决方案:用“<!–[if !IE]> picRotatestart <![endif]–>”方法写注释。
8.img 下的留白。
<div>
<img src=”" mce_src=”" />
</div>
把div的border打开,你发现图片底部不是紧贴着容器底部的,是img后面的空白字符造成,要消除必须这样写
<div>
<img src=”" mce_src=”"/></div>
后面两个标签要紧挨着。ie7下这个bug 依然存在。解决方案:给img设定 display:block。
9. 失去line-height。<div style=”line-height:20px”><img/>文字</div>,很遗憾,在ie6下单行文字 line-height 效果消失了。。。,原因是<img />这个inline-block元素和inline元素写在一起了。解决方案:让img 和文字都 float起来。
引申:大家知道img 的align 有 text-top,middle,absmiddle啊什么的,你可以尝试去调整img 和文字让他们在ie和ff下能一致,你会发现怎么调都不会让你满意。索性让img和文字都 float起来,用margin 调整。
10.clear层应该单独使用。也许你为了节省代码把clear属性直接放到下面的一个内容层,这样有问题,不仅仅是ff和op下失去margin效果,ie下某些margin值也会失效
<divstyle=”background:red;float:left;”>dd</div>
<divstyle=”clear:both;margin-top:18px;background:green”>ff</div>
11.ie 下overflow:hidden对其下的绝对层position:absolute或者相对层 position:relative无效。解决方案:给overflow:hidden加position:relative或者position:absolute。另,ie6支持overflow-x或者overflow-y的特性,ie7、ff不支持。
12.float元素如果作为布局用或复杂的容器,都要给个宽度的。ie6下float元素如没定义宽度,内部如有div定义了height或zoom:1,这个div就会占满一整行,即使你给了宽度。
13.ie6下绝对定位的div下包含相对定位的div,如果给内层相对定位的div高度height具体值,内层相对层将具有100%的width值,外层绝对层将被撑大。解决方案给内层相对层float属性。
14.width:100%这个东西在ie里用很方便,会向上逐层搜索width值,忽视浮动层的影响,ff下搜索至浮动层结束,如此,只能给中间的所有浮动层加width:100%才行,累啊。opera这点倒学乖了跟了ie。
15.ul中的li有样式“float: left”,li如果比较多而宽度确实不够,ie6下li中的内容会自动换行,而不是li换行。解决方法:给li加样式“white-space: nowrap;”
16.页面中某DIV使用了position:relative,结合top=-25px等元素定位。在FF和IE7下表现正常,但是在IE6中该DIV会随鼠标滚动而滚动。解决方法a:为包含块元素添加属性position:relative 。解决方法b:把该元素的position:relative属性去掉,使用默认的static定位,并通过margin-top等属性实现类似的效果。
17.修正重复文字bug
复杂的布局可以触发在浮动元素的最后一些字符可能出现在出现在清除元素下面的bug。这里有几个解决方法,有些是完美的,但是做一些反复试验也是必须的:
.确保所有的元素使用”display:inline;”
.在最后一个元素上使用一个”margin-right:-3px;”
.为浮动元素的最后一个条目使用一个条件注释,比如:<!--[if !IE]>Put your commentary inhere...<![endif]-->
.在容器的最后元素使用一个空的div(它也有必要设置宽度为90%或类似宽度。
18. 在可点击和悬停的元素上只使用<a>标签
IE6只认识对a标签的CSS hover效果。
你也可以在基于JavaScript的组件内使用他们来控制,以使他们保持键盘的可操作性。是有一些可替代的选择,但是<a>标签比其它方案更可靠。
19. 使用!important 或高级选择器来区分IE6
20.IE6中select穿透了overlay中的div。有多种解决办法;
a. 修改select,不用标准select,而是自己用其他html元素模拟
b. 修改你的div,使用iframe。
c. 在div被显示的时候或者到达select所在位置时隐藏select
d. 在div中或div的同一坐标上,用相同尺寸的iframe先遮挡一下,然后在iframe上显示div的内容。
e.Object对象的优先度较高,可以挡住select框
21.让IE6支持PNG格式的图片。baidu去吧,不想写了!
fuck,ie6!
企业级应用可以不用管ie6的兼容性问题,直接让企业用户升级浏览器就是,面向大众的web开发还得继续兼容该死的ie6!!!
这里的20多条还是不完全的,其他的以后有时间再写吧。