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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
6 z; G8 K. T9 C# t% J  m9 K5 i, J9 g6 w9 F+ \) }0 j. l
  常见的兼容问题:* {0 r# c3 x' f& D/ V% G
: s# C% W2 [- p! {; f: z9 u
  1.DOCTYPE 影响 CSS 处理( d6 `! }2 G6 S' H! W% K+ k# O

' N  Q+ o9 p0 ~* k1 i3 ^  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行9 |, E3 h/ j1 q# b% g/ v. ~, i
' R0 [- i; j2 o/ l- p
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
& @  r: j( Q5 e: Z1 F& }
3 L0 E& |  t) h$ K: k6 g9 @  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
4 s1 [4 }+ `7 s. p$ M4 M+ a0 C) a) U3 x
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式2 }, |, k9 i  h% W0 J

% x. p' s% z4 p. H" Z, A  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
9 F) O1 P4 Y4 r% \& |  E
% o5 L: M) K8 ^  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
- b2 U5 B5 R# K. W
' k2 |1 y2 P  p6 f  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。  w( `7 k, }  j1 q; R

, C7 o- z, u2 r7 @2 Z  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}9 s3 x% Y+ Q& M- C) O: ?( K2 g2 k
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}' l5 j3 r7 v0 R/ v+ B
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;% j" q/ [) @" M/ r

' R5 y2 K9 T, n1 D2 O* N  10.IE5 和IE6的BOX解释不一致
, C  o2 f) b' R  O; k5 ?  IE5下 div{width:300px;margin:0 10px 0 10px;}3 S' x7 X( ?% w9 m- R
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}1 g! A! J6 x; Z+ N0 K  \+ X& j
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
. l; ?+ }* K$ l' m
" _/ y: R5 ?% r9 }" v  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题: E! }( F5 ~* d1 \# p3 }) c

5 [! Y/ _" S' o3 a! g  注意事项:
* @; J3 L" ?/ Z3 e
$ ~2 p/ w+ a7 i4 D  ?, g  1、float的div一定要闭合。. _8 M! ?( \  V: e, z
: z  m  |+ F( C, @# n" d, V, u8 l
  例如:(其中floatA、floatB的属性已经设置为float:left;)
+ w% D6 A! C, v* I<#div id="floatA" ></#div>
+ ~' J) c  s) L' g9 d4 \<#div id="floatB" ></#div>
4 N, H7 v, H& G<#div id="NOTfloatC" ></#div>
! ?# J' H7 ?' [. X  这里的NOTfloatC并不希望继续平移,而是希望往下排。
4 Q4 g( z; x! [9 m( C) {  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。5 N$ J$ _  x" L. d5 l9 ^. m
  在 <#div class="floatB"></#div>1 B5 D7 P. |8 j$ {; x
<#div class="NOTfloatC"></#div>; Y1 t9 d& i8 }0 i
  之间加上 <#div class="clear"></#div>
" Q5 q3 x$ ]% C3 \, e, q  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
' D+ f; a# |5 ~2 U0 J" g; v  并且将clear这种样式定义为为如下即可: .clear{
& _& }& l% I; \8 @4 z5 Pclear:both;}
1 q2 i' y+ x$ Z2 E& ?8 [  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
9 a& N, S4 l0 o  P3 g  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
' B! F% {6 C( o! R  例如某一个wrapper如下定义: .colwrapper{9 I# U! d! `! A0 v/ ]
overflow:hidden;$ z) a0 x4 x" [: M4 i
zoom:1;7 U" l6 j1 }4 _1 j7 H
margin:5px auto;}9 t; [8 k' i* R. L& r; |. K+ m4 H

3 U' X" ^/ Q. _7 E- T" E$ Q% z) j  2、margin加倍的问题。) t/ M2 u+ F2 s3 ^
" G: `* k* J5 `. ^. K4 u' Y/ K1 n" g
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
4 O7 x! K# a  J4 u( x7 j1 _$ n  解决方案是在这个div里面加上display:inline;
' S- i, q, r) g$ k例如:
+ |! V+ a6 r5 D7 O8 P* D& v<#div id="imfloat"></#div>
# v# W; X  g/ _8 G: t; H: w7 {8 ?
. m8 Y2 {8 O% l& e! Z0 U" ]; f( |/ ~
  相应的css为+ b, ~9 g+ O9 U  u  v) |8 i- V
#IamFloat{
& K3 N+ W9 c' R4 |: P4 o6 Ofloat:left;
" C8 U( s4 r+ ?( y% I, @; K# _margin:5px;/*IE下理解为10px*/3 m. X; p& d" }! [- s* e, C
display:inline;/*IE下再理解为5px*/}9 A: X) v* h1 c9 j% m  p+ h" q- v
, r% h: [# \& H) z) G- k; W
  3、关于容器的包涵关系% q3 d/ J% }) G  q/ d+ }
  J$ ^$ _4 x7 y6 @7 j  Y
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
' Z. q9 r  i$ h* @- U- k: v$ ]! W3 l
  4、关于高度的问题
# ]% k: D9 G$ J" W. Y2 ^- U; Z& \& ~# A9 w9 ~1 h
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
& O  [, G* y7 C$ G& l  F" O7 O
& Y& D1 f; e. g! H; b  C5 U  Q: L  5、最狠的手段 - !important;
4 F4 j' H8 @2 e7 a

) @/ W7 u% C+ @3 A  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
8 L) \" V4 H6 c$ d! Z2 Qbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
/ m7 Q# l+ ?  |8 k% N; Lbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}9 E7 G: C% V% C4 h2 s  E. u, `
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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