  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。. j. J0 E8 Y/ O0 {' T/ @4 Y
! p( I$ F3 v& ?- k 常见的兼容问题:
' j8 n# w1 N: g# r# j' T, l- c& V; o/ y
1.DOCTYPE 影响 CSS 处理 H7 K% E7 s ?" M: a5 G6 A& Y4 i# ~
: z& x; ?; Z$ a$ ^- w$ R9 J& `2 X
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
( h: s. o$ z( `3 }; l6 K |0 r- T: j
& C. o; P* A0 W; P) J 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中7 {8 ]; w8 x5 H* U% l* j$ q- C
! q* o i0 c; p" o 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
( o) t/ \0 ^' ` M# O' e
( `) h) d4 P+ Q2 F4 O 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
* v0 U$ o: E) \/ Y
9 `9 |7 o( m$ @ 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行* `) \2 a6 Y. g4 b0 P
7 X& J* `8 c) j; @! ^( l. o
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
( M0 r' e- ^; W0 E7 W" t
3 h+ V! x+ u* R5 t3 k 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
7 `) ^3 [! N6 ?, \# B
$ }0 J/ D# B! [/ N1 Y+ P0 | 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}, i3 t8 u& c+ ^5 T
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
8 Y7 h e' J- s6 b5 s; E 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
7 K/ ]' t3 u6 J+ w
- t8 j9 a: R, K( ~+ C- q/ O 10.IE5 和IE6的BOX解释不一致8 ?5 N# w0 G! r$ W4 d$ f6 C, q9 O
IE5下 div{width:300px;margin:0 10px 0 10px;}
$ L8 {; U( h# C) u$ q div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}- J( x$ B/ X; R& p+ \
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持8 d- d5 \4 j+ z! T7 Y
$ k( G4 t* B+ e0 C' d! q$ P3 H1 ?. v 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题8 q- i8 k/ k9 K0 c
1 j6 b, g( T% n; h
注意事项:7 J7 D( @2 }7 e3 f% m4 }
9 X& o' U6 A! ^% i/ X1 N8 ]2 P' A 1、float的div一定要闭合。
" u3 M+ Y5 I' F7 T a5 U3 k6 U. V A
例如:(其中floatA、floatB的属性已经设置为float:left;)
k3 W; b0 c6 @, q8 B) E9 x% ? S8 l<#div id="floatA" ></#div>' g2 V& S7 M; w
<#div id="floatB" ></#div>
( ?2 y1 O+ ?0 m$ w2 D) \3 D7 c1 s<#div id="NOTfloatC" ></#div>
- G3 ~) F0 W7 ^1 ` 这里的NOTfloatC并不希望继续平移,而是希望往下排。4 r" j# l- G' v4 t
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
( L5 h: I" Y6 c. B 在 <#div class="floatB"></#div>
1 K2 P8 d* B- K, M) e<#div class="NOTfloatC"></#div>* x- B5 H, E! n0 }8 x; _
之间加上 <#div class="clear"></#div>
) R& _$ s4 w% p: y; y; X0 [! L0 W 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
$ f6 d) p% I7 U& h; S8 d) q 并且将clear这种样式定义为为如下即可: .clear{
: f- D! z( F H) eclear:both;}9 W+ { B0 q9 C' S, U3 X4 l
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;- }( r+ s7 y! g; L! Z
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
* q( s4 n, Z% O# t' `/ Q0 d 例如某一个wrapper如下定义: .colwrapper{9 E& h }" n5 l7 T
overflow:hidden;% N. q" x6 f; `
zoom:1;
6 O( y+ M$ G- p6 x- q; t, Bmargin:5px auto;}" j) s* Z- ]- m+ O5 M& g6 n
' v# S4 J( F# ]5 L5 }
2、margin加倍的问题。/ ~. `, ^5 k X' t1 N2 l) K
: l( f' l$ k) u8 Q5 B) t I 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。& J" j g* c& d6 t8 z# E- ~
解决方案是在这个div里面加上display:inline;/ V0 X6 J m/ ]4 @' S `) l
例如:2 |( o( d5 u! Z) {% S
<#div id="imfloat"></#div>
9 S; j5 x( w. g/ g) M! T }5 k9 r& U; j) S3 J
+ Q+ D/ T$ K0 ?1 }$ Q7 R 相应的css为
* D/ G3 @3 d* a. r% i+ H( P#IamFloat{
O0 W$ n* C' Ffloat:left;
$ x; k7 ?7 b( n- @: j0 Bmargin:5px;/*IE下理解为10px*/7 u& q+ L. ~! g9 M) X( f
display:inline;/*IE下再理解为5px*/}
7 I0 K" @- p: ]" w! A( j( B4 J/ ]( x0 B {0 F1 J( S
3、关于容器的包涵关系
8 `+ ^! R8 s9 g1 N6 \" n* y M/ \! v7 g: r9 [/ v4 h
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
, D3 v4 Y) ]/ Q, S/ ]+ I( w- D- b+ Y/ a4 ^; D5 k( O
4、关于高度的问题
+ ^, J% k8 Q/ _
: k9 z% a2 y( J3 C* J3 j" j2 Y 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)0 o* D S, h! S4 E& |
, W* |: O1 I' W& b s( ^1 x4 | 5、最狠的手段 - !important;. |9 g9 j* U8 q: h8 s+ W% Z& V5 S
% @# A; o/ D7 N 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{8 v5 W5 e8 S3 \- J% G' S
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/3 x9 W/ j! w, \& b2 _
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
7 K: T2 A8 E$ Z/ f 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|