  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。5 A5 h' u& A) F1 b& s. l5 w
$ V6 F6 P6 x1 o* ^
常见的兼容问题: @- Y4 T4 J2 B- _0 p
$ |6 W1 G* a* Y: G1 V( N& \* e
1.DOCTYPE 影响 CSS 处理- }# E z: Y- d! g) B' V- z
- Q$ \: D! E' g
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
1 T5 y; H0 N) F" j- h2 _3 k# t5 i
W* X6 [' c4 E5 t2 d" z 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
1 O) l, Y, z7 {
2 x* l; ?1 M4 O$ @- s: D5 _ 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
$ s3 v# R. }' k. Y# P
/ n# {% _! ?/ q+ ] 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
' B: o3 [2 L/ o, Y$ H k$ e% I- y% o. ~! V8 {$ R* l2 {3 X
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
) E7 s3 r! O7 v* Y% t/ t( U+ ]# v' o
2 n" ]( H1 Z6 q Z# M1 C 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以% d5 d5 B g; N1 V
: a) |) ^: Q$ q, j+ {
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。7 V! [: v. z: i! I. P: Q
. E( ^# I; Q4 u; i" H8 Z 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
9 N8 z5 F/ C4 e" } 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
M+ U" {5 Q# V: D 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;5 p. w; E, q9 ]9 H2 f
3 a* z, U6 D9 j& m9 H 10.IE5 和IE6的BOX解释不一致
" o2 z- W5 n! v7 Q1 b IE5下 div{width:300px;margin:0 10px 0 10px;}4 B. T: j0 D8 E
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
. b" T+ G% y6 W 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持: k7 ~" C. S3 r' E h! Q% V
2 V- o) @2 P& ]$ D4 @2 o6 Q# m3 X 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
. z" ~ z& r0 y: z; Z+ `( p4 H- Q+ I; S0 R
注意事项:
2 Z/ y% g$ \" T/ |' r! b) u! f9 c: r
7 L: N W8 q8 F4 \. c- d! x' ~2 q 1、float的div一定要闭合。
3 k4 { i" k* H) W) W; w2 q* n2 @- w/ r4 T
例如:(其中floatA、floatB的属性已经设置为float:left;) ) U) a0 E" n. w! a7 R' w: d5 I
<#div id="floatA" ></#div>
! w7 F& X9 B. R) t, M- `% `<#div id="floatB" ></#div>
! C! H; n T9 m% E" e d<#div id="NOTfloatC" ></#div>
& X2 A6 o/ {8 l! K: r 这里的NOTfloatC并不希望继续平移,而是希望往下排。% f0 w* V/ ~' e1 }
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
, r) C4 \/ R. k$ j: S 在 <#div class="floatB"></#div>
: [/ r2 I+ P# k9 z<#div class="NOTfloatC"></#div>
! X/ T$ |, i L, s- r+ u 之间加上 <#div class="clear"></#div>0 l2 q4 t# F" m' M/ t; ~
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。. _6 F' z8 t% Q& _# I3 [+ c, S1 G
并且将clear这种样式定义为为如下即可: .clear{: L% s, P# ]2 Y: ~% \
clear:both;}
) R8 x# Z% q" j; g2 G 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
: ]. }2 J' y$ z& x. T1 @# C4 q 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。1 P# Q* D+ h. U/ l% t' h
例如某一个wrapper如下定义: .colwrapper{3 ]* l. Q$ @1 O
overflow:hidden;6 Y% I+ R0 A& `+ _; P5 {; j6 e
zoom:1;
' g: b5 l0 O9 a7 xmargin:5px auto;}
8 ]# J' J g) l! m- ~
( m. G. a y$ ^8 f6 C, ]: k 2、margin加倍的问题。
3 b% U4 A( B" X, m4 `8 K
1 G. c# q( G8 k% l) }- E" Q 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
: z. S7 w9 ]1 m" w 解决方案是在这个div里面加上display:inline;
, n# C, T$ {5 C5 c0 Y例如:' t$ }- A4 k, c0 t
<#div id="imfloat"></#div>5 K* E" x* o0 N4 |. g7 k8 g
2 I e+ E/ g% @
, q0 l0 S$ Q* w9 i
相应的css为
- F, ^" U9 P9 n$ ?( }#IamFloat{8 H' h3 I* E# B7 d: d) @! V3 s
float:left;1 V* a: H8 [2 j! M5 N) u( [
margin:5px;/*IE下理解为10px*/
6 S' h/ R, B1 T/ n8 ^' d5 Ndisplay:inline;/*IE下再理解为5px*/}# T2 f1 ?" n, A& `# c
+ ?0 F; `! V/ u: q 3、关于容器的包涵关系6 t9 N+ V" e7 i# j' | J
f- m" c9 l9 d% S7 I7 J3 w1 D
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
4 j/ t- T+ g% l5 i$ c4 ~
) S# [- f. @) [ h 4、关于高度的问题7 m' \* [8 e' \
. Y0 \1 Q0 I$ s" k: _! ]) N5 c
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
8 c5 f5 t5 S8 ^1 Y( j& r8 M: E
6 Q/ o& ~4 ^4 ?# `7 Z0 j: D6 Y 5、最狠的手段 - !important;& X* B. a% `# i# W% y
5 L$ R# C. e: K# K3 S* N1 e
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
$ [0 p2 }6 i A7 m) K. t8 m2 G7 R) n& K1 jbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
, k& _" q- S1 F* c2 abackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
1 b$ f: L9 \( Z 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|