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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。) T3 ]9 Q& O2 {4 L6 I  c

5 C3 e+ M/ e2 V; C% M5 w  常见的兼容问题:
( J# {- ]$ M, Q! m$ v* Z! c9 V; ?& u) e+ N0 c
  1.DOCTYPE 影响 CSS 处理! r: M4 w( G$ L8 r

6 S& [; C" G) o, A$ t7 ~  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行0 I2 b2 B. _4 [* W
  _& `6 Q+ Y! U4 {; I1 q0 ]- K
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
$ }( V6 N. h, j' T
3 h2 `$ B; Q2 `& H0 Z- i& @! t  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
. F- V5 R) V7 U6 W
) E/ j" p/ r9 x; E& `  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式$ f( g3 e' _3 e
" r3 v- n% C9 C# I' R
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
# g' Q5 z5 h! F. ~3 l" i3 x" R' j# c; O! r7 v5 n
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
- {2 C. _' ^+ L; J! y
+ H8 f9 w) v1 x  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。6 D- W. W# G) C3 Q& m
3 C6 ]& P6 k# I7 h4 l5 z3 r4 P
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
3 k# q7 J: n. p$ H1 E6 g$ ?0 Q6 i  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}, U/ Y  _4 G8 Y7 M9 Q: ?5 X# `
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;  @; f+ |1 R5 |
& W2 z3 p9 s5 F; b' X. e$ B! \
  10.IE5 和IE6的BOX解释不一致: f$ e4 c8 n5 d. Z$ Y7 L
  IE5下 div{width:300px;margin:0 10px 0 10px;}
9 E2 }) |/ R. d7 z5 r8 B  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
! @" h) |; {+ o5 G, I; a1 V  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
1 z8 o# R( ?8 ~" |7 f8 C9 C7 z+ r: c* l3 B( F/ Z
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题7 D1 q" A9 T  v& Z' l

( ?1 K' z" O& c7 Q  注意事项:
( P* j( J7 f* V7 T
# X) r# I1 K4 F0 }5 ]  1、float的div一定要闭合。3 p$ j# _* e5 e" A. d; F9 J
# n, F. H" x% e1 Q% F6 i$ L  p2 I
  例如:(其中floatA、floatB的属性已经设置为float:left;)
9 b; y9 e9 J6 @* T; ?<#div id="floatA" ></#div>0 i4 [% ?/ P5 ~) C& ?( J
<#div id="floatB" ></#div>% }/ t; ]5 S6 Z) d6 O
<#div id="NOTfloatC" ></#div>  d% d* [: u2 ^, E5 f3 b2 ]; Y
  这里的NOTfloatC并不希望继续平移,而是希望往下排。
7 S6 M$ _* `) D  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
' k# ~  N( K, \  M: C# m  在 <#div class="floatB"></#div>. s. k4 [# c% ?. o# y6 s5 j! M* q
<#div class="NOTfloatC"></#div>: r% T5 U$ C3 X
  之间加上 <#div class="clear"></#div>1 Y5 e- G+ }1 V
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。  P# W3 o% s! x; v5 g9 k" Z" ]  v( e
  并且将clear这种样式定义为为如下即可: .clear{/ E$ x# f  M+ N
clear:both;}% _* d, d/ Q* z- [7 @" P
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
4 v% X1 ^8 T  B- y6 b  D  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。) O8 g8 P- \* r+ V& c. o* M% g
  例如某一个wrapper如下定义: .colwrapper{2 e4 ]* T9 h! D8 ]
overflow:hidden;6 h$ I& ]6 h% K: G. V/ c  g
zoom:1;
$ M. h. @5 }  z5 T$ I: V7 Zmargin:5px auto;}5 w# k" U* t+ y/ f

5 @7 j; k" |! n7 d  2、margin加倍的问题。: M! }- y& G' f6 \1 E$ Q  O- _
$ i7 S$ a6 C, s# _8 H! b+ r+ k
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。6 ^" W4 c: X) q: E2 V2 `0 I
  解决方案是在这个div里面加上display:inline;
- U9 W/ L; p& }例如:2 ]. @1 u& _# A* }. t3 d8 [7 o
<#div id="imfloat"></#div>
% W2 H. l. X7 m) G" O
5 A9 T  R! T% V: F2 h
4 w- q5 P# f* {* l  相应的css为4 M' v& b$ n' s$ h
#IamFloat{" u# y; t: ?; h7 c; H
float:left;
- _& t9 H+ R" f+ s, A0 s6 @4 @2 S, _margin:5px;/*IE下理解为10px*/
6 m1 X& I8 n1 l6 b4 i( Hdisplay:inline;/*IE下再理解为5px*/}7 r  }& a$ Q0 x" w) |. K) V
" k; _9 R, e0 _- y  B& q
  3、关于容器的包涵关系' _: U7 Z0 a9 D8 ^0 t

. u7 r+ r: F1 J  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。& E& y4 Z# Y: r5 ]( N9 j  B. x
+ }. e+ i% T; ]% G1 |0 E
  4、关于高度的问题, z# M: j; C, z4 F. f

" _( ~8 w! V) U! l  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
$ o4 w9 V$ |3 w4 l8 N$ X- q: w/ C  L  X) m
  5、最狠的手段 - !important;
( ~9 z( p7 g9 L% q, M4 K: U

1 K4 ^* U) C' B/ O: f  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
4 k3 d8 J- G5 Z/ {( Pbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
5 h5 ?" Z" ^) Z0 V) Pbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
/ A% D4 I7 j+ A( h" x+ Q! X  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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