返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
2 j8 q* {- d* X! v3 x, Z8 N
; @( F! O; X% I$ k4 s  G  常见的兼容问题:
+ w$ G; l) f- ~) S# o7 d! ]* i. l% r1 r. \
  1.DOCTYPE 影响 CSS 处理) |/ B5 {7 Y4 H, C6 \7 B

! j! [2 `/ S5 p( o% e6 f  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
7 t% B5 j. A9 ?' g
7 u: Z4 V  v4 \  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中9 \  G6 j- _' t; Y" ]: d
7 `/ Z3 q7 B7 s/ I  J4 b. M
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width& p. d( }+ u. Q
2 }$ X8 O6 Y; T$ R& q# [
  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式" k2 `. v( \. K
! f& B  T* N$ ^7 P* [! \6 e
  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行/ ^7 k3 }% I4 Q/ X0 ?
* T( I. @% k2 e5 k2 W0 O9 r) ~
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以5 f4 P( y: e: m2 ?$ }
7 S5 @- [* a" {) ]7 N2 n1 w1 h
  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
/ t1 m% `5 I- J3 |: S; h
' L7 K/ b! d% ~  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
7 E! \/ {4 e( J: _" o" i/ {. x  D  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
3 L6 b( }' l4 T& x  c7 {  m6 F  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;# C. G1 R- A; A$ e
1 o6 a( s  a3 B$ u% _( E+ M
  10.IE5 和IE6的BOX解释不一致
- J" l/ C: I5 T# E  IE5下 div{width:300px;margin:0 10px 0 10px;}
; V% }% b2 o8 q: \3 u$ V- }  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}7 P2 K: \0 ]2 E+ |" l! u7 z
  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持  E2 A* d- B4 X6 g- U, R

" b" b5 M+ g) N4 y8 ^$ |+ M  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题9 y& F9 t! b+ M- B4 W1 h" G
* w% Q& i- G! V4 Q' c* ~8 [
  注意事项:
. k( B5 h; {* e3 ~" H! O/ s8 y6 n1 T5 @* p7 a0 G8 o6 q: K
  1、float的div一定要闭合。
1 F! S6 A  `7 z  h% I  q' \
1 C7 K: p' f4 G  z9 o: H  L  例如:(其中floatA、floatB的属性已经设置为float:left;) 3 l! a& r5 q% `- L' i6 D2 @
<#div id="floatA" ></#div>
+ J+ M' D6 A, b! ~0 b* o0 Q, z# y1 j<#div id="floatB" ></#div>2 M8 ^# W( m% V0 U  Z% @
<#div id="NOTfloatC" ></#div>
; l1 F5 O' b% A. t  这里的NOTfloatC并不希望继续平移,而是希望往下排。
8 Q" f: l- N/ Y8 s+ p" T4 F  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
8 c3 J) \, F, z0 ?, A  在 <#div class="floatB"></#div>
, w3 v1 c9 l# D& t- \% e1 Q6 b<#div class="NOTfloatC"></#div>3 I4 l& H) |# {; u1 |
  之间加上 <#div class="clear"></#div>- [9 {' |& Q3 ]8 m$ P9 K
  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。; c) `+ a0 l  ~1 R; a
  并且将clear这种样式定义为为如下即可: .clear{: r: {% ?; j. S" `$ T0 c2 b
clear:both;}7 {4 g+ T# g  e4 o, K/ ?$ d
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;' j  p' w! w5 |% R3 ^+ {$ x8 Z( s1 ^
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。& v1 T6 `( c4 X8 Y' S; E
  例如某一个wrapper如下定义: .colwrapper{
, S4 n, [' ~) X1 j$ Zoverflow:hidden;0 {; q& c8 s+ B' `4 R; O* n% J
zoom:1;
# t& c% E3 N+ _; p# imargin:5px auto;}4 ~+ D$ U3 y! W* v- ]! ?; j* L
8 p% P6 k" U) N) c
  2、margin加倍的问题。
$ F7 O7 \7 i4 ?. T6 H: t9 N
' q4 _- o& c8 J/ T  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。7 ]# p! B! }) e1 [- v9 g
  解决方案是在这个div里面加上display:inline;% t% V$ Z7 X. f: x( w5 `
例如:
/ ?1 v5 a% T, u* Q0 n% ]! h* l! V<#div id="imfloat"></#div>! y5 m4 H  t9 h. s( D; {- N$ k% _
0 ^  V* }" q* u

8 @* u+ [5 z3 G4 q$ L  相应的css为. x1 h( B, Z( E1 [- n5 X4 h
#IamFloat{
/ v2 ]1 i8 Q. \: l1 _' Ufloat:left;
" L  l( u+ h  G) Y  Zmargin:5px;/*IE下理解为10px*/6 v, M3 J$ E7 y8 x; C
display:inline;/*IE下再理解为5px*/}2 a# `7 Z" Y- Y; Y
: }/ @$ m! {1 U! o2 @; a1 l: k) u
  3、关于容器的包涵关系
. |$ \. @$ X- R2 j  s1 k6 W% `0 s; \1 q
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。" W/ E5 I  I# v& T: b
1 r+ |+ \" I8 T6 z+ _2 y- ]! A4 ?
  4、关于高度的问题
) N  D) u' X6 l' b
( ^$ G/ h! k3 U2 N# I/ c  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
) `# I4 U0 `+ t
# k9 w- c# J) u# p. U  5、最狠的手段 - !important;! f' r; ?/ i- B% d9 @
3 T0 _$ [1 r2 M* I1 e" S. m+ p
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
1 Y3 e5 l% M9 z( `8 \. ?background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
% j* l8 X. }9 }/ b9 sbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}  N' X; }$ u) a5 A  I" P
  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

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