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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
$ m3 K3 K. B! d% _
: E( x" K& B/ S7 K  常见的兼容问题:
0 E* V: V, r6 ~& L1 x& j% G; O$ n& k. N9 z1 [3 v6 |
  1.DOCTYPE 影响 CSS 处理
7 c" S& b  r( _+ u4 U. s' \+ X
+ i3 B  d$ m0 M4 R+ z8 Q, S2 C  G  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
& H. \7 v9 z+ r9 T5 U2 A
' H% s+ m  j* P0 i& _  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
. o3 J  b* p+ {1 D/ ^* _" i: |. ~" Y; a( l, u& d# j
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
: ^, G1 Y% w# L& N* k
% i1 t% N# m  d: U$ ^  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式) D4 f4 u$ b! I  o4 I+ Q

, b. z+ H8 |! |' H  r  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行$ t3 I1 C2 x( k4 ?7 x
: F/ j# X* O! k8 x
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
7 T- y0 v5 W  w: p
0 ^8 E2 m0 \7 d6 c  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。9 S# Z0 a3 X9 C5 _- @  W
' H; T! F* [# C7 B
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}* D! P' n$ G' y9 x
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
  |5 q; f6 n& R" A9 j+ M. ^( u  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
1 e  V8 R4 y! U6 t5 O+ x3 x9 o* \. }: F/ K9 s' h5 H! F
  10.IE5 和IE6的BOX解释不一致
" i* }, d- f% G, V8 N% O  IE5下 div{width:300px;margin:0 10px 0 10px;}' a- ?/ z) k; n3 Q
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
& @& I7 Y" n: H4 X  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持0 u- ~2 J3 R5 G6 g; ]! a

% W6 O0 \' ^8 @3 S  ~  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
' o% F. E- A4 G. R( r: U4 x3 z3 r
: S5 x  ?% d4 E5 p1 x7 G  w  注意事项:0 [7 v* C9 h, `6 Z+ u$ ~$ ?
4 D# ?2 r5 M" Z0 k+ @3 p7 t1 |- W4 I
  1、float的div一定要闭合。3 q! M. i7 k. Y

7 d3 p3 N/ d4 Z: w4 p' h6 n) |2 R& l  例如:(其中floatA、floatB的属性已经设置为float:left;) ! N0 ]1 k7 |( \2 C" c+ K
<#div id="floatA" ></#div>
. }) x' q7 P* @% _# u<#div id="floatB" ></#div>
6 d3 x! U6 H5 [4 E4 w<#div id="NOTfloatC" ></#div>
& G* z& O1 t: v  这里的NOTfloatC并不希望继续平移,而是希望往下排。
3 ?/ }3 Q7 a' t1 i2 r  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
8 ~3 B; D% E$ O  在 <#div class="floatB"></#div>- w8 D4 Y) w" F. ]0 b
<#div class="NOTfloatC"></#div>' L8 z, K. l$ `# G+ K6 |
  之间加上 <#div class="clear"></#div>
% V0 n# g% b4 u+ `# l2 b  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。) Z0 m5 N, Y% D7 ^( @1 _
  并且将clear这种样式定义为为如下即可: .clear{( P9 u4 ?( Q, @+ O1 ~3 E- ^
clear:both;}
- N0 m( [* q6 ?. J/ p# O' `9 i  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
$ D) S/ `5 b/ r6 N" T  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。# O1 [  Y$ R+ @
  例如某一个wrapper如下定义: .colwrapper{1 \5 \3 g; L& [  T2 i( F1 T
overflow:hidden;
! a! g6 ~% t( O1 }0 _) M* Pzoom:1;2 p3 v, ^2 x$ \6 ^6 z9 @
margin:5px auto;}
( U( P5 i9 g0 b; r) e: J4 u- t" R9 h8 L7 s9 J
  2、margin加倍的问题。
: i" J. t1 {6 N* O
6 ]. ?8 w9 o7 R' \, Y/ k  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
0 [6 G8 r6 a/ K3 e  解决方案是在这个div里面加上display:inline;. ?. A4 G  x' ^1 `! u
例如:0 W% |* T" p, z' z! R- e7 H
<#div id="imfloat"></#div>
9 O5 ?+ F6 x" F! z& C7 y- X9 Z( ^4 U& ~

4 N1 ^! R  W$ h+ q; t  相应的css为
+ i' J  N3 w) s* A5 d) I- b#IamFloat{
6 J% [! r! ^' A; O% b3 A2 z8 wfloat:left;
$ u, ^6 ~7 M, l6 }( T  G: L- }margin:5px;/*IE下理解为10px*/
' \7 p. p* |6 E( \  ^6 ^display:inline;/*IE下再理解为5px*/}
" p. t: e% B$ M  ^$ |2 E% `2 w
7 o7 z( j  \) q0 p8 ^% G0 A" _  3、关于容器的包涵关系; K& k! P# [5 d) A' J4 D
+ \9 V4 T, U  X; R( [0 t
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
: M1 s) S9 r/ o% c
# |& _; o: J, ?5 i  4、关于高度的问题7 c( [; a7 w, A; W+ ?! d( M
5 q  X: P8 n& \
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事). v! j3 \7 j2 ^2 J2 E. X. {0 c- j

5 I' g& Q; K7 ]# r  5、最狠的手段 - !important;
+ _; ?  V9 i% m/ H+ f0 ~; F) p

$ h+ ~( Q3 B* @' X  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{& ]/ i" t; W3 ?# p* x$ u- d
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/  K& z/ y- s8 p7 ^4 }
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}% k! i. M7 c% t8 ]2 H0 _
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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