兼容性问题一直都是个头疼的问题,以至于很多接触过前端编程大部分人都会说页面太难调了。这篇文章是对常见兼容性问题的记录,有个问题是肯定不全,因为太多了,只是总结常见的兼容性问题
持续更新中。。。
CSS
|
|
怪异模式会出现不可预料的错误,所以在文档最上面使用<!DOCTYPE html>;
浏览器默认的margin和padding不同,使用reset解决,但是不要这样设置:* {margin:0; padding:0 },因为效率;
chrome中文界面下默认会将小于12px的文本强制按12px显示,使用-webkit-text-size-adjust:none;已经不能解决问题了,应该这样设置
|
|
超链接访问后hover样式就不显示了,被点击访问后的超链接不再具有hover和active;按照L-V-H-A:a:link{} a:visited{} a:hover{} a:active{} 顺序设置可解决;
同一BFC相邻box的margin会折叠:详细信息请猛戳这里
png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理;
IE6双边距:block+float+margin就会出现此bug,增加样式_display:inline(或block); ie6的常见问题还有猛戳着里
text-align:center的子元素在非IE下不居中
|
|
|
|
不能自动展开包含框:触发Layout来解决height:1%触法haslayout有一定风险,所以应使用height:0;或height:1px,但是overflow:hidden与height不能同时设置(同时设置height的值就回对元素的真实高度产生影响),此时应使用zoom:1或者display:inline-block来触法haslayout
列表布局问题
|
|
定义列表宽度为60%,那么ul元素就拥有了layout特性,如果在ie浏览,会发现列表的项目符号消失了。
解决如下:
|
|
- 在IE6及以下版本浏览器中,当列表项元素li中包含有块状现实的超链接元素时,列表元素之间的空格将不会被忽略,而且会额外增加一行;
|
|
在l3和l4下面都会多出一个空行;
解决如下:
|
|
- 定位布局问题
由于相对定位不能触法Layout特性,所以在使用定位时会出现莫名其妙的错误,如定位对象丢失、定位元素错位等,所以建议相对定位元素声名zoom:1
IE6当在浮动元素之间增加HTML注释时下方会出现多余字符;
IE浏览器出现背景与内容分离时,考虑触发Layout特性来解决
JS
更多关于dom操作的兼容性请参考《js高级程序设计(第三版)》第10章
safari9.0.3中,Date(‘2015-10-10’)返回
Invalid Date
,因为它不认识’-‘,可以换成Date(‘2015/10/10’);以前有篇文章:跨浏览器的EventUtil&&StyleUtil
ie可以使用常规属性方法获取自定义属性(elment.customProp),也可以使用getAttribute(“customProp”)获取,FireFox只能使用getAttribute();
ie的event对象有x,y(看这里)属性,没有pageX,pageY;Fireforx下有pageX,pageY,没有x,y;
IE8前event没有pageX,pageY,解决如下
|
|
cloneNode()方法在IE下会复制事件处理程序(非IE下不会),所以在复制之前最好先移除事件处理程序;
在IE中可以给createElement()传入完整的元素标签,也可以包含属性:
|
|
attributes属性,在IE7及更早版本会返回HTML元素中所有可能的特性,包括没有指定的特性。可以通过attribute的specified属性过滤,所有未设置过的特性该属性都是false,而其它浏览器不会为这类特性生成特性节点。
下面代码在IE解析下ul会有3个字节点(3个li),而在其他浏览器会有7个元素(3个li和4个li元素之间的文本节点):
|
|
- IE不允许访问script和style的子节点,所以动态创建script和style应这样处理:
|
|
|
|
- style,getComputedStyle,currentStyle,defaultView的区别
获取元素CSS值之getComputedStyle方法熟悉
有几点需要注意:
1、虽然currentStyle与getComputedStyle都是获取计算后的属性,但是键名还是有不少差异,比如“浮动”对应的键名可能是
cssFloat与styleFloat,获取值的时候应该这样
|
|
2、但是ie9之前又不支持getPropertyValue,在老的IE浏览器(包括最新的),getAttribute方法提供了与getPropertyValue方法类似的功能
|
|
- IE下是支持firstChild,lastChild,nextSibling,previousSibling,
但是在FF下,由于它会把标签之间的空格当成文本节点,所以为了准确地找到相应的元素,应该使用
:firstElementChild,lastElementChild,nextElementSibling,
previousElementSibling
参考
- Block formatting context:介绍块级格式化上下文;
- 前端精选文摘:BFC 神奇背后的原理:介绍了什么是BFC,及BFC的应用;
- 前端知识点:介绍了各种需要了解的点;
- Definition of “containingblock”:包含快的定义
- 前端精选文摘:那些年我们一起清除过的浮动:内容包括如何触发BFC和hasLayout
- IE6中的常见BUG与相应的解决办法
- 获取元素CSS值之getComputedStyle方法熟悉
- 兼容的firstChild,lastChild,nextSibling,previousSibling写法(转)