  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14219
- 金币
- 2400
- 威望
- 1647
- 贡献
- 1348
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
+ L6 G9 {" N6 I# @3 l/ W; K) n$ B' Y3 r! p: J0 o
常见的兼容问题:( b/ t) z- P9 N5 \
* @ c6 f0 [; J( g+ I 1.DOCTYPE 影响 CSS 处理
/ a7 a) q, C. A* v0 U: C" J- g g5 q( {: A8 y; K+ E: l( m# N# }
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
! H9 ?9 i* l& ?) M9 M( u) g6 Q! a; T. |; r- f( X3 C1 W8 v9 D* O
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中2 p/ ?1 P; w; J' D6 y" B
# h% j! B9 F/ R7 z% v1 }' _; b( v
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
9 `' t4 w' t! Y3 }' r# @) R$ O; S6 @# ?: Q) E
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式1 `2 u R3 ]% A: ~: }
" b- Z; Y: W0 R 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
% p6 |! c* d9 g. t+ k0 W. g3 b+ Q4 s
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
0 Y* ^6 {: ~. q/ p0 i) w" I6 i9 R/ [% P7 _
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。6 K& F9 d+ u/ \% K; Q; l
- W( C6 `! s1 [' ?& G* a5 x% d2 G 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}' f- E! k$ F4 j, e; ~3 h1 ~6 g; T
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}% }1 g3 B# d7 J: y
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;3 a' R& `6 R, g, P6 C+ e% a7 O
2 m: L# p- m; r; _ 10.IE5 和IE6的BOX解释不一致7 s3 I. q. F) t) p
IE5下 div{width:300px;margin:0 10px 0 10px;}6 O& _1 J) M1 `; b6 s- I
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
/ ]) y, |/ L% Z$ J! s 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
v) H$ z* A, \/ ^. X- c. M/ \7 C* \3 u2 k: I
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题) T3 q8 R3 f5 ]2 i) M8 b5 K
8 b' `5 l/ Y, Q* J4 r6 b7 x
注意事项:
9 b9 ?4 ]! X. U- u( t: B K4 P- y" m3 C7 ], G: M8 C
1、float的div一定要闭合。
3 c9 h- \. c/ a! U# |9 i; [: l3 M; t: ]/ i. h' l
例如:(其中floatA、floatB的属性已经设置为float:left;) ' Q, ~& v9 F7 h* r2 k6 K
<#div id="floatA" ></#div>
; V8 d& B! o S" m9 I$ V1 N, U<#div id="floatB" ></#div>
+ j$ }; T! t/ T0 _& g i$ V' d<#div id="NOTfloatC" ></#div>
+ T) A M' f$ z* | Y 这里的NOTfloatC并不希望继续平移,而是希望往下排。" S' a+ p0 x! {
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
9 i! Z {' S) t3 R& t 在 <#div class="floatB"></#div>
3 O6 C+ B; H2 x; h" T<#div class="NOTfloatC"></#div>* y2 n$ P% q% \: P* F$ N, l
之间加上 <#div class="clear"></#div>
# A' n$ h$ r& O" F1 J 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
$ h& M7 \/ A( N+ i1 v( L 并且将clear这种样式定义为为如下即可: .clear{
# d! L; ]9 y) B3 Yclear:both;}4 r5 N4 I* M3 y2 k* S
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;* u4 q$ F4 D$ `& {" c" v
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。) | L4 k ?. c/ ^( _4 R" B
例如某一个wrapper如下定义: .colwrapper{3 A% H2 U2 P; j# E
overflow:hidden;
% r0 }) [0 u2 B) _& c) Hzoom:1;, h: b2 E& i: t0 G- s1 t
margin:5px auto;}
- n7 }1 [- {. \: E$ a& V [' H2 O$ w; q- ~0 t' v, q
2、margin加倍的问题。
' y6 l' M# k8 Z- U; x- O
; r& G( H# p/ F5 `* q 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。) ]; R2 d* y* q/ m( _: i* G: u
解决方案是在这个div里面加上display:inline;
! r# b1 i' S3 X' x% F; H6 n7 V例如:
" O, g2 D% o& c) |* {<#div id="imfloat"></#div>
+ o& {8 s3 q$ ~ z
5 {; d! r( h3 h2 k& [4 F
5 i) M/ \. a' P5 H0 z 相应的css为4 c% @. l: p4 H/ |7 X
#IamFloat{& ^/ t' w0 v. f* B
float:left;
3 x0 n: j( r- m5 l3 r* c lmargin:5px;/*IE下理解为10px*/% d1 q6 n. Z4 r3 t& E! }
display:inline;/*IE下再理解为5px*/}7 k0 o! r, E6 i* x
' U3 @$ k/ |. q% }1 n
3、关于容器的包涵关系
! S2 C3 `& \$ d$ P' e8 `
J3 n J4 [0 p; f5 D5 G 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。6 v) v9 h7 K/ F& v, l1 A: C- J
- |0 n( m1 k8 C/ F" ?0 r
4、关于高度的问题( g3 t% x& f% E3 J q" L
% u4 X3 }2 w+ D 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
. a8 ~# f/ G0 h& P" k
1 C/ \9 t# T* s3 _; j 5、最狠的手段 - !important;( w8 x9 Y0 p3 ]% l
7 K6 K4 Q' _$ Q% ` 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{/ l0 u x. v2 _7 H
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
7 q( ]/ z/ y9 _% }+ {5 pbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}) L% H5 [0 ~# g5 ^
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|