返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。4 B7 Z0 R1 i; Y' j8 c* g$ U* e

. }  o4 Z7 v4 p6 c+ ~  常见的兼容问题:
" T1 I' u( V! _" E0 `4 g) c' [% ]0 Z) P  ~& N
  1.DOCTYPE 影响 CSS 处理# _! D2 I; v& M0 j1 L

) S. e/ u# B7 P  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行. @3 R% Q) M: J; v5 z8 Y4 {
; L7 h( S* ^& `- q
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中" f# Z: B5 g2 z' R

  q$ e% u; i; d8 |9 r" Z* l# r  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
) b2 p8 D  I3 N, s: k  A; J+ A1 F( D) \& H: b# k$ h2 @
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式, v1 c% |6 `. i

' p6 \, d, o7 p9 A6 U2 K1 Z  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行  i& N% [2 @# q. |) F  V3 Y

; h# J" s# d4 {  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以: d5 h9 W# O8 R$ ^+ C7 ^& A$ m4 ]% F

& h- W; Q, F& |  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。; S. J- o& c- h0 T' ]( }

7 }9 M: Y  C# B! i! Y( a9 l) _  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}) j9 _3 C" U7 M0 {8 U0 c. \' }
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}3 o8 {# B' f$ \9 y: f! t1 d
  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
9 E% [0 b" q  j& I- n$ b: ~, A( d" V2 s" L4 y% @
  10.IE5 和IE6的BOX解释不一致
: N) J% f8 E6 L* {0 I* a* M  IE5下 div{width:300px;margin:0 10px 0 10px;}
3 G/ K7 q  A* ^$ }/ f5 M  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}& j! D. U2 e6 r, U) T; F
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
  T! p, w# h% {7 q3 S0 {! n8 D! l0 p' T3 s$ \
  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题% H4 Z. R+ y2 ?1 ~7 _

+ J, w& w( ^8 F# W& H  注意事项:
' ]4 f( j( z4 O9 o4 N* j; H6 r
3 P& ]# f( P6 \/ r( Q: a  1、float的div一定要闭合。
" F9 z# u# N2 Y, h
9 w6 ?. Y7 _  Z% v2 `0 f  v  例如:(其中floatA、floatB的属性已经设置为float:left;)
! I4 Y5 x  q. ~<#div id="floatA" ></#div>
2 y4 E* F8 n1 _/ j5 G& U) \<#div id="floatB" ></#div>
* |( G& @. B$ W+ b, p<#div id="NOTfloatC" ></#div>) H5 u; \( s& f  S0 S
  这里的NOTfloatC并不希望继续平移,而是希望往下排。
# g2 q/ q2 O" V% |; z) K" C9 e/ v  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
) C& |' o. J+ V" \: q# _6 h  在 <#div class="floatB"></#div>
2 p- Y  s5 a$ q0 l1 o<#div class="NOTfloatC"></#div>
- m4 r3 R, B% E  之间加上 <#div class="clear"></#div>5 j0 t; P1 [8 u( t. I
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。2 y2 F4 f3 S( h- ?
  并且将clear这种样式定义为为如下即可: .clear{- F# R3 X$ @5 V7 A- k
clear:both;}* x: r0 l4 {/ P0 X$ {& p
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;5 P( ^* g) m- i) {- _9 X  Z1 j
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
) {, D9 X& v0 [/ J  例如某一个wrapper如下定义: .colwrapper{: t' y+ m6 E; w% g) Y, j
overflow:hidden;: d! E5 C9 I. O
zoom:1;) x- b5 w" K. U0 q8 u2 Y
margin:5px auto;}
! j6 k. G) w' e' M& x% m" x" B0 E; j+ k1 h& i
  2、margin加倍的问题。
! g0 W% {! J5 D% s0 Q/ E# t2 t' r0 i3 l
  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
6 ~4 `8 I% A8 h7 j! ]2 j  解决方案是在这个div里面加上display:inline;1 X4 i& A% |  x6 s
例如:
- x8 \3 i' |3 O0 k5 @<#div id="imfloat"></#div>) e" O) t( o# f9 z0 B, p3 l
9 Q( e: y/ u. v7 \; i

7 L* j2 y, E" a  I0 }( S) d  相应的css为, G" v6 `% y* ]& X# f
#IamFloat{
) v) m: W1 E& sfloat:left;& }6 v9 p/ @9 E( x" T
margin:5px;/*IE下理解为10px*/5 d, U0 q% T# ]' \& T  R2 z
display:inline;/*IE下再理解为5px*/}* X& b0 |) G8 O
4 ^; x: p4 I6 b, Z; d( A5 ?
  3、关于容器的包涵关系0 z! P; ]* w% C* m
- u* p/ m4 K+ k# c1 g9 |0 Z9 j
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
. \4 u7 u2 n9 ~# d" ^- Q* b$ Q0 H7 s1 F0 I; S
  4、关于高度的问题/ E4 O0 o0 f( a0 Q$ \& C* ?
: K/ m' x6 E/ d  s% n+ o7 F
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)0 v* a/ U& u* e( B* v$ i) X

. Y- i. h; |% v# g6 U  5、最狠的手段 - !important;
, ?. e+ V1 V' c3 }4 ]! V. ^5 U

$ ?) Z. b: T7 s. B1 i  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
& {5 Y. V+ S( J/ l3 ]. ~background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
" T# G! m& l" X& k) Kbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
- O) F0 n' ]1 J+ U' S  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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