返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
) F' b8 \9 m7 _- u6 z
0 K% I/ H1 k! G" ]; N  常见的兼容问题:
! e8 ^( S# |6 O# L* `7 B8 {: V! _( p$ {
  1.DOCTYPE 影响 CSS 处理
+ t" a+ t) T& g2 l% ~' y  l; }) U' x5 z- m" k6 m/ m9 y
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行: _% W( Z" Z3 O  ?& r$ J

$ _0 @- G; u8 d( }7 u; C5 L  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
: b3 @' x3 R2 r  u* C; G( @/ f* ~+ v8 @' {! Y+ t$ ?
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width% Q2 x  [- E- }: ^5 U# W
+ Z6 }& R9 f+ H) M3 R/ t1 K
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式1 V. @: d2 x! }* R7 r$ I! r

$ M2 ~5 Y7 i0 V9 w9 Y& X; V6 X  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行: W9 ~) \8 G/ i4 U
9 w+ v, R  \9 X0 {+ H9 k+ c1 V
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
4 K! g# |: B* Y( D$ p- r" R0 X
6 y9 b% v2 D$ [3 o5 k2 R  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。/ l' L$ o  n) O
5 z! w8 E) ]) V! y
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
& S& J% V& T; g* n' a& M  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}2 H: n6 u8 D( Z; c% K" h- U
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;. K7 b% P& M2 u4 S8 w! j+ n5 D4 A, d
  x7 J/ ?2 l( S3 S
  10.IE5 和IE6的BOX解释不一致0 F1 c; x% O! n4 m' ]" G
  IE5下 div{width:300px;margin:0 10px 0 10px;}+ o/ W& }- j3 T& R
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}' y- H: z0 ~. H3 X' i( d
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持: `( {/ C9 S( Q) y) d

& m3 a6 R5 ~& r# n4 D( j  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题) s. D; T" L# A5 e# v4 j

" U6 M5 {: ^8 S0 h9 _* S  注意事项:; h0 ]9 @5 X7 s
$ L( A/ O1 j( z
  1、float的div一定要闭合。6 Y, i0 P. d1 V' b9 f$ X! k, G
( {+ e! j5 ?6 @
  例如:(其中floatA、floatB的属性已经设置为float:left;) ' I3 ?" q! {9 a% W: p0 O  ^) U
<#div id="floatA" ></#div>- M/ c0 R! I/ s5 X" D- Q( e
<#div id="floatB" ></#div>
) U0 z9 I, u* C/ C) N<#div id="NOTfloatC" ></#div>5 L: v1 b2 `& _
  这里的NOTfloatC并不希望继续平移,而是希望往下排。9 C" J" B% G- p, q$ Y: N! `+ C
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
6 u" b. q% z: s8 v  在 <#div class="floatB"></#div>
1 T* _, X  u1 J5 x3 }1 M<#div class="NOTfloatC"></#div>
; n& L& U) o! W. t: G& x- @# {. g( V$ H  之间加上 <#div class="clear"></#div>' u: O/ R$ N7 R$ a9 O$ i
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
# C1 p3 f3 j% j( k4 H  并且将clear这种样式定义为为如下即可: .clear{! r; }1 H4 c3 c
clear:both;}. G1 p- D+ T* I7 F+ ~: c5 y% ?
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
( {1 R2 h0 w* s" K3 r$ }  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。7 w6 A2 K% ~' u
  例如某一个wrapper如下定义: .colwrapper{( O9 {; x3 X0 Y5 J, L+ q
overflow:hidden;1 K+ c0 S( A2 W/ h9 b
zoom:1;
8 }- a7 x  ?# b5 ~margin:5px auto;}
5 ^7 J! h2 T6 z3 G
' ?4 a4 i. w/ c% `  2、margin加倍的问题。" _) x2 j$ _. A5 M5 u# u

& W- l: J' w- V7 J, K( F/ r5 R+ O  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
* f; x; L3 t( _- |9 a$ X% }  解决方案是在这个div里面加上display:inline;
2 E$ }7 G( X; J- e: s" q" g% z1 t- u例如:
# \  A  w- N6 \5 y1 }% {+ m<#div id="imfloat"></#div>4 c0 L# o+ `% z( A0 `2 c1 ~
5 h) ~6 i$ Y" b* g

1 f, [2 d; e$ C/ C  相应的css为0 m- d3 U* O# X$ b
#IamFloat{
5 x- k% K9 x; b# C  K& W" S0 dfloat:left;
6 J( v4 p+ e% J8 Emargin:5px;/*IE下理解为10px*/
- `1 G7 {3 i2 udisplay:inline;/*IE下再理解为5px*/}
$ h' }/ w' \" p& a8 `. w
) m  i# V: P. h0 t  3、关于容器的包涵关系
' v) m: n# l" I2 K
" Z- c, V+ m7 `" e( G  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。# c7 ^, f4 C- Q9 c1 {6 r: u" C
! k1 k5 o5 B- v! e8 Q: K# N" P  ?
  4、关于高度的问题
6 n. w# F+ J+ Q: c' F, s5 E. Y0 D
( P/ _/ n  A) z1 M  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
8 s7 s% d! T0 X
8 `2 h  I) y4 F' N  5、最狠的手段 - !important;
1 y6 C/ X$ V4 ^( x6 D# T5 K0 O0 u

- P3 Q1 n1 r) l/ ~" t5 k8 }  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{; w4 m+ F2 M  P' @5 |: @: A
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/* K8 N% w) F9 W: B- l1 R
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}+ ]) m" [! j" \7 G# T2 {
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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