返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。: U" j" G1 b) x7 k
9 \# @/ x% p: E9 D' s
  常见的兼容问题:
+ v* ?  J* z; G" {; T: l
/ F5 \" \' D5 z/ `# k* t  1.DOCTYPE 影响 CSS 处理) k9 H4 ~- }2 E( H) C. N5 W% W
% f- x6 D# i, U  C6 u
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行+ G# Z2 h1 J! q
: T0 Y5 o' I6 m, e
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
* h0 V$ D, c5 E) G0 `$ z. [% n) r  X9 U- p4 s
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width- k" l% m3 }9 S0 u# ?$ Y6 F$ t  c

  w; O. S$ q0 {$ A, d3 _; K# i  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式/ _! w1 W3 F' a) @$ S/ c" o

/ E2 p  o! ^+ m6 `  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行1 l( h. M) ]9 l# a7 `
$ A' r7 T" z/ L5 I& C. z
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以0 W4 I% p. J1 n3 ~$ B
( A, n7 K% o3 ~, P
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。+ V5 S8 A9 [+ z# ]5 t1 T" n
+ Y" L, N; I: p! ]+ c" [  I
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}% S# E2 S9 \' N( V
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}+ v. H- ?0 b3 [
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;* A) A5 Q$ e9 f; s
# x- g6 H- ?! N2 J" L& ?
  10.IE5 和IE6的BOX解释不一致8 s) w) C: p( q, @
  IE5下 div{width:300px;margin:0 10px 0 10px;}
6 V7 j% W0 C+ a, P7 b0 u  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
0 y% d2 v1 I; ~: `  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
3 _: X1 G6 k4 \
, j* A1 H) ~6 N  b; G' W& r  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题- Z8 D4 Y1 e2 L
  Z' z: W4 h: X1 S% P
  注意事项:
9 I' H" t8 N7 D2 y0 E; Q: u6 ]
1 t/ H2 J) e. ~' b% h6 V  1、float的div一定要闭合。
  _. z+ v+ P' P! w% T* Y9 X4 ~# }6 ~/ |$ K! ~+ Q. S
  例如:(其中floatA、floatB的属性已经设置为float:left;)
/ I3 Y1 n% B8 b  H- u2 E<#div id="floatA" ></#div>: v$ U0 i% ]+ O1 c3 o6 M& j
<#div id="floatB" ></#div>7 g, D, L+ _# c) F  S
<#div id="NOTfloatC" ></#div>
! x& D- U1 ?4 i" J6 u2 q- D  这里的NOTfloatC并不希望继续平移,而是希望往下排。3 Q: n' i, z0 p1 J" p/ C! V2 U
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
1 h& g3 v0 S) Z% C8 R/ W  在 <#div class="floatB"></#div>$ I4 d, D) a1 p; I2 l# K/ \& x. C$ n+ l
<#div class="NOTfloatC"></#div>
$ X/ f! f+ j2 h% F7 |% i! p: g  之间加上 <#div class="clear"></#div>0 e5 K1 d0 P& K. I' g
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。+ `2 o. E3 L  M3 p  o# T. [$ J7 I; Y5 l
  并且将clear这种样式定义为为如下即可: .clear{9 |: S; i  E6 Z- M3 k* `/ b7 u
clear:both;}5 P6 J/ }8 R, i# ~
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
; D+ f3 k. X3 @. j  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。' X7 s$ v( ~6 \7 Q* E( @
  例如某一个wrapper如下定义: .colwrapper{9 ]& N, |' t  p- h2 I, p
overflow:hidden;8 u! g6 k0 K, P3 D# ~, N4 S+ ^
zoom:1;
! a5 F$ `- Y' b% U8 B' Wmargin:5px auto;}# k7 n+ ~6 i6 P8 t( H, O
9 X% Y1 {5 O/ d4 d3 \1 A$ ~+ p
  2、margin加倍的问题。
; k0 e  {/ ?; i/ E7 E0 l) x3 h  A! s. F2 @* d" I
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
+ [% D8 g5 ]7 U6 A' D  解决方案是在这个div里面加上display:inline;* {8 K; C& X  J' R- J$ ~3 R
例如:4 W: S) X6 C5 X, s' N" j& P) G
<#div id="imfloat"></#div>* ~0 `$ M4 B" `

# f* e$ r, [0 ?
: ^4 \2 D; _: b" k* t! F) ~  M  相应的css为: O1 B3 y6 G6 q9 T  y! \+ N+ h
#IamFloat{
2 l' Y; C6 A% ?float:left;- W/ j' S' H+ c7 {
margin:5px;/*IE下理解为10px*/
2 @7 s6 B: j2 y; Q: O. adisplay:inline;/*IE下再理解为5px*/}1 E5 ^# U. S9 V, U. b7 f/ x

. T7 I3 v, w+ J$ D  3、关于容器的包涵关系
: ?& o3 x7 t/ w% b$ X; ?! C- I  ~. P) Z% y$ U4 S
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。' v( V( p/ `  W. w0 w
5 k4 f2 u8 l1 T  x1 }# j8 M2 s4 T- I9 B
  4、关于高度的问题0 k+ Q1 e' t& \' s9 z* F! U8 w8 Z
) u( g' M9 o- {7 @- S/ i
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
* K: o- Y4 `0 ], c/ m+ O$ D9 D4 b: E  [( C
  5、最狠的手段 - !important;; q3 ?6 t9 k2 s9 X$ r. @, }

! c, n# Y5 J+ |" ?  a- F, ~1 M- k  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{- v# u. q! g# P4 d( E" z
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/0 I1 O: J) d, Y
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
2 k8 e. m8 I% J" j3 y9 t. ?  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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