获得本站免费赞助空间请点这里
返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
, T2 k" x/ O/ O0 R8 H/ k0 ~8 J, \& C1 _: m' S! m
  常见的兼容问题:
6 z3 ~2 ^* w+ }' y/ c8 n/ R
# R7 s& {; _) s2 y, Y0 g  1.DOCTYPE 影响 CSS 处理
% O5 u5 X$ T) _0 H9 z; G, n9 Q+ W1 R) f  E4 [" @4 `. U/ e2 f. k
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行5 ?2 B3 R6 C; ^8 s! h

) H+ j5 V$ f$ b6 o. k  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
5 N  ~1 u: c2 ~. p
* [8 {, G$ x+ g! N; i. t& a  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width/ U6 a: W* I6 B: k; X

# @# j8 ]! t# H  b: y# F. `  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
- c3 E  h+ K7 @9 f8 s. i4 [8 h3 a5 P( g* b, L: K. w
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行8 A% b* J7 [) J( z  g3 J/ U

% F9 T- y1 b& d8 P# A! W$ i  _  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以! `7 U9 A1 ?7 R3 m2 @/ r
  f7 V! g/ @- e7 R8 R1 a& H9 D
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。* V2 c% p; Q. _* F, \& \
' w. g( ?1 M# f) t5 L$ U
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
* y/ h( o' Q* u& o( H; ?% G  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
6 t7 I" H4 r4 w  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;; \8 W8 w/ R* ~; b( \( }; l
. n' {1 M+ L2 @" ]& J
  10.IE5 和IE6的BOX解释不一致2 i! o; `' i: b6 ^& s$ M# ^4 w! t0 `# c
  IE5下 div{width:300px;margin:0 10px 0 10px;}+ p+ K6 r0 Z0 r6 X" Y9 G  l* {# N
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}" s8 Y: s8 Q+ A1 X$ b2 }# a) z/ m
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持+ V; g0 f9 Z2 R" r- p& O4 }
# k- j+ i( F* ?2 @4 `
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题3 b' P" t+ g. M0 Z9 }
$ l6 [8 W( g# G
  注意事项:
5 S9 g5 L7 N8 l7 U% A( H; \9 f2 O* V: A. h' I' J- f! R4 C
  1、float的div一定要闭合。
7 I8 x; d# ~9 `; ]4 p3 P
6 m. K' E9 i5 ~2 _7 Y  例如:(其中floatA、floatB的属性已经设置为float:left;) 9 K' m; {# y4 O. S
<#div id="floatA" ></#div>
" }3 Y8 _2 r! a  x7 D* ]8 |, o<#div id="floatB" ></#div>
# F, g: e8 T9 I6 g( G<#div id="NOTfloatC" ></#div>
7 Q9 }0 }: |1 c$ j  这里的NOTfloatC并不希望继续平移,而是希望往下排。4 _# }4 F7 ~& S  e3 _4 y6 ^
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。3 W) j1 D% A/ t) J
  在 <#div class="floatB"></#div>  v& s, \  g' R2 g4 m
<#div class="NOTfloatC"></#div>2 a# J0 F3 |7 g
  之间加上 <#div class="clear"></#div>$ e4 L  ^' o$ Y( A9 t7 C
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。5 m, z- r6 N  Q4 y9 c! O- H5 ?
  并且将clear这种样式定义为为如下即可: .clear{+ O- e0 ^& @+ R
clear:both;}
" T6 v, B/ h% R* H/ U2 @- E$ C  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
7 ?* O+ A# {- O: _  I3 t/ n9 t  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。% c5 |8 M) \. m( h
  例如某一个wrapper如下定义: .colwrapper{3 K: ?- o9 u' t8 ^( ]
overflow:hidden;7 @9 A/ k, c  f' M+ G
zoom:1;
) n: ^2 {" D3 N7 l0 }& Y8 f/ f0 `margin:5px auto;}
* j+ P% ~5 Z( z+ x9 I5 o+ X5 l) }% c. V. k) J6 d8 x8 `
  2、margin加倍的问题。
* o0 u' Q6 C# |  |' X3 s, r$ G1 e: @5 S* e1 S! R7 {( ?! D
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
! q) i! ?2 j3 ]  解决方案是在这个div里面加上display:inline;
) E9 w: R5 u8 {$ t0 n例如:* m. M2 x6 j, [# L4 ~* L! M
<#div id="imfloat"></#div>! S$ V( E) U* Z" o& a8 D
& }$ V7 P. q$ b2 N: q. [( f8 y
8 v. U7 o5 B' j0 M6 [7 B
  相应的css为6 \6 W2 B. e1 f7 d3 b) U/ z3 _
#IamFloat{
1 U' w: `5 p) yfloat:left;
0 I- N0 h. B" P% d" A) T( V8 D4 Rmargin:5px;/*IE下理解为10px*/" T- o- i" W* ?
display:inline;/*IE下再理解为5px*/}
* k" ^6 T1 p- b  M3 b* U" `* s3 D9 X
  3、关于容器的包涵关系2 q# ~/ V1 m$ ~' W& `, B9 g
7 \: [' c( k0 g2 W9 r" \, x; v
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。8 P9 U- C# i9 X

+ J" M2 b, H; M* B  4、关于高度的问题$ I% A7 f+ e, B# p

) r3 [: p7 t4 X6 g$ \  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
( V1 b" m, {3 k- r* r% x. ]: d! g: O0 d2 p6 C0 d
  5、最狠的手段 - !important;; c0 @& n7 ~. k7 ]$ e
0 ?% a1 H+ k4 G: U# |
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{( C- ?$ H9 \% c1 P9 J9 e: `2 X
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
2 a$ g' n  B/ `. @; l1 Kbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
' p* ^3 A6 v3 z6 ?  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

返回列表
【捌玖网络】已经运行: