您的位置:首页 > Web前端

解决多浏览器的兼容问题

2017-10-28 10:29 211 查看

解决多浏览器的不兼容问题

一、浏览器不兼容会怎样?

浏览器不兼容主要表现为某些特定功能无法使用、网站错位、网站某些内容不显示、网站特效在浏览器中无效等,无论是哪种不兼容,都会给浏览者造成非常不友好的体验效果。

二、什么原因导致浏览器不兼容?

技术因素。非IE内核的浏览器都是遵守W3C标准的, 如网页代码遵循W3C标准,那么所有浏览器的不兼容性会很低。这主要在于前端开发者,在样式编写上应注意兼容问题。

浏览器因素。因为浏览器的内核是不一样的,目前国内主浏览器依旧以IE为主,所以某些标签、样式本身在浏览器中就存在不兼容,如“margin不一致”、“div居中问题”

三、处理要点

DOCTYPE 影响 CSS 处理

FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width

FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式

div 的垂直居中问题:
vertical-align:middle;
将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行

在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法
div{margin:30px!important;margin:28px;}


注意这两个margin的顺序一定不能写反,!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:
div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写
margin:XXpx!important


四、浏览器差异

ul和ol列表缩进问题消除ul、ol等列表的缩进时,样式应写成:
list-style:none;margin:0px;padding:0px;
其中margin属性对IE有效,padding属性对FireFox有效。[注经验证,在IE中,设置margin:0px可以去除列表的上下左右缩进、空白以及列表编号或圆点,设置padding对样式没有影响;在 Firefox 中,设置margin:0px仅仅可以去除上下的空白,设置padding:0px后仅仅可以去掉左右缩进,还必须设置list- style:none才

能去除列表编号或圆点。也就是说,在IE中仅仅设置margin:0px即可达到最终效果,而在Firefox中必须同时设置margin:0px、

padding:0px以及list-style:none三项才能达到最终效果。]

CSS透明问题IE:filter:
progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)
。FF:opacity:0.6。[注 最好两个都写,并将opacity属性放在下面。]

CSS圆角问题IE:ie7以下版本不支持圆角。FF
:-moz-border-radius:4px
,或者
-moz-border-radius-topleft:4px``;-moz- border- radius-topright:4px``;-moz-border-radius-bottomleft:4px``;-moz- border- radius- bottomright:4px
;。[注 圆角问题是CSS中的经典问题,建议使用JQuery框架集来设置圆角,让这些复杂的问题留给别人去想吧。不过jQuery的圆角只看到支持整个区域的圆角,没有支持边框的圆角,不过这个边框的圆角可以通过一些简单的手段来实现,下次有机会介绍下。]

cursor:hand VS cursor:pointer问题说明:firefox不支持hand,但ie支持pointer ,两者都是手形指示。解决方法:统一使用pointer。

字体大小定义不同对字体大小small的定义不同,Firefox中为13px,而IE中为16px,差别挺大。解决方法:使用指定的字体大小如14px。并列排列的多个元素(图片或者链接)的div和div之间,代码中的空格和回车在firefox中都会被忽略,而IE中却默认显示为空格(约3px)。

CSS双线凹凸边框IE:border:2px outset;。FF:-moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080;浏览器bug1、IE的双边距bug设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。

五、解决方案

不同浏览器的标签默认的外补丁和内补丁不同

问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。

碰到频率:100%

解决方案:CSS里 *{margin:0;padding:0;}

备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。

块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大

问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。 碰到频率:100% 解决方案:CSS里

{margin:0;padding:0;} 备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符来设置各个标签的内外补丁是0。

设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度

问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度 碰到频率:60%

解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。

备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。

行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug

问题症状:IE6里的间距比超过设置的间距 碰到几率:20%

解决方案:在display:block;后面加入display:inline;display:table;

备注:行内属性标签,为了设置宽高,我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后,在IE6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。

图片默认有间距

问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。 碰到几率:20%

解决方案:使用float属性为img布局

备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。(我的一个学生使用负margin,虽然能解决,但负margin本身就是容易引起浏览器兼容问题的用法,所以我禁止他们使用)

标签最低高度设置min-height不兼容

问题症状:因为min-height本身就是一个不兼容的CSS属性,所以设置min-height时不能很好的被各个浏览器兼容 碰到几率:5%

解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为

:{min-height:200px; height:auto !important; height:200px;

overflow:visible;}

备注:在B/S系统前端开时,有很多情况下我们又这种需求。当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。

透明度的兼容CSS设置

做兼容页面的方法是:每写一小段代码(布局中的一行或者一块)我们都要在不同的浏览器中看是否兼容,当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的,只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话,就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。

附:判断浏览器的类型:

var ua = navigator.userAgent.toLowerCase (); var os = new Object();

os.isFirefox = ua.indexOf (“gecko”) != -1; os.isOpera = ua.indexOf

(“opera”) != -1; os.isIE = !os.isOpera && ua.indexOf (“msie”) != -1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息