Board logo

标题: ie firefox 兼容CSS的问题 [打印本页]

作者: admin    时间: 2008-1-25 02:44     标题: ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。( ?1 o* ?# ^' {$ G' }
3 {3 Q% X" \& b+ n) G; h. P- m
  常见的兼容问题:
. F$ n- f8 }$ C( e7 E
+ Z3 K7 w8 z; Z/ W  1.DOCTYPE 影响 CSS 处理
: C3 ^3 W: l' J: n* |2 `! g, M; T8 r0 i' e$ W  V* X
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
$ X' Z; T( `+ c7 G' ^% M& z6 @$ @' }
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中" _8 O% Q! N! R1 c0 I9 |8 G
2 V; f4 }! |3 D8 W
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
5 H; o/ D+ H" y) j3 W- W; s( m3 P$ c9 {: r7 A
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式' c- a' A- O( n. ?% @" ?3 Q- T/ H5 h0 o

" C* d% f- f, E  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行9 t8 M' v6 ]6 b/ z, w; m! \
; Y; V9 i' u7 w, p, K
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
: F+ ]. s; i9 V; }' V' }& F" y4 h6 F4 m9 ?
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
! K9 A# h& Q5 r2 s1 \- l# ], h8 q6 @8 _$ b4 q5 {$ Y  s6 {
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
: a3 R" f/ t) P$ S  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}! U* g6 n6 h# x+ N9 y1 m& {/ O' g
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
: x- ~) K  _- L) F
4 N2 z& {0 N+ \% \; q1 V  10.IE5 和IE6的BOX解释不一致! f# ~4 R7 \) a3 [8 h/ L, |
  IE5下 div{width:300px;margin:0 10px 0 10px;}
) ^; `  ~  B1 `8 {2 ~  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}6 ]: x1 Q  E, H& ]- O* [. x. x
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持) H1 B" e4 s$ e# Q" @  Q0 i

' H" l0 m. n1 U0 m7 t  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
2 H3 y7 {% t# E2 S
& r& ]) b% m! y% i  注意事项:) O+ A9 M4 e6 k. z- f* o& P' N
: W0 f$ Q' V/ C, `" p
  1、float的div一定要闭合。# |$ H9 e% F/ w9 M
$ c; g* N& W' w6 E; P" C
  例如:(其中floatA、floatB的属性已经设置为float:left;)
/ i' ]. n4 V: o6 P9 g<#div id="floatA" ></#div>6 U3 d$ g% U0 \! W. _
<#div id="floatB" ></#div>
% w! P* F7 a6 k4 h+ `+ Y+ j<#div id="NOTfloatC" ></#div>0 w6 Z9 P+ [' P& A( l, O2 ~
  这里的NOTfloatC并不希望继续平移,而是希望往下排。' s2 k& }+ Q+ ]1 e/ J" a* Z# D
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。! H3 d% o- \9 P# N" p9 a6 q
  在 <#div class="floatB"></#div>
+ |0 g1 P( p8 i7 r<#div class="NOTfloatC"></#div>+ R! I6 ]$ M- {# Z5 V0 v
  之间加上 <#div class="clear"></#div>
4 r" d5 K8 S; _- D: t- b4 c, Z- u$ {  |  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。8 h2 V& _, g: u5 p  Q- j6 r
  并且将clear这种样式定义为为如下即可: .clear{
+ w" ?+ `7 p2 g; s# c. Qclear:both;}
) Y9 G1 W6 B7 s; G  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;& n4 i8 f4 C% E+ W3 i
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
! `3 v/ W, k  {3 f- l, }  例如某一个wrapper如下定义: .colwrapper{4 M' g8 P# w$ g$ m, Z% Y# |
overflow:hidden;
+ r. f9 d6 \1 r8 Q# D( c6 G" Ezoom:1;
1 W( A( s  s6 k* {margin:5px auto;}4 ^; p' U  c1 c  `

+ x$ G' h& a7 I% n  2、margin加倍的问题。- b% V% @( {7 g* c

: v% q) A2 l7 H" O9 B3 j$ P" a: t+ Y3 C  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
; n0 B$ z9 @- a1 k! Y5 z  解决方案是在这个div里面加上display:inline;3 E' f6 g" Y+ {' f$ V9 P
例如:
5 J, M; g3 q. `<#div id="imfloat"></#div>
6 i3 Q, {, [. t. `! ~  F0 A' ]7 M9 [* h, `8 Q. f0 ~

( d2 H7 f" j% f: ^$ Y7 ?  相应的css为
; W; k% I$ F/ A6 F2 {$ P2 c#IamFloat{) U0 F' j3 q- E  b+ E
float:left;
. W: b$ Y) b7 kmargin:5px;/*IE下理解为10px*/2 Z  x% }8 c, O! k# V3 R, m! G
display:inline;/*IE下再理解为5px*/}7 D9 d( e$ Z* I! {3 S

* x  z  z+ Q6 t. c1 c  3、关于容器的包涵关系
% i3 H! c3 n5 M9 b. m$ t1 F1 y
) q  Y9 P/ y7 v% u* d$ U  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。- g& n. h5 F. G

& I) y; L, h$ B8 T  4、关于高度的问题/ a! {$ I& \5 m: p' G, B6 v/ n

' B2 \6 F9 ^8 P2 m  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事): r2 w; S7 }) v4 X
# J- [- c6 M. v2 N! t& W. ^0 S
  5、最狠的手段 - !important;
0 E) [- q) X) ?+ U, `/ `' ~

; g: e7 Y, M3 z1 j4 p) m5 N4 Y  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
! y2 g" I% M) `9 i0 i: u, q* v0 ebackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
" M  d; D9 [8 vbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}1 x' ^$ u) H3 y$ L
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2