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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。) n! H+ [+ Q& Z, m6 g" y4 f( _
9 }) z, V* c4 V, A
  常见的兼容问题:
5 ], l2 |: }  J" @. p
4 S2 s. n+ N( v& X$ D  1.DOCTYPE 影响 CSS 处理0 z* h" H# `" J# U2 [

* t7 D! i8 V! E* I' S  @7 J% L  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行$ E9 L2 H" c/ P2 Z% T& u% C

, W; S) {4 B. e& j+ A+ g( T  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中+ u& t- ]1 n" j9 U( @- h' Y; r

6 K2 x' ]" s+ H2 Z7 M2 `. R/ k1 a  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
: ?7 j" M) ~# D8 I& }
! Q. D4 S1 l( C  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式% _3 U) o% F' t0 d! M* M* O
9 s5 R" f; {( ]8 j
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
  s+ K. M6 z' \' f$ N- w' }/ o
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
9 S6 ]& R8 |8 [& m5 }! F; [4 o
. [/ W) k( z( a) q( E  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
/ e5 A% a) l, b* Q- s& Q, V5 f2 Q2 A( x: D3 B* h
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}  I# \1 i* v. N, l
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
" i% x! ^; Z$ C9 q# k2 d% ^. G/ c( k0 T  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
5 ^$ R! t! w& Z& ^* |- {0 M' j8 n3 ~3 r( B* ^$ b
  10.IE5 和IE6的BOX解释不一致, X- O" f1 u9 p. y! B1 B% u
  IE5下 div{width:300px;margin:0 10px 0 10px;}: J3 {. X$ f- ~8 Y* @2 M
  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}6 u% e/ z* {- G& z2 f
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持" N" D4 o2 I7 Z7 S

2 }- L, p" l' E9 I  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
, h7 k" O* T, _6 M1 |6 N) y' ^5 c
, d2 ^. x; c" D  注意事项:( x  U5 J7 `2 M5 F  ^3 P
8 n1 W: R4 x  m2 N. g" p
  1、float的div一定要闭合。
5 {8 e8 h: E$ |+ r7 T; H0 U& z9 |7 u0 I* v% \7 O: i
  例如:(其中floatA、floatB的属性已经设置为float:left;) . [" f) m$ ]+ R: _* f' m
<#div id="floatA" ></#div>7 E+ p7 Y  N+ \) I
<#div id="floatB" ></#div>
* u' C7 q5 i0 P<#div id="NOTfloatC" ></#div>/ k9 u+ k* F: u
  这里的NOTfloatC并不希望继续平移,而是希望往下排。- B* x, H. k  Z
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
- H4 s  K; G6 h& u  在 <#div class="floatB"></#div>
4 {, ]) J( \* K$ G; Q<#div class="NOTfloatC"></#div>$ j; c+ J# h) @0 B. X
  之间加上 <#div class="clear"></#div>1 m! _+ q7 s7 G& V3 L
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。# e- \3 h5 p! Y" t
  并且将clear这种样式定义为为如下即可: .clear{
! X9 i& E3 h, V# n" }clear:both;}
3 d, W+ Q; I% T! d  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
6 V! p! ]% ~: f  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
/ S! X0 W$ O4 d% x& {0 A& z  例如某一个wrapper如下定义: .colwrapper{. F) D$ Q! ?* z; S9 x( [5 u
overflow:hidden;# I% Y! J* E: M# h) r
zoom:1;
. b/ x) Q3 p# [margin:5px auto;}9 {8 z5 f) ?: M
  Y! C. Z1 d. {
  2、margin加倍的问题。; r8 z& f, t3 n# z$ F0 A' h! q
4 W4 T# T1 y# s4 _# W6 L8 y/ K* U
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。0 C$ n( J( ?! t
  解决方案是在这个div里面加上display:inline;# a( }+ O. f  k8 u  H9 A5 _
例如:
& h% g7 A. Z% t# a  A3 J5 g6 [! o<#div id="imfloat"></#div>
, w$ s0 ~2 R9 J4 Y3 o" j& }3 V3 ^$ m' ~* r9 l
8 @- V5 z. A; p  ^7 e+ Q9 R8 H, X
  相应的css为
! @; h( B" R' f0 S) n#IamFloat{& V2 S3 ]# w+ K/ D! b4 B
float:left;4 b% G+ j: o  `" I
margin:5px;/*IE下理解为10px*/
( u4 o) K& L( Xdisplay:inline;/*IE下再理解为5px*/}
- }4 z; N% ^2 D' g6 Z; w7 T4 v5 W- r! J- G# l, r% k
  3、关于容器的包涵关系! ~1 J( f4 j: ^& U% j
; c, t6 o( l1 j1 g
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。9 e1 `8 c* y$ f# T

  F/ O( X% ]" }& d3 e. l4 l3 r  4、关于高度的问题/ R; U) {" n. p1 T: n7 Y
$ Y: [1 g2 b; K: @, {5 s
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
1 @/ `: {* ]& Y- n+ f$ Q0 k  {; k, D; c# L* W6 |/ @
  5、最狠的手段 - !important;
6 d$ M3 v5 C/ P1 y5 I- v, I2 n
. }) y" }9 x9 t5 a7 v
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
  t7 O4 r  s' _! H  z; K3 Lbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
. Z% B2 e2 q% X+ F. s0 dbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
) {9 n+ I% U3 t" Q  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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