  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14161
- 金币
- 2371
- 威望
- 1647
- 贡献
- 1319
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
' g0 |8 W4 z9 C" M6 S6 U9 n8 e( S3 o; @* Z
常见的兼容问题:
; U( S* r; y7 k. x. k4 ]: P
1 `) w; I ?% T, W8 o/ u, P: i 1.DOCTYPE 影响 CSS 处理9 w; h! { J( {$ A E' T
0 N0 O9 e( t7 _4 R/ K9 P0 A: h
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行( c) G8 h4 [" k' `$ Q
8 s9 N* K( f1 `# e2 j) ]% r
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中4 G$ P/ n7 M7 k, ?) B6 d2 C6 k( q
1 B; l" K4 ^' \/ |
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width, ^/ l% q& T# f4 x7 F
p* ]+ x! E* p0 ]; w, ^; N# M4 H" G
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式( ]. q8 _+ D8 q1 m" b" L( B. D
2 f) ], C9 D1 L
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
" |" a! u( F, N
- L3 h. t7 B1 ~ 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
) r3 d) B0 P! ^# f3 _- @2 `$ C$ K8 S. z, d, m9 f
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
. c% {$ O( c$ i+ V0 t q) Z' d
. `* p0 e7 l e& s+ b 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
t8 {' T5 g* x( X9 G9 B) F- j 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
5 m% o# O3 G, o8 q- z 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;6 ]' x6 L1 ^( o4 a1 q, ?3 T
; k1 i, ?) { A, r9 E
10.IE5 和IE6的BOX解释不一致
1 B, O' w6 w8 i! P* h IE5下 div{width:300px;margin:0 10px 0 10px;}: ]! o2 ]7 X3 d8 P5 `* W7 @) z1 z
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
% T7 p7 G) F* Q 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持. ] C" }) Y$ V2 t4 |4 u) v
8 \$ Z7 r8 x/ f% }4 p+ B, T 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
3 t" L; l Z2 S+ X% l, @5 u
2 S! h7 z' y* m5 T* n, Y 注意事项:
7 Q8 \' O m- Y& V4 x% b/ t6 }4 q' t1 v- r* h
1、float的div一定要闭合。
7 t* E" d7 \0 t' x
2 g e( y+ u- n1 W2 b 例如:(其中floatA、floatB的属性已经设置为float:left;)
_: V" M) ]' W8 t Q% A p ~6 Z9 u<#div id="floatA" ></#div>
" D1 f/ v8 f3 R% r n<#div id="floatB" ></#div>
( Q6 M- O, r: c! Y( ~5 [<#div id="NOTfloatC" ></#div>
0 ^( M& t/ b2 Q+ c, E9 a" E E 这里的NOTfloatC并不希望继续平移,而是希望往下排。
- w5 t9 W; }4 ? 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
' M+ C* S( w- W6 I% M+ F6 W 在 <#div class="floatB"></#div>
: h% b" }* f i u' Y- |$ a5 C& ^" R<#div class="NOTfloatC"></#div>
# S5 c, x) I! x- D7 c$ p 之间加上 <#div class="clear"></#div>
7 \! f$ L D( L# G* W. F D: i8 \ 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。. ^+ a: M3 T) |% H
并且将clear这种样式定义为为如下即可: .clear{
_5 T! k: |1 @2 `clear:both;}
" n; W" O3 U* Y- b 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;7 g$ z# E) i8 ` U6 D# p
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。2 V. O% z. j' N" E6 J
例如某一个wrapper如下定义: .colwrapper{2 l, V4 R5 ^! I5 B8 a
overflow:hidden;. X8 j/ s8 n# ?( r" P0 i
zoom:1;. g! K! d5 J2 w5 p
margin:5px auto;}
7 `0 [% f6 d1 @# C4 a* R
2 @- {: y! c4 t; K" p A' S 2、margin加倍的问题。# M+ h7 R; }* x; S# {
0 {% m8 D+ J: ^, Z: E) X
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。/ e% c: ^* R$ L% u8 _3 v* r: {4 }
解决方案是在这个div里面加上display:inline;
4 B5 ~5 S5 H* W; F( {9 Q例如:
# C- \7 {' }& c( u' g<#div id="imfloat"></#div>
9 @2 Z6 Y1 p: q; K: k* m; |& E4 I/ |# {$ U( X2 U7 Y
! ^$ k5 W6 L e5 I; J" \; x 相应的css为! X/ }+ Z7 U3 ~6 l' b
#IamFloat{6 y7 b/ ?* l: U' i% A
float:left; z# Q5 H9 b) Z1 j. d* n
margin:5px;/*IE下理解为10px*/" C; L2 {, w4 W' H( J
display:inline;/*IE下再理解为5px*/}
% M4 _ v. p7 _7 z' g
$ o. o \: i, p5 y) @9 d 3、关于容器的包涵关系& H3 n7 I! M! I
- B% C; y0 ~7 A# t7 f$ ]
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。6 C6 J1 s1 p) ?0 K
" h% ~! S2 w+ M
4、关于高度的问题
- T4 J% n% {5 z& x3 s+ o. ?/ Z, F) g9 Z! {9 s8 t0 \
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
# n/ n8 M+ H5 T$ b+ l% M- u2 p* K9 X; ]+ y- A" i7 s
5、最狠的手段 - !important; V+ K7 E" M1 k* k; ?
9 J8 I% m1 W: G7 T
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
5 L" G: l9 O. W$ Tbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/7 E6 l* [3 d9 M- ~4 S5 i1 F! z
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}3 A1 a, f2 C* `1 {9 S8 k
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|