返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。2 c6 F6 T! D6 g5 Y' p- I' P3 K

# p" G0 P) F5 ?5 e" m7 p( m0 Z  常见的兼容问题:
2 x; V! |0 J. G6 S. V; H# R  `5 t) b8 O) |) _5 {3 P
  1.DOCTYPE 影响 CSS 处理9 C3 A; K% [0 b9 [* M- s; c# K# r% g/ p

* c6 g0 U' _  m( c% b  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
/ M& u. z- I# G- g7 L
4 u  W; X" K# H5 V; N7 G  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中: P1 x5 q3 s1 k: P2 w6 `- q
- H/ N2 f8 t5 b3 D5 Y9 [
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width2 b8 ^6 Q0 V6 }! M) i' @

+ i& D) r' T2 i  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
( V& L5 Q' Z& @5 L: W. m; j
1 Z" o. x3 M, x1 P) P6 `- i7 d" p  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行9 Q6 _% L: x5 Q
. d8 B9 S9 g* |7 Q
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
# Y2 h+ }6 C7 k) j1 u  @3 J0 n9 i% G/ E. ]7 |5 B( L9 C
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。' v' N$ s* ~* X4 s
/ f( h9 p2 `4 F4 g# H5 K5 y
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}' p: l0 \! y. m/ J! m% n
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
. V( r: t, }% k0 b* B: x6 N8 R  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
' \: r# W$ r' V
6 n( Q# r3 n; w  \  10.IE5 和IE6的BOX解释不一致
! t! a( P! \9 {8 w$ |# H  IE5下 div{width:300px;margin:0 10px 0 10px;}
  g* r8 V7 r* I* {0 ~3 `  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
$ G- d! I8 T6 ?. W5 c  S  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
& _+ k# `# {! w2 B. _6 t$ L! h5 a- S* }
) ?, V, |4 ~5 q0 a1 T6 a$ K  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题1 W9 o& I* {2 M  c
3 y& M8 ?1 G; V( d
  注意事项:7 i. O& @; B& p9 B

9 m9 M8 n: }8 M( B3 Z  1、float的div一定要闭合。
. j- V0 f) b  N% M7 G# X/ y' a2 M0 H8 a: \/ n' @3 U
  例如:(其中floatA、floatB的属性已经设置为float:left;) $ s- G5 ^0 b# {1 I
<#div id="floatA" ></#div>" ~" F3 I. S6 U
<#div id="floatB" ></#div>7 G! u9 e: F& ?- j! c* o( s
<#div id="NOTfloatC" ></#div>0 L: s3 o, a' h
  这里的NOTfloatC并不希望继续平移,而是希望往下排。) n8 C! {7 X# L7 p& j) K( h
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
. X2 W; E3 {9 k2 ]  在 <#div class="floatB"></#div>
& `4 z. ?& i9 i- F<#div class="NOTfloatC"></#div>
& Q; h) J6 L1 ~' ~! }7 b! X  之间加上 <#div class="clear"></#div># s( L5 S# W/ b$ d) n1 K& w
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
3 L3 g% ~4 Q% d2 I  并且将clear这种样式定义为为如下即可: .clear{  Q1 \8 b4 R% I4 G! d" K
clear:both;}8 l6 F$ b& b7 z) n2 T% D- W
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;- m6 h" T7 O+ Q1 R9 I
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
* z3 h0 A7 z! j4 ^  例如某一个wrapper如下定义: .colwrapper{4 }5 V: N9 |" N, J
overflow:hidden;
; q: X- b4 p9 d. u0 B- c; fzoom:1;& {) N+ g& I0 c: k/ t* c! ?( O) L
margin:5px auto;}& S7 P( w6 ^7 A. Q

) N; P8 V  U1 u& `3 s9 m2 W  2、margin加倍的问题。
' K  ~  S% |* b+ S" p; a: @: g. }" S$ l. f: p! W! U; J. ?! Q' `- e
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。% |+ g9 n' P, W- x. a; D% `- Z
  解决方案是在这个div里面加上display:inline;  D& i& e7 J1 p- U4 Y6 ]: T8 @
例如:7 b5 `" h) d7 B8 {
<#div id="imfloat"></#div>
1 A2 C1 i4 S0 l; s! ~1 O9 ~- {6 G5 s. W5 ^

4 Z9 p( R/ [! G, T  相应的css为
3 I! m. i" z" H7 k* o$ Y9 @" E#IamFloat{9 }, X5 c; a2 E6 ^, l
float:left;
( |* }( v2 \2 [  mmargin:5px;/*IE下理解为10px*/
- M' m. C0 O$ K! hdisplay:inline;/*IE下再理解为5px*/}+ b, P& o( o1 x% t6 n! R
3 D/ @1 _4 i* w+ i6 j6 u
  3、关于容器的包涵关系
- I. q4 R; ~" q  T/ p5 W+ ]. c: \5 [  I2 t! j; F
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。! M: V, k' R* ?  n3 B
1 s! M9 a7 O2 [& a% z# z
  4、关于高度的问题  E5 j7 n" T; b/ u# y2 x- h; j
: U$ d! r) n6 c' b) {  ^
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
4 X6 [) R+ v) c" a8 K# W
: m& j( a0 K! o1 @0 I0 q  5、最狠的手段 - !important;
) L4 e0 k7 z6 Y- ?6 T  [  @
1 G$ ^7 D- q% l! T! `) {' e0 q
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
9 D/ {1 l7 T0 Q* `7 F3 d$ ibackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/" |7 ~3 F1 C# \0 u, s' x
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
! P* T$ V5 B; W4 O. d3 c  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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