捌玖网络工作室's Archiver

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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。Uo9F/e9Q%qA/kT

ap{:~Jz2ht&Y   [size=18px]常见的兼容问题:[/size]2asj9OZ!F~X;P

1DQ&me_}V9W sP   1.DOCTYPE 影响 CSS 处理
$KrG-jjz_ ,xf6]p*q1o;E\
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行.q3_7k,gIS
#vT]w+BvLg
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中H M-SgQg\!p

8Q^A ~? D   4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 widtho9~J(~0_mg b

$L_i?p+H/ZuL   5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式uL7Hc8i

Oq'q)u7u?/c:q*|&I {   6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
m6s5[s-I [:YX
cT&akjrz   7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
9t(A2x9kd)Co\ .M:CgUB Y7}9RIZ
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。s*C4n^:V3@hS

1F0_Q!sbQr   9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
vx`/kN(k/u   注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}'K5] I:^GH
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
_@1Q.k.yU V
S3p Q,F$rb   10.IE5 和IE6的BOX解释不一致j ^:G [R
  IE5下 div{width:300px;margin:0 10px 0 10px;}*I8e7L$MH)vy#};Ul
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
#qju*Z!n!s&A4ma   关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持_:Y,q{\-Q&Q
[0^L@ v7Xn9[
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题2a/B'd'PVjW kk

#Ru4JQw1? S R   [size=18px]注意事项:[/size]
h)X2Qq n8o$v F&CQe GH
  1、float的div一定要闭合。s,E!y6o#a X O-{D
$J.q3gb%X0FW|
  例如:(其中floatA、floatB的属性已经设置为float:left;)
$o%M id4e <#div id="floatA" ></#div>
V }4f M9B;C&O/r TZ <#div id="floatB" ></#div>
v`uPHn w <#div id="NOTfloatC" ></#div>kc!r%w*m8Raz'y.Z
  这里的NOTfloatC并不希望继续平移,而是希望往下排。
~v X!_k   这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
`)skU'G"xl*s   在 <#div class="floatB"></#div>
0T3YE.oAp <#div class="NOTfloatC"></#div>
OM\&Vh   之间加上 <#div class="clear"></#div>
~%|y,T:tX? e"l~%d   这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。 G h f-t!J H!w|X@
  并且将clear这种样式定义为为如下即可: .clear{
;k[3{BEL Me clear:both;}
l _3NqtN ?f$M6G_ N   此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
*b4sL|RXY5l   当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
!CU P!t"g)M4H#o   例如某一个wrapper如下定义: .colwrapper{ I"B$CnN'|;v
overflow:hidden;
z_/^3M2Wn7Gpz zoom:1;2_q4x6b`q9I
margin:5px auto;}
4}ze7A]4F)lU n .r3g%\t;?:w![h-I%N
  2、margin加倍的问题。T(S0M1~d*r+`3n

*Cm7}L%EbN   设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。w"pHp`
  解决方案是在这个div里面加上display:inline;
'_(](c"C'Xov 例如:%qz O8Q/m,gJ"j3C,e8N
<#div id="imfloat"></#div>
F+qS#mE
a)D#c7dI+n9O ~V Kl%Xh
  相应的css为
7[ qO|X _ #IamFloat{Q1Q8{z1W7v
float:left;/H1Ot~9cPN
margin:5px;/*IE下理解为10px*/*eklsz Pl5F
display:inline;/*IE下再理解为5px*/}.r],gbF#d,Y)l9c
3C/XyDi/s#[
  3、关于容器的包涵关系
w(vZ%o[a;M{
I,d_fq   很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。9f0z ?$o`+Y#l6Qv1W

U'k!r(W/J0O }q U   4、关于高度的问题
m~1~~#`v8w ap W+L#E(W
8YK7w`*a i,c qq   如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
6U0o }2m$T8s2G
j D/\&O U KTOP   [color=#3366ff]5、最狠的手段 - !important;
_jz:g0h-r{#Z&zk4^$U [/color]
jgKX `/r#~8Pnw   如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{.^O4_)j/W/Cu*I(s
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
AGe#}%Q-f w:o background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}y0_;q$y:S$^R6g
  [color=#ff0000]值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过[/color]

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


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