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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
3 s# S! v" j8 b3 G( K/ {& ~, J1 D2 w! t5 h
  常见的兼容问题:0 I; I" [- W/ p/ `7 C* f
$ D  W* I$ y! Y/ a
  1.DOCTYPE 影响 CSS 处理
8 ?7 t" [% N) ?( |4 T" }& ~) `8 P; @2 B. Y' x7 ?! |. Q
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行+ d5 M) ^5 v/ y% {2 y' j- x
6 I/ M2 s# Y: D" _8 D
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
" b5 U1 s; Q6 V1 G, F2 N, X! c7 }# D. d. v% o  I8 i2 D
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
4 ~) ]! R& I2 l* f# r" e9 k. d7 i$ C
- c  x: K. u  v: v9 o7 k2 u  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
( O# _; x2 L" m7 U$ k$ n- K
8 [0 P6 e9 O5 ^9 X& R  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行2 D# t3 m. v7 W* `0 t: W
4 e( n4 X  d: [1 J' Q" p5 p3 `0 a0 j
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以" g2 s3 X7 a" |+ Z9 A

8 q8 x6 c/ V! w- P# U4 ^* S- ]  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
+ k. s5 T5 @5 {7 Z  L
4 b8 A9 x1 Y& q7 r2 Y! t8 k  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}$ A7 M, b9 ~- l$ x, Q  D( W5 W
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
- l( U8 i2 t  a0 z2 Z1 K  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
  D3 j+ A0 H* q0 B  c8 U. i. i2 j( n- l# {' H: _  d9 p, f
  10.IE5 和IE6的BOX解释不一致% }7 {* ?; H: p8 d: d/ i
  IE5下 div{width:300px;margin:0 10px 0 10px;}
' Z7 z" S# S8 _& Y4 D4 h2 U  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}& a/ |4 d' |+ t) u+ K
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持4 i. K% U8 x% K) D; i

% m, D& k2 ~% B' e  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
  I# y+ l8 j+ t8 I) h4 w
& `; D. G7 A& n$ W  注意事项:
, t7 E, L6 W  h; }
6 H% |! `- C! c0 r' Q" }  1、float的div一定要闭合。
; ~: p- _; A( [, `% k; U3 x' k7 n6 b
  例如:(其中floatA、floatB的属性已经设置为float:left;) 6 g! _' I3 i/ |
<#div id="floatA" ></#div>4 S0 W6 j/ I6 k  h2 J+ N9 J5 N$ r4 Y
<#div id="floatB" ></#div>
+ F. D  E+ c5 H/ r! O<#div id="NOTfloatC" ></#div>4 i. _9 C& \9 X5 x9 X# |1 T
  这里的NOTfloatC并不希望继续平移,而是希望往下排。
" h+ Z; F- z2 l  h  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
$ F# v) r% H+ q: y* t  在 <#div class="floatB"></#div>9 H% a3 j9 F" A( @
<#div class="NOTfloatC"></#div>
% c( ^% `2 D  u% `" Z# A  之间加上 <#div class="clear"></#div>
) T4 c$ p6 c% g0 n  g  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。% C+ v. s6 E; R  {2 e
  并且将clear这种样式定义为为如下即可: .clear{7 I0 n4 @" V8 r1 J  f2 E2 e
clear:both;}
3 l+ N' P/ _/ ^& x  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;! ?4 }& S# V" F) b; W* v+ `
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。" M4 D7 c  b# z5 o+ |5 v
  例如某一个wrapper如下定义: .colwrapper{. x/ P: U" I) Z; X6 X! q- i2 ?( y
overflow:hidden;
' O5 O: C5 @% q  ?" Dzoom:1;
5 f2 }% G" Y" V1 d$ A+ e1 Q7 imargin:5px auto;}
+ M" t4 p5 T/ q1 _+ j/ y1 T
) W( ?2 X$ C( _/ }: N  2、margin加倍的问题。
" X" L, i9 T7 T5 D. X  l, w
- L9 n- d7 Z  f4 T3 w2 ^  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
7 g0 M/ I7 f7 G  解决方案是在这个div里面加上display:inline;
- X" q7 c& F' l) T: V8 g5 ~例如:# J0 m/ K8 H  f
<#div id="imfloat"></#div>
/ y+ `9 r! w0 D, {2 _2 u9 m+ J2 ?
( E- F4 E8 o2 O- u2 h! W( J) T# [
$ H' B; z8 j. O6 }, |5 A: g  相应的css为7 K5 Z  p% q2 Z( ]: @
#IamFloat{
0 ]2 [$ J, y6 S. q( `, [float:left;3 O9 j1 \3 A* v& G: i1 T
margin:5px;/*IE下理解为10px*/4 a$ _' y7 t; X5 P# h4 {
display:inline;/*IE下再理解为5px*/}
; \* ?: d; d( p
1 i- x# j3 G: |# @; T; P  3、关于容器的包涵关系& @* l$ V4 W% U8 j
8 J  s; ?- }" q' G
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
$ R! p$ h% r/ W& R" I* l: J! g2 O3 V- A# S' B
  4、关于高度的问题
2 r  [+ L5 `; _. |4 D' O7 C4 W1 s$ W0 q; u; k
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
1 a* W, j3 C5 `3 a/ @( D; A# v- w
) i6 S" i6 X5 U* P; P( W0 g  5、最狠的手段 - !important;
! c4 h1 p# c' r, N$ |/ f$ o" H- q

' K9 t3 U$ k. d" e: K4 z, U  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
$ q( ]* v5 q+ O* M  I; obackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
+ B. h# r( l) W2 J: Zbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}9 H1 ?3 I4 U6 D
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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