  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14161
- 金币
- 2371
- 威望
- 1647
- 贡献
- 1319
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。# C3 f: b, ?3 S Z6 v- ?2 n1 h& I
- L, w' H# d" ~' l4 c2 R9 p
常见的兼容问题:, J. ^% X/ m% V& C7 z" H$ q
4 T* Z( s( V* u# ]8 U, `# u2 N7 O
1.DOCTYPE 影响 CSS 处理
# b' S- I9 ^" b/ \2 s e* _" T k$ h5 O, b
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行, z |$ h" z0 f7 @# ]
2 B; ?% ]0 `3 S5 T$ K7 ] 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
, z3 r( ] F" [& ?1 U' h* u2 V$ {/ L, h8 \1 A b2 H; B
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
3 n1 j, z2 f$ k6 _, s
, t% W1 d- ~! w* ]. _# f 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式. r& G+ A1 T+ a* v4 Y
& R% e3 ~ b0 N1 s+ G 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行1 B/ ~" {: H6 Q/ e
2 H/ f1 E2 n# S5 R 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以8 `/ g% @, p) R- ^' u. f" }% |. b
' z/ a3 n5 ]1 j- D$ Q X
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
& C7 E# Y* X: a' _3 s" I/ _( ^
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
+ x2 c6 D; b9 X# O+ z' W) Z 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
& J0 I8 G% W3 t 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
0 V% t0 ?8 G' W2 z
, B4 i) B7 C+ M5 J6 `/ A' _ 10.IE5 和IE6的BOX解释不一致8 B5 v3 Q$ |8 o1 l6 d4 F
IE5下 div{width:300px;margin:0 10px 0 10px;}
" e; u4 q6 e9 Q# l) i1 f# ^ div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
- a6 ]9 g7 p) X 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持( k8 F0 D9 o, h0 S5 y
' ~! {. M) E% D: x
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
+ N; c, X5 G/ R) U+ e2 h$ G5 }' C( P5 r1 @! Y
注意事项:' H6 L# F5 m9 ]* Z7 H( S7 l! L
9 D$ t% [% z" v# Q9 [( u: o( }, z 1、float的div一定要闭合。7 e6 x/ P0 F6 K( L& ~, i$ i6 z
+ j9 R3 ?4 k1 A/ ^+ l 例如:(其中floatA、floatB的属性已经设置为float:left;)
0 q8 e' ^1 i, q+ G }! r. e+ u<#div id="floatA" ></#div>
5 O& J( |2 p: a v( H! |# _8 W<#div id="floatB" ></#div>$ d" z! t5 Y( [5 J9 C9 z. f/ h6 J1 {
<#div id="NOTfloatC" ></#div>
H: U/ t. J- n, @ 这里的NOTfloatC并不希望继续平移,而是希望往下排。0 _! Y8 U; V2 ?# ~, e
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。- c6 ?3 N' g4 y, J/ i8 X
在 <#div class="floatB"></#div>9 P* H' ]$ ?1 M0 l5 M
<#div class="NOTfloatC"></#div>. K9 n1 ^1 \8 s! \' k' J7 I9 I2 o
之间加上 <#div class="clear"></#div>
* J* T6 W& j; [2 g# g 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。' Q1 ?% H4 ^& j0 K& b; v4 L' o! \6 e
并且将clear这种样式定义为为如下即可: .clear{" V) l. U' \: C2 U0 m
clear:both;}
1 | f* N* g' X# S. N. q 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;/ u( r+ G3 q* G+ o) q
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。' @6 p5 f6 R. z0 w3 j: b
例如某一个wrapper如下定义: .colwrapper{% o% G( _( A) @. U5 E
overflow:hidden;
5 s5 {& |4 T, Wzoom:1;
6 \6 }8 g7 @2 J. U! Lmargin:5px auto;}3 S7 P) y# y9 X7 i3 ]
4 c8 G' ?8 X3 e, g5 {* K 2、margin加倍的问题。
" g' r3 i( r0 u7 G( o, T
3 o* W% x. u7 I) s0 r 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。' L O5 [: `/ `: o* I2 \: q
解决方案是在这个div里面加上display:inline;3 ?' U- e6 p1 o) r# L
例如:$ g0 F/ F v! G Q
<#div id="imfloat"></#div>" ~* v. N' x+ D
8 D: A/ l% ]! ^( j% J2 ^2 ]. ]* q: l: b, P2 ~ M7 ~8 b
相应的css为! y9 W1 z \! m' _
#IamFloat{7 ?$ |6 G7 a3 v L! P# X9 T
float:left;5 f/ E9 q, S, e4 J
margin:5px;/*IE下理解为10px*/& ]; u8 H% |2 L6 M" a( r! b
display:inline;/*IE下再理解为5px*/}7 M5 _2 `3 R9 m( l7 K: y
5 q+ |7 I) A7 L0 C, J! D+ { 3、关于容器的包涵关系2 M- [, M3 C) F( ^' `) Z
) c) n5 m/ {4 A; h7 `9 G f; x9 D: |
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。/ Z, O3 J( ~+ K" h# |
F1 N" b6 }4 f
4、关于高度的问题
( c$ n2 _* ^+ ^" `$ Z: t3 B3 U8 [) J% B7 T/ q% E& q: R
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
) w. @- l" m0 [: ?8 ]
- ~( y+ ?/ C1 r* |2 e: J. K4 D 5、最狠的手段 - !important;
* ?' D7 S& U) |& T
* a `2 q2 z1 k: z3 ?5 S4 M 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
* \) \, h5 B. m0 F, {( ~7 N5 _- Ybackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/5 \# S1 m/ [4 d( o
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}' l# u* J% d8 o4 V
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|