返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。% H6 ]9 V: J6 _7 P) H
$ r! Y( f( O- R: c  [0 v
  常见的兼容问题:
4 w: Z  v6 W! j7 V* o, p
, s0 `; k7 _( B& R4 h  1.DOCTYPE 影响 CSS 处理% f" X; H6 V# A2 H0 `9 D  ~
+ h7 o7 ]- D5 D; C8 P
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行/ s/ \( |/ K5 P; a! X* P
5 Q$ E* Z2 l: G0 I' A
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
# N7 P  S! `" n* Z# w; _8 [  w
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width/ ?/ l0 c/ ?4 _2 c0 ~4 S

7 k5 W  z) Z9 Q  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
! Y& I0 [+ O5 h! C# ?! c4 W8 m# z9 K
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
+ x$ ]8 T, W5 z; T) q1 f: b
8 Y  }/ z4 n. u1 U+ C  G) }  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以+ v+ L/ D- L. g, S3 c
$ s& \- V  I4 c& z8 o
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
9 k# R! q( J' g  ]( Y% ]0 A
- R' G/ V3 W: W2 A$ A! F  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
1 L9 s1 s6 d) ]: ^5 I, A8 q  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
3 X) t- r" f1 v4 V4 a' T9 {, h  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;$ y6 f. }0 l* |

; b* m5 ?# T% @; z* c% N  10.IE5 和IE6的BOX解释不一致
2 Q0 @5 `5 N0 ]7 t  IE5下 div{width:300px;margin:0 10px 0 10px;}; A8 l$ f+ o. i3 D6 I
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}& z% Z. g: M4 x
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持: T' b: z2 D0 F% m, s2 ?! v: u
* d, k) L2 [0 `; ~
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
+ k" b5 P3 [1 \7 n7 i2 W2 v8 A9 X) H- f  k5 P. r* e  R
  注意事项:
4 `, z; a' [  x* d2 F! T% L. H9 V( ?" D! i: n8 b0 Z
  1、float的div一定要闭合。
% s9 L5 m! w9 G' J! |9 S( |4 f, H/ R8 K
  例如:(其中floatA、floatB的属性已经设置为float:left;) : O( `* {9 Y! U! _! W; Q0 H
<#div id="floatA" ></#div>
# Y/ g/ y+ g7 n<#div id="floatB" ></#div>
* F! g% x# z, B+ q6 A<#div id="NOTfloatC" ></#div>. V1 o4 n- R5 C7 \! e' g
  这里的NOTfloatC并不希望继续平移,而是希望往下排。  j' ?# j9 q' ?2 l8 X% {( u7 ?
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。  ]. L% ~7 ?/ s" L6 P/ p( Q
  在 <#div class="floatB"></#div>
# P: w/ I6 Y4 E# \! [9 ]" `" b<#div class="NOTfloatC"></#div>
+ M0 G! y4 `- e$ N* U  之间加上 <#div class="clear"></#div>  a1 Y; W$ @# m! G. x  y) _
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
7 o/ [5 }1 G+ D! B, _1 l8 I  并且将clear这种样式定义为为如下即可: .clear{
0 b5 {9 M. r1 b7 cclear:both;}3 A8 f: t1 X6 B+ i! ?5 s# Q" x
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;* f6 K0 E7 F% ?2 m" v% U1 v  V
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。3 v& W( b8 v, o' ?$ G: h" z+ h
  例如某一个wrapper如下定义: .colwrapper{
/ j5 @# l7 F- z+ h) noverflow:hidden;
9 F. O2 b$ Z4 H' Q/ F6 Szoom:1;' Y5 _1 j# p4 z. z( V1 Z- ?
margin:5px auto;}/ }! ?+ c3 L1 F

& e! S/ B+ |! l3 ^, |0 v  d  2、margin加倍的问题。
2 b* u% z& C9 f! w$ w6 i; F' ]
$ c$ g) y. L" U. D4 k! a  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。- s* _7 ]3 ^, j) B, ?" H
  解决方案是在这个div里面加上display:inline;/ k; H& m, l! w4 b$ m
例如:/ E8 D; _; q: O6 L3 a
<#div id="imfloat"></#div>6 A! l! d1 G& p+ }

- L& g: R5 T4 X& V  H# j$ P" y( i4 R2 Z0 `6 a' n5 }# Y" `
  相应的css为3 @% P6 ~: l. p# _# O8 I
#IamFloat{* p! a3 h1 a( @# _7 Q, I
float:left;" j4 A% O5 |' r
margin:5px;/*IE下理解为10px*/( Q+ \; w: J$ ]# b( }+ ^2 X- W
display:inline;/*IE下再理解为5px*/}
, @1 A' D  }1 U; _. {
9 b9 Q3 A0 l% s  3、关于容器的包涵关系
4 P  J5 Z# c" I% a- D5 i* f+ p. Z6 W" W1 j" {, P  y4 O1 a) C: K
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
+ e0 O& ?: h! x5 {2 u$ C; B
  t9 x0 r3 D. y  C  4、关于高度的问题
$ z% y# {9 \' q6 r. L3 s- R  _8 c' z5 W, V4 _4 Q. T
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)+ q3 X6 k/ `$ _) h  n5 m; s' n& @
, ~" L6 o& Z' \  Z
  5、最狠的手段 - !important;
+ y+ W' ?: u2 z7 `3 R: r% j4 M+ I) o
4 ~2 \. q$ c- {& b2 p8 P4 _
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{1 b& x# Z. F7 I2 ]) b+ c% u
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/9 u8 y3 n3 P5 i2 I+ n
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}+ O7 q; D7 u8 y8 p) }8 G
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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