CSS

2013-04-23 11:48

常见浏览器兼容性问题与解决方案

IE低版本的一般兼容处理:

  1. 其他浏览器开发测试完成之后再针对ie6修改。
  2. 只维持IE6下最低程度的“正确”:不丢字、排版不出大的错位、重要功能不丢失。
  3. 不追求样式一致。小的尺寸错误不管,样式不好IE6兼容的就退化处理。
  4. IE6下响应式也牺牲掉,只保证浏览器宽度够宽的时候说得过去就行。甚至可以把响应式的布局,IE6下通通退化成传统的px定宽布局。
  5. 主要使用IE6条件注释和hack。hack手段主要是双下划线。
  6. 表态抵制IE6并教育用户升级。我选择在网页页脚区的上边,插入一段黄底红字的提示。这样不影响网页正文区,又不妨害自己表态。
  7. 根据站点受众不同,像CSDN等站点可以直接拒绝IE6来访问,则以上的IE6兼容都不做,并在网页的第一屏幕就提示。这里的提示不要吝惜嘲讽性的语言。例如:“如果您不是程序员中的垃圾货色,就不应该再使用IE6上网。如果您在公共场合,请用以下链接下载一个便携版浏览器(解压即用):Firefox, Chrome”。
  8. js方面,如果要IE6兼容,基本靠使用jQuery 1.x解决,简单省事。我一直用1.8.3版的jQuery。

============================================================================
浏览器兼容问题一:
不同浏览器的标签默认的margin和padding不同

 
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
 
碰到频率:100%
 
解决方案:
*{margin:0;padding:0;}
 
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。
 

浏览器兼容问题二:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大
 
问题症状:常见症状是IE6中后面的一块被顶到下一行
 
碰到频率:90%(稍微复杂点的页面都会碰到,float布局最常见的浏览器兼容问题)
 
解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性
 
备注:我们最常用的就是div+CSS布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。
 

浏览器兼容问题三:设置较小高度标签(一般小于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;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。


浏览器兼容问题七:各种特殊样式的兼容,比如透明度、圆角、阴影等。特殊样式每个浏览器的代码区别很大,所以,只能现查资料通过给不同浏览器写不同的代码来解决。

JS解决IE6下png透明失效的问题

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

添加新评论