|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。3 W2 |! P i9 p, A
8 z9 B5 s {& |! y4 Y# g4 j
常见的兼容问题:! b! w; B. ~# @$ F: F
5 M5 h0 P: H3 z. [2 Z) h 1.DOCTYPE 影响 CSS 处理
( B$ L9 G( V3 |2 b! m' z5 b# C1 V+ u! C( n1 D
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
" O! c( u2 m1 |3 ^" H1 V% {9 K" p3 Z; t
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中" x1 f$ L2 Z/ q: a( q
: i V. E4 t# t* @& I& V3 \5 T 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width o- T* e4 f) f! C! t+ Z+ u
9 J- a) Y8 s7 G' x% G: G$ l
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式; n9 ~' d; k- ~. _& O% N2 m) i& B
2 E; m6 r" ?/ ?7 z- Q* d s- P' e
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
) h8 ]; K/ S# z4 f; l
! T) C# U2 D+ @6 X a6 [ 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以2 F* J4 x- h; t' n- b
5 F+ \+ ]' A2 _ `
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
9 |5 ~8 y0 U* ^7 [: y. S! L1 y% H- i
0 b3 D0 v, F% Y: ?1 \4 P8 ? 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}. b2 H8 l: l6 m
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
, j, x5 d: ^5 h 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;. O' a) N3 `1 M/ m
& Y6 D# ?- F) O/ ]/ r
10.IE5 和IE6的BOX解释不一致
: _ ~ h. u' a* X; ?4 |# n IE5下 div{width:300px;margin:0 10px 0 10px;}
, l& n# e, O0 h0 b div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}' s q8 q8 d; Y* H4 r
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持" {. U9 W; P2 l9 U+ a1 r
, I! o6 {. e" V0 u/ c4 x 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题" k8 p5 H9 F: N( U9 L$ X+ r
1 V" j) `( x4 }# E) R2 D6 N% Q 注意事项:
. k7 A7 x/ }* w C6 [
' Y1 j+ \6 F* L* k% U4 F0 I) _9 g 1、float的div一定要闭合。 c% `) ]& {2 O3 G
; E0 F. I6 f* z L( W
例如:(其中floatA、floatB的属性已经设置为float:left;) - G5 h2 y, m. r: I0 N- V9 ]3 z
<#div id="floatA" ></#div>. E0 \: M/ e5 r3 ^) S3 t. D
<#div id="floatB" ></#div>
1 V: Q$ y" F$ U1 {<#div id="NOTfloatC" ></#div>
- J" L! v# }2 c/ w) \( g( Q! D P 这里的NOTfloatC并不希望继续平移,而是希望往下排。9 u. v5 ?* f1 Z0 [2 G
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。( g/ T9 `+ F4 H! Z+ s) g+ F, V
在 <#div class="floatB"></#div>
/ D4 F9 D6 Q. f8 J<#div class="NOTfloatC"></#div>
. s, J0 C. S: y5 a) A1 D! V, ? 之间加上 <#div class="clear"></#div>6 [$ }& t0 s9 |" W! C. s2 ^
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
& c1 h- `% V% Q; S) Z6 G 并且将clear这种样式定义为为如下即可: .clear{
) M0 `+ t) s7 M( p! y a$ g) v# C; Kclear:both;}4 n' ?* a& M* U7 J# E
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
" O) y( C$ E& f0 i" i 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。( x: ^1 i `7 e
例如某一个wrapper如下定义: .colwrapper{
- O! Z8 p4 m1 ?. | b# k6 w9 goverflow:hidden;
7 |1 k: o4 v6 `7 ?zoom:1;
: S% r" }# N5 d/ ~6 q0 \8 z2 H. Bmargin:5px auto;}: G; r3 @4 T2 e5 W( V
; `! ~8 y8 l) f1 f
2、margin加倍的问题。, o m" e8 w. P; R2 s5 d! G* b" [
) A. z/ [. N2 k$ t
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。( D3 g- J9 V- \- P; |) C
解决方案是在这个div里面加上display:inline;' O8 u3 y9 q( N) P/ M8 z
例如:7 T+ ?) _6 Y! C/ R
<#div id="imfloat"></#div>
; T5 G7 p4 k2 U2 j# R3 Q" z/ U9 D! s8 H1 _7 ~% C
" n6 s) N$ s6 Z* U( ~; }: o 相应的css为 h- F, M! K' J9 c( o; v
#IamFloat{1 P6 D# [# T4 |& _( C
float:left;
( F. b3 k; U* [1 z0 n' Smargin:5px;/*IE下理解为10px*/8 ^7 ^3 X) ]7 z; M+ @: R
display:inline;/*IE下再理解为5px*/}
. R' x) ?6 b/ L H* a
* t- J! f% @ Z( Y' T 3、关于容器的包涵关系
1 I V- G" @ G; I C1 N4 ^, J
! T. d9 h9 f& d k" Z 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。+ }# q7 P! p8 o4 v2 R
0 S3 j! c& Z) t; v% z' k4 f 4、关于高度的问题
7 z1 G" ? c! ^+ Y
- a- S2 b, p8 m# |3 V 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)6 ?0 B) m, Y3 \" g
/ X, e y3 x2 V/ M3 o& u6 x
5、最狠的手段 - !important;
' f7 a/ r1 R- a. k) ~0 r1 ^2 K
5 q* s* @. c9 Y6 S, B 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
7 [ i! ]+ v3 vbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
( ^9 {- p# P# Y8 O+ w* P7 _background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}: `, J* b3 X! T) ?& b+ p
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|