PC常见浏览器兼容性问题

512 阅读3分钟

由于各大主流浏览器内核不一致,常常会有一些兼容性问题需要解决,下面从css和js分别来列一下,欢迎有补充的可以积极补充~

一、咱们的css呀

1、css3属性已经出现了很久了,但是各大浏览器还是没有完全统一属性的定义,因此需要通过IDE,前缀补充或者打包时使用相关css loader来实现兼容。

2、透明属性opacity在ie浏览器9以下需要使用 filter来实现兼容,opacity: 0.5;filter: alpha(opacity = 50);filter: progid:DXImageTransform.Microsoft.Alpha(style = 0, opacity = 50);

3、ul和ol列表缩进问题,在IE中仅仅设置margin:0px即可达到最终效果,而在Firefox中必须同时设置margin:0px、 padding:0px以及list-style:none三项才能达到最终效果。

4、IE不认得min-这个定义,但实际上它把正常的width和height当作有min的情况来使。这样问题就大了,如果只用宽度和高度,正常的浏览器里这两个值就不会变,如果只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。可以这样设置最小高度为200px的容器样式,min-height:200px; height:auto !important; height:200px; overflow:visible;

5、DIV浮动IE6产生3象素的bug,紧邻着的DIV右边会有margin-left为3px 的边距,可将左边元素的 margin-right 设置为3px,或者将浮动元素设置为display:inline;如果想要设置宽高则设置为display:table

6、对齐文本与文本输入框,将文本和文本框vertical-align都设置为middle时在IE下不适应。

7、内容超过长度后以省略号显示,width:200px; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow: hidden;在firefox 浏览器中不适合。

8、ie浏览器设置滚动条颜色是需要设置html元素,其他浏览器是body。

9、css的hack问题:主要针对IE的不同版本,不同的浏览器的写法不同 IE的条件注释hack: <!--[if IE 6]>此处内容只有IE6.0可见<![endif]--> <!--[if IE 7]>此处内容只有IE7.0可见<![endif]-->这样

10、不同浏览器的标签默认的外补丁(margin)和内补丁(padding)不同,css里增加通配符*{margin:0;padding:0}

二、咱们的 js呀

1、浏览器事件定义和销毁的方式在ie和其他浏览器中会有区别,一般会写一个适配器去重新定义实现事件监听和解绑,一般浏览器会addEventListener和removeEventListener方法,而ie浏览器用到 attachEvent和detachEvent方法,事件回调传入的event对象需要拿到事件触发对象target活着srcElement(ie)。

2、new Date() 函数需要传入‘2020/0717’这样的字符串才会兼容。

3、得到scrollTop需要写document.documentElement.scrollTop||document.body.scrollTop

4、ajax对象一般浏览器是xmlHtppRequest,而ie浏览器是activeXObject

5、在ie9以下,不能操作tr的innerHTML

6、FireFox中类似obj.style.height = imgObj.height的语句无效。

7、innerText在IE中能正常工作,但在FireFox中却不行,需用textContent。

解决方法:
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById('element').innerText = "my text";
} else{
document.getElementById('element').textContent = "my text";
}

三、再说说html

基本上无太多问题,主要是ie9以下使用html5会有问题,可以用hack来解决,如下:

<!--[if lt IE 9]>
<script type="text/javascript" src="js/html5shiv.js"></script>
<![endif]-->