捌玖网络工作室's Archiver

admin 发表于 2008-1-25 02:44

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
3Hd,D LfJ{"[ W%nA"s xMBC:|N
  [size=18px]常见的兼容问题:[/size]q/A(L;F\f
^!]U b5ni:h
  1.DOCTYPE 影响 CSS 处理
XlPBQn6g dU
H rC}*kE   2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
2A lYL7DG
,F,?7O F"~0Zf#P`   3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中su*y-I#zZ%A |u

5~ EU.aW{   4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
W LV BtF+?
,m,l@BB   5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式)v:Jgz {.]
aQH0?~%f
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
X!b1].@kO U\{ /g Z E a:S%k
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以{fJ.z\ U:S.F@
ta9D~&I0E9CMk
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。(gV3N#rX!c

@r^.|7p   9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
#MC%\CYi   注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}'F@6\&Y7I`"F9H
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
Mo6HQ/}Q-]
r8s[ SoU   10.IE5 和IE6的BOX解释不一致
,q&V(h M"Fj/p   IE5下 div{width:300px;margin:0 10px 0 10px;}
[@Q,`_^Y L   div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}.Av4vG(}|gT
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持q,@SfQ]

Q$un&p%rU9LF   11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题*AiFp]-uJe4dE*m
2z&R @J+rAqW
  [size=18px]注意事项:[/size]
@@q\4q$z `
-}:n;Gd:Qf   1、float的div一定要闭合。
F} n^6mE0T f+G hdH&]b uc W(Q
  例如:(其中floatA、floatB的属性已经设置为float:left;) yT Z$F&E X
<#div id="floatA" ></#div>N.P#f0E)C:Q0E&`_n2f
<#div id="floatB" ></#div>6k\1yNR;K;h2]G3J
<#div id="NOTfloatC" ></#div>:w%\5tBn4A#FLvr
  这里的NOTfloatC并不希望继续平移,而是希望往下排。$\/|MF'V$@'N1qm
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
+xe8Tin!B7l)G   在 <#div class="floatB"></#div>
UJ$x!l1O K:MF <#div class="NOTfloatC"></#div>'E^kUN7XJq x.S
  之间加上 <#div class="clear"></#div>
-GbScKC4|7BM   这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。C3SW6^S'n ] y*rI
  并且将clear这种样式定义为为如下即可: .clear{qx(tbf@w
clear:both;}$Vg#oc}l S
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
0Y;U6Fh&P   当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。D0} k6A5W Dlu
  例如某一个wrapper如下定义: .colwrapper{`q"X'O4J+f
overflow:hidden;#W\d/{Ll"qu
zoom:1;
;lJ*VIgFJ*xJ margin:5px auto;}
9Gz+j6I5~q6G[O0a
O\ kK!|CW   2、margin加倍的问题。
K3p`f O3Y}(@
6MFbO w$d|   设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
;F hqF5Z,~J   解决方案是在这个div里面加上display:inline;!r,I4qu?d
例如:
Zu"r4D[p+Sc <#div id="imfloat"></#div>
6@1@r7X1mA@2GG~
v1w m A0p%_"q%W &a#rc%y1\T7Q1q ^
  相应的css为7E sf9HE W2})p J(}z
#IamFloat{2w FL;j.O#[#q
float:left;
W_MVS,eQ+D'V margin:5px;/*IE下理解为10px*/6l7D~9A Iif
display:inline;/*IE下再理解为5px*/} L!pv"f7bNK
&p/m e!m r
  3、关于容器的包涵关系]-s*Q`5L#}$]H7V@

s4C(B-?4g5J   很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。$H7v"ta`
M q K1t#H\C
  4、关于高度的问题9HOr7U4TPQ;Z!C
r,m&KL C9~3K#e
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)-p$zeq)dif+SV6Vt
#_[hZs[b.e
  [color=#3366ff]5、最狠的手段 - !important; HT/GP O0J
[/color]
;QBy o1h3X6B0xO   如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
Ws5KIs;k/~ F+IA!\YY background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/ h/JUq:ab
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}by$X|w%P.y3w)v
  [color=#ff0000]值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过[/color]

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.