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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
) e6 h4 b( d6 L" ]. D
1 x+ N( S, R& q+ g  常见的兼容问题:1 h$ U, s+ x5 z

1 f- L5 l3 r6 W' j" y# C  1.DOCTYPE 影响 CSS 处理  U5 B* T' L8 V! ^, p3 E
- M% C' u; }* ^6 m9 |
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
  f4 l- ]8 D2 X9 S; S' ?" g' R" l9 b2 \; N- |
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
4 y/ s& S7 y" l2 ]$ E
5 K  X6 q3 j$ [0 m* M5 [  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width$ W. E  R2 `- S9 r; @2 g

* {4 a! T6 L1 g1 r# i  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式4 j/ d/ N) D) n* [1 S) I

1 T2 H& n2 _" o  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行  Y7 r/ O6 u% q" ]9 _7 Y

  b6 P+ s" M2 x/ E; c  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以9 w6 n7 L1 d) j

7 O1 j, c9 u) S  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
) ]$ S0 A9 u$ V; I3 U* }
  C# r: G9 f4 |4 Y% }  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
2 o( [6 ^9 B% n9 z  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}# V4 B9 q7 K* o" f
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;  W/ W1 M. R% @* _

* M, x+ L6 Q/ _2 Q5 U1 P+ L3 o  10.IE5 和IE6的BOX解释不一致- `2 m0 ]- Q1 o( X# X. F
  IE5下 div{width:300px;margin:0 10px 0 10px;}( U6 \1 N( v3 {
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}9 e5 d& Y# X" G- N( I' m, k
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
3 {" O: p* N* ?6 W  O
, W- j2 d% x- P! ?8 A) k! N, s( I  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题$ l+ A: P- D: N
% C5 h3 H4 D" L1 |8 p
  注意事项:- w  m2 I. r& `# L' h

2 M8 G* J' ~9 o# z& q* T" g  1、float的div一定要闭合。
# K5 H% P  \% I0 N5 E
+ W) n/ Q0 W3 D; `8 o  例如:(其中floatA、floatB的属性已经设置为float:left;)
. B. E) M9 n  M) o0 O5 D& C. t9 `3 @<#div id="floatA" ></#div>
" s, t' i% v. q: l' {/ M<#div id="floatB" ></#div>
% l7 w! \, _) `- _<#div id="NOTfloatC" ></#div>9 y/ ~# j8 I3 X( {: e' h
  这里的NOTfloatC并不希望继续平移,而是希望往下排。; l# H) m: L8 Z: V7 e3 T5 E
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
$ L* ]- N& j/ c1 K$ p  在 <#div class="floatB"></#div>* S: F$ l6 W1 G6 ~4 N- @9 {
<#div class="NOTfloatC"></#div>+ N* ]" ~  [  n  L6 {2 @
  之间加上 <#div class="clear"></#div>9 k. Y) L5 ~7 R6 P7 \& ~9 s( V6 o
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
) i1 l& y. r% ^8 Y7 D  并且将clear这种样式定义为为如下即可: .clear{1 G0 i3 A* {( Y2 r5 K$ t- h6 s" k
clear:both;}1 ?) ?& P( I( l0 ~% H/ z; a2 V. Y
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
. O7 c4 d; g" A! }  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。4 ^- t2 U# J& c- b" o& ~
  例如某一个wrapper如下定义: .colwrapper{
  W! S& I0 d/ Y2 ^# aoverflow:hidden;7 l5 Z: A3 l8 n6 D: B0 V8 L
zoom:1;
" ]! F( H1 L9 n# G& A6 [& vmargin:5px auto;}
5 t+ j+ G! [) R/ M# _+ P8 C1 j
  |) I; M. J  L5 R4 d& w; d1 {  2、margin加倍的问题。5 P5 G0 F5 o  P6 ^& O: `' n

' @2 j! Z7 y3 b1 L- X  n  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
+ _4 ~. I/ h' u7 `, x/ w3 |  解决方案是在这个div里面加上display:inline;
- i: F$ M+ s( d4 t8 Z0 m/ j* T例如:9 c& U! }/ L8 e
<#div id="imfloat"></#div>
+ h7 X- W5 B% C, g/ Z- b( l# u; @. X( v4 P6 z- y& J/ w

: V( q& C+ j  K- y  k- {+ F0 c  相应的css为! f9 Q8 e: E3 `; L
#IamFloat{& ~; M7 q, z# i, h0 _
float:left;- O/ @4 h; i$ k5 \  c* N0 d
margin:5px;/*IE下理解为10px*/  M+ M0 @2 m! S8 z) p
display:inline;/*IE下再理解为5px*/}
' h/ f2 Q7 F0 C0 F, S% T5 f% E+ I4 `% N% J7 v
  3、关于容器的包涵关系
1 E% H  u" L$ W. e: ]7 O4 R
" u2 q8 b: F( N$ U5 G4 Z: s  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。* i5 Q. i6 N& Z  L5 g

* Q9 L6 u' T  F8 {  4、关于高度的问题( T) p' ]5 m7 Z- N$ j; ^$ O
9 v) L) C# ~6 M! J
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
0 _$ F* L& p, T4 \+ {  @. P! r" g, K9 F( u; B) g" C. f; B- G, Q
  5、最狠的手段 - !important;+ q7 E* z# j& P$ @

" a+ x. \  a1 J. Z  u: m  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
/ U4 U% [* f5 ~9 Zbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/% _* {7 ~3 X4 m  r
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
5 P* K# u' J: q, k9 Z  J; ]  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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