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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
3 T  D" a% v2 q' q) _
  h8 v9 p, ^: j' y  常见的兼容问题:
* ?; I1 ^# v1 f! e9 y' G2 x  s# t  U& h1 d# t
  1.DOCTYPE 影响 CSS 处理& u0 M3 a7 k" y# F. m

% P/ p- A1 l% w' Z" f6 W: G  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行: P7 e3 n" d( K5 S$ I8 H

4 a/ @2 x+ \6 V1 d6 Z. ?5 _  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
  f9 g# ?$ m# k, u' L+ z  o2 k0 D
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
- Y8 }; A2 q, D$ o5 K) ?2 j
. k5 c0 W' v7 P, o6 p) U8 F+ m  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
, A9 ~  Q( j; V7 j* v2 P8 e# E+ p3 F6 R% \
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行4 ]4 {1 p" Z% n8 o

# w, \8 J) }: {7 B: [  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
$ W1 Z8 j* K% @; [- T& `/ d6 L) E+ Q: a
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
, ]) s9 k' ]2 E8 D% h
- z" T2 n% e% j4 z  T% a  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}2 x' _5 [* w  Z' ]( ?* `3 A; Y
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}; R0 @' `, F$ @0 `8 m
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
% K, _7 v% n  n! q2 F. y9 l" j1 z( w& ~3 F. I' d
  10.IE5 和IE6的BOX解释不一致7 @( b# w3 P* v; [+ S( t0 \
  IE5下 div{width:300px;margin:0 10px 0 10px;}
: C4 E) m4 E; V6 J0 S: F: H4 f  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}# b1 d# \6 a" k5 Q6 ?+ v
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持7 R  k+ O4 n7 U% V9 P& t
: ^3 o7 x; L- C$ B+ r9 C8 u/ J
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
2 S4 P% A0 j2 U" ]- r3 ?& a+ e6 L8 B6 W- W; m/ G" j+ S* r+ i
  注意事项:& e; P. B1 f9 c1 O) `
7 v  ^# F, h/ u+ v9 `( o% Q0 z8 {
  1、float的div一定要闭合。
3 _) B+ B# ^, K' D+ I" V
2 n1 }4 |) z2 z2 e, C" c7 t8 p$ |8 S  例如:(其中floatA、floatB的属性已经设置为float:left;) ! H, V6 ?, Y0 F2 f( m' }$ Q: ~" o
<#div id="floatA" ></#div>! Q8 u+ y; Q9 I9 W& Y. |8 a/ N
<#div id="floatB" ></#div>
6 f6 H# R1 Z" L0 j<#div id="NOTfloatC" ></#div>
$ f; B* V3 f' {* t: i5 p$ T7 w4 ~  这里的NOTfloatC并不希望继续平移,而是希望往下排。' q0 `4 \! W% i' O, u
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。; u+ K/ w0 S& d/ N0 D& |
  在 <#div class="floatB"></#div>
4 m  m% ]4 e2 `7 G<#div class="NOTfloatC"></#div>
! ~. ?8 C; |8 g& k/ g  之间加上 <#div class="clear"></#div>8 D# g" [7 x- I
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
2 Q6 l1 j$ z* X1 j# O4 T  并且将clear这种样式定义为为如下即可: .clear{
3 z9 ?, C3 J# e2 C* Q5 Aclear:both;}. x% Z( g# Z. o
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;! s1 e! E% A1 K; f) ^6 ?
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
0 Y0 s' I6 v( A  例如某一个wrapper如下定义: .colwrapper{6 O# ^7 E# I- d1 f# ^1 q
overflow:hidden;
' z  b0 B! L! ]3 C% mzoom:1;2 a3 Q6 @% c& ?
margin:5px auto;}
0 T* {9 C  n( u  s/ E; Q+ C9 l* j6 @
  2、margin加倍的问题。
3 ^( n, Y) s, }  i, L" |+ @  R8 J7 `4 H# i+ ?# [# Q
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。( T3 |+ B) Z2 i3 B) J6 S
  解决方案是在这个div里面加上display:inline;  }/ Z. A4 d& S" u
例如:$ k2 k- t4 B! {7 f5 x2 F
<#div id="imfloat"></#div>
( i3 S4 G9 ?# @- U: L) V  C
) q/ @3 o" o$ H1 `; S
9 a2 T! A) e& e  相应的css为; y/ B' Q! y& T, q, F) s
#IamFloat{
* z" X& `  X/ g; Tfloat:left;
& }/ D! p0 w+ I4 F6 nmargin:5px;/*IE下理解为10px*/( S4 w/ D# Q/ |" T7 o
display:inline;/*IE下再理解为5px*/}
; S$ E' X  O. x- [! U
' W- ~: c) k( ^7 \$ c1 V2 D% t  3、关于容器的包涵关系
- h/ V7 c' x5 t$ G0 x: O% _
, P! r' ], g/ }2 F) j  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。* J, W1 m% J9 w9 [$ G, @

* O) W4 ~4 j9 u# w  4、关于高度的问题
  M) Z/ q$ \. {1 k4 B- E3 v" t5 j5 w. J# Y7 u4 C* d4 _- G
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
$ e3 ]2 H) c. S$ ~2 D! B+ A2 g) \+ w; b$ w5 k7 p% O3 P. a
  5、最狠的手段 - !important;3 @0 ]4 u1 }( a0 o+ ?+ v% y) l  Q

2 `; ]9 c: s0 r4 R. @, ^  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
) h  L8 K0 v( Q0 Gbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/. M/ X  B% H: X
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}, g6 Z2 }+ |; g' O
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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