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

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
8 ?; c4 p3 {' s1 s+ J9 t- w: q- o& ^
  常见的兼容问题:
4 C5 y" T5 E% B- ?4 p* A6 B# m" w
  1.DOCTYPE 影响 CSS 处理: f1 t( o% {( W% `" F# a7 u! z; i

3 C8 q, X/ w( @# k2 b/ ~  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
( w: `3 \% `8 n: @( }$ F9 |, A
- S0 e% @0 O3 E( D) n  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
) \+ p# V9 l4 n
2 {6 s3 o1 F/ I7 i  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
+ S* l0 v# A0 {* ?/ g# S3 @
8 [7 {/ |/ g& H. A  W. l  ^' @  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
; K/ b& M9 E  i  B6 A; w
4 ?& _6 ~) a! c$ c, U  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
, G3 N! ?3 [$ i  z7 u, Y4 X8 l! C: s" s  G) @
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
# ]! e* p" ~9 G, J6 J$ O7 p5 {8 Y% V8 A3 c6 x- o5 _* V$ t
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
; g* Z. f7 J3 n% E- A( H% _3 t4 E% c
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
- {( W! Y" ]$ C  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}: ?  B) ^! w: V* W* n0 r" Y
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;7 w5 u* v; o- S% d: P+ v
8 s+ Y& `2 X0 Z/ U3 F/ J
  10.IE5 和IE6的BOX解释不一致9 P' K# c% e/ _3 P% H
  IE5下 div{width:300px;margin:0 10px 0 10px;}
7 |# ~9 r5 _! Q; X2 m. K8 j  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}# U* U% |' z. S5 T! v: a7 D
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
; B" S0 q/ z0 O; A) H4 W  W) c3 S, {4 U
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题3 e4 m. o+ S  R" A7 y! v3 w7 j

  v& B1 f. T/ L8 x" @0 b: T  注意事项:; ^/ I! E- @! d

8 \# r' n' F, z  1、float的div一定要闭合。
3 {" \4 V1 l8 q  _2 c
9 R$ G- ]5 A* p7 U; I  例如:(其中floatA、floatB的属性已经设置为float:left;)
$ k8 _! ]4 \3 |! h% C<#div id="floatA" ></#div>
- k% L) Z% I. ]7 |' l# r<#div id="floatB" ></#div>4 m7 a% o% Q) j3 d: x- q2 g. j% ^
<#div id="NOTfloatC" ></#div>" M! R; c3 e* w6 T
  这里的NOTfloatC并不希望继续平移,而是希望往下排。& l# j8 {: X! p/ E- u* M
  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
7 Z: Y% x" i1 n  在 <#div class="floatB"></#div>
1 J# \7 |1 z6 t! x' m<#div class="NOTfloatC"></#div>. e. E8 i% g2 r2 \; V
  之间加上 <#div class="clear"></#div>+ {$ _4 K. ~# i$ M* Q7 C" j
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。) R7 c6 h4 }1 G1 J4 v3 Y
  并且将clear这种样式定义为为如下即可: .clear{# z# ^" c8 q/ r5 A
clear:both;}1 D) s# |! s9 p( Z0 ^+ G
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
5 F1 ^* R2 m% V# e5 E  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
; w5 d$ i5 a8 ~# Y; y  例如某一个wrapper如下定义: .colwrapper{# {1 F# T: _8 G/ S& {2 D$ v0 S
overflow:hidden;
3 k$ V* t7 A$ F2 M9 ?' dzoom:1;& a2 z" f* P; ^) {
margin:5px auto;}
" b- M% V* {( i0 W. d" L& F9 W' V5 r; `9 S: A+ C
  2、margin加倍的问题。3 E2 U; ^2 }% _3 N6 Q( t
) R3 p: J' b6 m9 D. R6 O
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。) l* j4 T$ \% K. W7 ^
  解决方案是在这个div里面加上display:inline;
: k; S- W4 Z) ~9 S* O6 m例如:
, c( ?/ ]/ C8 E<#div id="imfloat"></#div>
# [& n& F4 K! B# B+ j7 x2 G3 W5 Y* L# K5 v; u/ x
, I6 w! U7 Z+ J
  相应的css为( J5 a" _  V2 D
#IamFloat{
7 Z; o9 k2 |$ h# L# ~/ C. cfloat:left;
5 G2 N) Y: g2 x2 tmargin:5px;/*IE下理解为10px*/
% @' w* D7 @' g# t1 c/ i: Idisplay:inline;/*IE下再理解为5px*/}7 C# ~$ O' l( A9 W  N# x' b

4 N$ e" J) }- n; l1 E! u) o! W  3、关于容器的包涵关系9 Z  u  G! T& H

7 C' m. E6 R- m6 a# m, K) G4 h0 M6 j  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。7 O1 G) K# h+ u0 ?' @

* b. i3 O! u) S5 E8 ?  4、关于高度的问题4 N( X7 J4 l( o, J/ u) `

9 ^0 w& N1 y/ |, ~0 [! @  v  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)2 }  m* U+ L/ S$ |: c

4 Y6 D) o+ K7 p" b" l* d( s' `8 D  5、最狠的手段 - !important;
) S: y/ I9 r, `8 m
  ]9 @5 @# y* i! N+ N
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{; L8 H# d2 i% h& j
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/" @' l' ]% Z' U8 R6 y& |6 i4 r( p! G. y
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
, ], w7 Y$ s# B% ^0 X  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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