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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。+ j/ c: X) K" _% b, ~: Q5 d/ P
# p. p0 ~- o  {3 N
  常见的兼容问题:) S% O+ y" R9 P3 A8 H# Z9 Z
) A+ }! z2 R. {* C# E
  1.DOCTYPE 影响 CSS 处理
3 i7 i" k7 g; ?! U5 N8 \  R: i, o
$ F7 F3 {+ W" a' p- o" \4 A& J6 t  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行* W+ ?+ R1 `: T7 h; C1 ?
0 g7 C" U" `+ }) {! g: @' o2 w: b
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
, X5 s& H$ }9 p: H' S4 M0 d, P# s; P8 h0 j
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width; C9 s4 r& k' ^2 ]  Y8 e
1 I* S6 A6 c8 }7 D2 V- u0 N
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式/ A! X" z( k9 j/ u0 r

' ^& X: M& t; X/ c0 \( k  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
/ j7 F. [4 Y) l8 O
3 N. |; `! M( Y  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以3 E9 J3 _* L0 b. k+ `( E5 p

6 m8 v9 j1 P) ?  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。% j( {. I9 w2 e- P
$ @; X+ P+ ]1 W6 q. o. L
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
% l5 V$ H( B# B$ x  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}! M4 j1 O9 I& q; y- P
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
) e# [6 p  j1 A2 i
& D0 I- E: k2 N  10.IE5 和IE6的BOX解释不一致
) m) z" t7 C' ]7 z8 ~  IE5下 div{width:300px;margin:0 10px 0 10px;}
; l4 x% R( O# Z' L# N. t6 z  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}5 z: I2 m, e  g& P( V8 g4 X6 N
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
2 _2 y' q# ~" R  u2 L2 h* Q
1 |: z7 _) E" Y" r  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题; L0 n8 n6 S1 g5 m: p8 \
, A: t* F, }2 L/ n8 G5 W8 a
  注意事项:
0 K* n3 }4 D% o6 I
+ t7 ]0 y! x! u6 o  1、float的div一定要闭合。# `* G4 P+ L8 Q& s; Z
$ ?( j7 ?1 C0 _& m/ `& M
  例如:(其中floatA、floatB的属性已经设置为float:left;) 0 w: d6 U9 J* C) Q' W3 R7 ]) j' k" G! _
<#div id="floatA" ></#div>; e$ ^- Y; Y+ X" J3 ^/ J
<#div id="floatB" ></#div>
0 f; F$ P$ c7 U/ u& ^<#div id="NOTfloatC" ></#div>' {) P7 B3 v* R9 E4 G/ }! y( Y4 ?% i% v
  这里的NOTfloatC并不希望继续平移,而是希望往下排。
9 ]$ u7 ]5 o: [  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。! U4 Y+ h$ V0 c/ v! _' X  }
  在 <#div class="floatB"></#div>8 \/ H1 E/ ~* F( _
<#div class="NOTfloatC"></#div>. F3 j& i% G3 B2 i! w
  之间加上 <#div class="clear"></#div>9 I& P' ~5 i- Q* ?
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。' p9 X! t  t/ N
  并且将clear这种样式定义为为如下即可: .clear{9 r- Y1 F7 H4 j7 c* U
clear:both;}  |% {& A& E* H6 G3 H6 h6 G
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
0 W2 |, k/ |5 B" h2 b2 S  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
' m7 z" F3 `' g) t  例如某一个wrapper如下定义: .colwrapper{
3 P  [, k7 M# T$ z9 a/ {overflow:hidden;
, V4 c# ?( m# ~2 T! kzoom:1;! }4 b) A# l( v' C+ f, {
margin:5px auto;}2 S) x* [$ Q. X

. Y2 C2 i$ l* ?& J  2、margin加倍的问题。3 N+ B. `- z3 G- R7 s1 }9 j- J

* m4 h% k, s/ f1 W  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。# J8 y: z  I! L; ]1 ~7 k* |
  解决方案是在这个div里面加上display:inline;
+ W8 Z7 I) o) z/ |! o+ ~0 M: f例如:8 I% ?+ I. x# z6 s1 ~% G4 G3 @
<#div id="imfloat"></#div>
' _4 w5 J6 `& ^/ |
, v0 B" d$ y, k" U  J$ ?, n% |) x" u5 B/ }$ e
  相应的css为/ y( P' e3 a! ^5 e
#IamFloat{5 G) W9 t3 S* p) D$ v
float:left;
: V% M4 l; [, Y! W/ x0 v+ tmargin:5px;/*IE下理解为10px*/
4 w' T& \$ W1 b6 [/ O. [/ {) Z3 sdisplay:inline;/*IE下再理解为5px*/}
: |+ m, W7 A2 e6 [2 n
' a! \6 S2 t, C$ r! E  3、关于容器的包涵关系* S$ L; D+ X3 s( y0 \5 w

# ~" {, W9 t8 ?, a9 b; |1 a  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
( T& |/ D4 n+ Q- A8 G4 q: S- f8 |5 ]1 i$ r5 E; Y3 \
  4、关于高度的问题
- ]7 W6 ~5 k/ J
2 W( I4 D; N8 C7 F' {  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事): I+ S. I/ z" C' ]$ e8 g
) \/ d! Z+ A. k" M
  5、最狠的手段 - !important;3 |2 x3 r/ W9 C3 G$ F% U! V7 }# U1 m
, r5 p( L* ]- \- Q) @
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{/ ^# T$ s  Z7 d5 R4 x
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/0 l9 O6 n: ^, O$ I) l% h  u
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
; \2 |3 P$ t4 O- K( O) l: H" s) d4 T  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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