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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。4 d6 {5 s2 [9 _& b9 b' [) x

  h$ E, b: \! p2 q  常见的兼容问题:2 @1 O* _  o2 U( Y# F& Q
9 F8 g3 ]5 L8 e/ D& ]
  1.DOCTYPE 影响 CSS 处理
7 B9 |) L" l2 j# \' l$ H) q& V
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
# q5 D/ [, y$ \8 K+ z) n& A
3 A% g* I0 B! ^) [9 w  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中7 G/ G8 O' o0 z* q! x6 t

7 Z. [6 V# L0 N  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width  R/ ~3 N+ ^) p$ a' T: [4 H

# f$ y# B3 U- w  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式  ?, ]4 b* \& W, e
9 R% b* W8 c7 y$ d" r
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
$ R8 E/ {6 V" g7 A$ L$ P. U# y7 r) p( n0 p4 S* l; O7 l4 M3 f5 D$ ~
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以1 @' H9 j; y5 q' }6 F
" D$ G: j% V7 k" q
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
4 ]) d  n' w5 ~' F9 U  F5 k+ E
* v* f# m5 E  s9 N* A/ l  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}& E# r- m) {/ |# U8 ^- t2 o
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}# Z- t3 @2 `3 M
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;2 Q0 A1 }/ |/ S% J6 I
# s" H8 b* u% z9 W- S  d) Q' \
  10.IE5 和IE6的BOX解释不一致% a9 ?9 u. p  S# V" E- V, f, i+ S3 b
  IE5下 div{width:300px;margin:0 10px 0 10px;}- r# y8 P8 \- B7 l  ?
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
- b/ O6 r+ g4 @. e3 O4 r  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持/ j$ y* @3 N0 f. u5 s

; _& L8 X6 h! K, B# ?- f* x  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
; C$ N8 g6 a+ M
( ~! B, u5 r9 C' X6 D- q6 H  注意事项:. B) D) |1 K6 B* ^, l
7 Q* O+ i4 O* e6 M$ w5 u, j  S
  1、float的div一定要闭合。
, `, j& Q! Y: }; `. R" P
# O) t- s& ^! y! \, g( F  例如:(其中floatA、floatB的属性已经设置为float:left;)
/ i. Z% x" j0 s<#div id="floatA" ></#div>/ f  M' V* {6 I
<#div id="floatB" ></#div>2 w0 X% F' |' _, Q5 {5 }( s8 i  c
<#div id="NOTfloatC" ></#div>7 q: A$ d4 e3 D* e: u& W
  这里的NOTfloatC并不希望继续平移,而是希望往下排。9 y# W3 a; |  R4 P
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
& q3 c" i5 d+ ]4 a  ~: K/ M  在 <#div class="floatB"></#div>) h8 v" @* a8 ]  p1 z
<#div class="NOTfloatC"></#div>
- j2 {  t) u7 n  之间加上 <#div class="clear"></#div>
  V* f- J% n! H. h  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。7 N5 P7 ]( _$ ^* j
  并且将clear这种样式定义为为如下即可: .clear{0 y" g7 J9 ~* E8 q+ ^' P* T
clear:both;}+ w# ]2 k) ]& |0 Z# L
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
" E0 L& Y5 C  z$ f" F; I  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。  g- A7 b% F( R1 Y* T% C* {3 H
  例如某一个wrapper如下定义: .colwrapper{
) x: R3 I+ C6 @) d  I  coverflow:hidden;/ D5 X! E; y9 ~0 x
zoom:1;
; z* c0 W( ]5 C6 E& V  E5 z5 r* fmargin:5px auto;}
6 v5 h: J9 Z6 R. I% N" ]$ F
2 L7 `1 h: ^+ Q) K0 [; E5 N  b  2、margin加倍的问题。1 z8 V' m9 c0 f$ C% Z5 k

/ V3 Y& D) R$ i% C  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
, Y% K6 V0 Z, d1 t! P5 x  解决方案是在这个div里面加上display:inline;1 d( A7 `, K' j2 u
例如:4 s6 c; n3 O! [+ ]
<#div id="imfloat"></#div>, N6 B) t( n2 E9 v
- H1 y) j" z3 _8 I

" A* \7 J1 D0 f8 Y. y  相应的css为
5 F2 c6 q4 C& k  ~5 L#IamFloat{
5 s# r2 I/ H4 V  O! i' D- ^1 @; Tfloat:left;
! ^( ?2 s; {' Omargin:5px;/*IE下理解为10px*/
- T/ r# T6 d8 z/ x) Tdisplay:inline;/*IE下再理解为5px*/}
8 M; {7 p- i0 g* _/ y$ g; L7 n
+ v4 {6 f0 x% C+ Z' m2 s0 \  3、关于容器的包涵关系
- a  r9 O% ^9 x# P. v3 q! q8 R5 ]1 c% ]1 C6 G. ~3 @1 Q. r
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。! E0 V* c" m9 d( n" `7 d* x9 {4 o! I
/ l6 v# j. m( K3 s
  4、关于高度的问题! F; }$ `/ G+ T* e

6 f% f9 t5 N4 y: K: g0 R  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)3 _9 A) f! C- z  G- n

, ], @+ B. q2 }" a; l8 h  5、最狠的手段 - !important;% u/ h- H/ S6 ~# S+ G; n
$ d" h! k. k4 R
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
1 s3 K$ V, X  V6 p0 }& ~background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
7 e3 i; s1 w! K5 g# p4 M2 p2 |background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}3 L) Z, w* m7 q) }$ N
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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