码迷,mamicode.com
首页 > 其他好文 > 详细

兼容性要点

时间:2015-06-16 14:15:27      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

兼容性处理要点 
1DOCTYPE 影响 CSS 处理 

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

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

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

5、在mozilla firefoxIE中的BOX模型解释不一致导致相差2px解决方法: 

div{margin:30px!important;margin:28px;} 

注意这两个margin的顺序一定不能写反,!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: 

div{maring:30px;margin:28px} 

重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; 

浏览器差异 
1ulol列表缩进问题 

消除ulol等列表的缩进时,样式应写成: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三项才能达到最终效果。 

2CSS透明问题 

IEfilter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60) 
FFopacity:0.6 
[最好两个都写,并将opacity属性放在下面。 

3CSS圆角问题 

IEie7以下版本不支持圆角。 
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的圆角只看到支持整个区域的圆角,没有支持边框的圆角,不过这个边框的圆角可以通过一些简单的手段来实现,下次有机会介绍下。 

4cursor:hand VS cursor:pointer 

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

5、字体大小定义不同 

对字体大小small的定义不同,Firefox中为13px,而IE中为16px,差别挺大。 

解决方法:使用指定的字体大小如14px 

并列排列的多个元素(图片或者链接)的divdiv之间,代码中的空格和回车在firefox中都会被忽略,而IE中却默认显示为空格(约3px)。 

6CSS双线凹凸边框 
IEborder: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; 

浏览器bug 
1IE的双边距bug 

设置为floatdivie下设置的margin会加倍。这是一个ie6都存在的bug 

解决方案:在这个div里面加上display:inline; 

例如: 

<#div id=”imfloat”> 

相应的css 

以下为引用的内容: 

复制代码

代码如下:


#IamFloat{ 
float:left; 
margin:5px;/*IE下理解为10px*/ 
display:inline;/*IE下再理解为5px*/ 

#IamFloat{ 
float:left; 
margin:5px;/*IE下理解为10px*/ 
display:inline;/*IE下再理解为5px*/ 


关于CSS中的问题实在太多了,甚至同样的CSS定义在不同的页面标准中的显示效果都是不一样的。一个合乎发展的建议是,页面采用标准XHTML标准编写,较少使用tableCSS定义尽量依照标准DOM,同时兼顾IEFirefoxOpera等主流浏览器。很多情况下,FF和 OperaCSS解释标准更贴近CSS标准,也更具有规范性。 

2IE选择符空格BUG 
今天在给博客的段落样式设置首字符样式的时候发现,原来一个空格也可以使样式失效。 

请看以下代码: 

复制代码

代码如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="//www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<style type="text/css"> 
<!-- 
p{font-size:12px;} 
p:first-letter{font-size:300%} 
--> 
</style> 
</head> 
<body> 


<p>对于世界而言,你是一个人;但是对于某个人,你是他的整个世界。纵然伤心,也不要愁眉不展,因为你不知是谁会爱上你的笑容。</p> 
</body> 
</html> 
[/code] 

复制代码

代码如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="//www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<style type="text/css"> 
<!-- 
p{font-size:12px;} 
p:first-letter{font-size:300%} 
--> 
</style> 
</head> 
<body> 
<p>对于世界而言,你是一个人;但是对于某个人,你是他的整个世界。纵然伤心,也不要愁眉不展,因为你不知是谁会爱上你的笑容。</p> 
</body> 
</html> 


这段代码对<p>的首字符样式定义在IE6上看是没有效果的(IE7没测试),而在p:first-letter{font-size:300%}加上空格,也就是p:first-letter {font-size:300%}后,显示就正常了。但是同样的代码,在FireFox下看是正常的。按道理说,p:first-letter{font-size:300%}的写法是没错的。那么问题出在哪里呢?答案是伪类中的连字符”-”IE有个BUG,在处理伪类时,如果伪类的名称中带有连字符”-”,伪类名称后面就得跟一个空格,不然样式的定义就无效。而在FF中,加不加空格都可以正常处理。

 

 

 

 

 

 

 

CSS对浏览器器的兼容性具有很高的价值,通常情况下IEFirefox存在很大的解析差异,这里介绍一下兼容要点。 
  常见兼容问题: 
  1.DOCTYPE 影响 CSS 处理 
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 
  3.FF: body 设置 text-align , div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 
  4.FF: 设置 padding , div 会增加 height 和 width, 但 IE 不会故需要用 !important 多设一个 height 和 width 
  5.FF: 支持 !important, IE 则忽略可用 !important 为 FF 特别设置样式 
  6.div 的垂直居中问题其实有多种方式的,可以看这里 
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以 
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 和 menubar 设置高度是为了避免底边显示错位若不设 height, 可以在 menubar 中插入一个空格。 
  9.mozilla firefoxIE中的BOX模型解释不一致导致相差2px解决方法: 
div{margin:30px!important;margin:28px;} 
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: 
div{maring:30px;margin:28px} 
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; 
  10.IE5 IE6BOX解释不一致 
  IE5 
div{width:300px;margin:0 10px 0 10px;} 
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px} 
  关于这个/**/是什么我也不太明白,只知道IE5firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:) 
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 
ul{margin:0;padding:0;} 
  就能解决大部分问题 


  注意事项: 
  1floatdiv一定要闭合。 
  例如:(其中floatAfloatB的属性已经设置为float:left;) 
<#div id="floatA" ></#div> 
<#div id="floatB" ></#div> 
<#div id="NOTfloatC" ></#div> 
  这里的NOTfloatC并不希望继续平移,而是希望往下排。 
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。 
  在 
<#div class="floatB"></#div> 
<#div class="NOTfloatC"></#div> 
  之间加上 
<#div class="clear"></#div> 
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。 
  并且将clear这种样式定义为为如下即可: 
.clear{ 
clear:both;} 
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden; 
  当包含floatbox的时候,高度自动适应在IE下无效,这时候应该触发IElayout私有属性(万恶的IE啊!)zoom:1;可以做到,这样就达到了兼容。 
  例如某一个wrapper如下定义: 
.colwrapper{ 
overflow:hidden; 
zoom:1; 
margin:5px auto;} 
  2margin加倍的问题。 
  设置为floatdivie下设置的margin会加倍。这是一个ie6都存在的bug 
  解决方案是在这个div里面加上display:inline; 
例如: 
<#div id="imfloat"></#div> 
  相应的css 
#IamFloat{ 
float:left; 
margin:5px;/*IE下理解为10px*/ 
display:inline;/*IE下再理解为5px*/} 
  3、关于容器的包涵关系 
  很多时候,尤其是容器内有平行布局,例如两、三个floatdiv时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要量取像素级的精度。 
  4、关于高度的问题 
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。 
  5、最狠的手段 - !important; 
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 
.tabd1{ 
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/ 
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */} 
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

兼容性要点

标签:

原文地址:http://www.cnblogs.com/phunsukewonder/p/4580429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!