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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。/ v5 Q3 |5 g6 ]
, x: ^8 h. |& B8 R' V5 g
  常见的兼容问题:( w/ \1 q& W( M) W) |5 m* Y

7 [$ j. f; j2 h6 g  1.DOCTYPE 影响 CSS 处理
* L- A3 ^0 n. k! y6 Q1 m- _
6 f; O; j# m$ \" [0 h  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行+ Q6 h# t5 {* I. Q9 w
  d% P, {/ Y# t
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中$ m8 s2 Z8 ~% v0 {1 N2 Y8 C

7 I) m3 C3 r! r0 r# x  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
2 |" v  g( {# `* v0 f/ ^, P3 E4 E% u+ F' e% P
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式+ m" [' N4 R- I4 A% c

" A! _$ M" F  g. z) k3 Z  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行: O  z# _7 X6 D0 [7 j+ @4 c

; u# x& [, t( x: G2 y  B8 D: C2 I  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以) r  ~, g! ?) t
  S: C7 O. r' p
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。4 c1 \! _6 \& e7 w- {3 z+ p

% l. J& B4 j% A6 S1 u, B9 i/ s1 A  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}( V0 N- j+ ^; b; \
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}" u7 \, V7 C; z5 ?$ L. A
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
+ ~4 H1 ?" o0 c' l  \+ f2 ~
) N! W* |  V4 d" u  f  10.IE5 和IE6的BOX解释不一致
, z5 F0 s% I1 X' A, J0 k! [! m  IE5下 div{width:300px;margin:0 10px 0 10px;}4 N+ j; d9 V7 m$ R
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
. F/ b; s0 x$ U3 u  @7 W  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持7 |5 d* p+ I7 i7 w% c
' V: K& |$ F, @) b+ w( m
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题* t0 z! A, D0 _9 A) R0 D2 m8 t
/ Y7 k1 Y7 d. b" ~1 p6 w, @7 P- Y
  注意事项:7 S9 P& Q7 R* A/ r- c, p% I  Q! K3 m* _
' \% U  ~4 Y5 E# ~/ k
  1、float的div一定要闭合。2 m1 c# g( n2 Z7 a
- F8 y2 e# {2 b6 Z
  例如:(其中floatA、floatB的属性已经设置为float:left;)
) o$ `" R" T; E<#div id="floatA" ></#div>6 o! A. j  V: A9 }1 b$ O& X. O
<#div id="floatB" ></#div>
$ X8 o8 b5 ?1 c0 P7 h" c<#div id="NOTfloatC" ></#div>. ]/ Y" p9 V% J9 k& o# v
  这里的NOTfloatC并不希望继续平移,而是希望往下排。
, \. B& Q: ], Z% c, d3 E" z7 _  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
5 c' }6 i# @" I# n, S, Y  在 <#div class="floatB"></#div>8 `% f' N: U( s: F
<#div class="NOTfloatC"></#div>
0 E! R  T+ w$ B# f0 U/ l  之间加上 <#div class="clear"></#div>! `3 g0 K& F4 m
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。# J5 M2 ]% ~) y* M$ Z+ k( }8 t
  并且将clear这种样式定义为为如下即可: .clear{" c# _; D, A/ g/ W
clear:both;}
, p2 K0 G5 m! M1 ~+ E  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;% R' w: N% I' F5 a) V! k9 a
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。' t' Y7 n2 K8 _% j( z  W6 _
  例如某一个wrapper如下定义: .colwrapper{
: q, a; ^9 f2 R7 x/ b  goverflow:hidden;
1 r+ k5 M0 F" Rzoom:1;
' \2 M+ u, h# u! D* d, Smargin:5px auto;}
: _2 ^0 `* b! W0 b: S! [3 K1 G! C! d* p. ?5 |" v
  2、margin加倍的问题。6 ]: e2 B, B8 w; w
4 L" X! d1 B1 T) ^" j1 @% m
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。4 z; d# c( B0 `1 k" C
  解决方案是在这个div里面加上display:inline;9 Q- e) N  y( w0 P  e
例如:
" p4 z$ {8 J* r% c+ L<#div id="imfloat"></#div>8 z) @. ]0 _" r: D$ w4 o1 R
1 \8 J3 d# i& t0 q! p
9 g1 h$ S1 Z% i& h; J" w
  相应的css为
5 Q1 h6 Z2 z& E#IamFloat{! F- G$ X! k8 G. B$ H; @' U  }9 C
float:left;
! [" J% j" _0 Jmargin:5px;/*IE下理解为10px*/
% b( D  b1 Y; @) d+ qdisplay:inline;/*IE下再理解为5px*/}
9 J" x1 J' i- M* x& E# d; T
6 N5 p3 o' I3 b' I$ ], g( \  3、关于容器的包涵关系( L- r" L+ c0 P  Y3 ?$ `

- n% Y% g3 B5 y% u" |7 x  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
6 K0 l7 ?) m3 m9 p# V  l2 l& o: [' T% I  `: h* y0 K, t9 \
  4、关于高度的问题4 ^- [7 K' w. L2 G
% ?' D1 z! ?; e" t; ^6 P9 x
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
# k6 [7 p, q' I" H* ~7 q' V& t$ N" `0 Y( r; ?2 z1 @& y  g% `) Z
  5、最狠的手段 - !important;( y  ?0 n7 ?: P3 a0 P
* j: y4 j7 A+ s1 F' ]/ N! r3 _
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{& j) X! `! M( _7 S$ z# |( n
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/5 v' \3 z5 d5 C! q, V1 W
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
  U* U, ]4 U) M) u5 l: b5 ?  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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