  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
$ v+ @0 {. v$ w1 }" E( ?/ U" E- @- }1 W3 D2 ?- B
常见的兼容问题:" x8 U$ _* W2 W( y8 c) X B% d
. u3 |( z' }% Z% F/ E 1.DOCTYPE 影响 CSS 处理( W9 i0 H: U. [* b4 d6 F
, {9 F) P2 D# M8 U0 r/ C 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 j5 a: n4 O6 T" H
4 [2 G8 |+ G, `& w
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中- J5 b4 |; X1 q) e! p* }
0 `& k% A7 N; ?3 u+ `: I
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width# b4 u$ V! V" D: @4 ]' h% f
$ u/ L" H E+ L* n 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式- ~& g6 K" i' g. U9 j" H# a
; u: c4 \$ d/ R) z
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行- c3 E- k1 y# q% x
, E0 Q0 O1 O+ Y6 ]: T, ]9 c 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
, @- E3 J$ D9 E6 U# G, j0 X
% [$ ~# S) u+ X8 j+ K 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。6 d+ [* ]# P: ? }
% `+ B; A' E6 F) }# {
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;} O3 ^# E# u5 [3 l/ S! p$ {
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}! k( L- ]- R3 ` M1 }
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
( \4 i, M9 `3 c- _' O
0 P- l- Q }6 ~" q8 A 10.IE5 和IE6的BOX解释不一致
& u a- `. a, Z7 j2 P* I0 z2 \ IE5下 div{width:300px;margin:0 10px 0 10px;}, Q) G; J6 p$ K$ z) o' c( @# O- t
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
7 M; S8 K( w x8 E( R2 V 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持3 n4 W& E# s, H; W B; N. R
/ D1 C: {" {( b, T 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
( ^% V4 K$ l& v2 R
* V. d- L- ~; P- B$ b5 t# ` 注意事项:
m! H2 _' Q8 B6 e7 @! ]' b4 g1 m5 c0 ?
1、float的div一定要闭合。3 s K: @0 _; P
8 k# g2 E3 Y# Y$ a" b0 H 例如:(其中floatA、floatB的属性已经设置为float:left;) 5 O0 n" g1 Q8 E4 F4 x. R6 P
<#div id="floatA" ></#div>
0 k3 k1 p$ \; U# h. Q+ _% c! b<#div id="floatB" ></#div>
7 c! _; i. m5 x<#div id="NOTfloatC" ></#div>0 v% {) e* I* f8 W
这里的NOTfloatC并不希望继续平移,而是希望往下排。
( e3 N9 v* }, O% T 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
% @- {4 D0 H- }7 h 在 <#div class="floatB"></#div>
; n0 _& h& A$ C. |, d5 V<#div class="NOTfloatC"></#div>/ D5 H7 N# \5 y& z' e# T0 N0 H- B
之间加上 <#div class="clear"></#div>
6 \/ E; v) |0 Q& t w$ g2 { 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
, Z6 p& y/ t3 |9 ?. s: Z" n/ h 并且将clear这种样式定义为为如下即可: .clear{9 s4 ]" ~# F- K1 [% L% ~' J
clear:both;}1 {. ]$ c8 e1 J" O% x8 ^! x' a
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
\# ?$ i1 C8 j* i/ ]& x5 P 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
5 x: Z. ^5 U1 ^" t0 z: g* b h3 E 例如某一个wrapper如下定义: .colwrapper{, P, K( ]1 P9 C0 q+ e- a! l9 A
overflow:hidden;
% j& B/ ?! o: y: b% \* ezoom:1;
% }; I9 P' {8 A- N+ Q0 E2 s7 B& [margin:5px auto;}
( c" s. H6 C) j k/ k& O+ M& l) I6 e+ t% h& q% T
2、margin加倍的问题。! ]- H& K" }$ j* K- Y
6 E; B) _( z) B1 l- n4 n 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。; }& |- `6 h$ U6 @+ O+ v! X
解决方案是在这个div里面加上display:inline;
; M7 h0 c) T% v" ?) a! H9 C例如:$ V" P3 s7 t, F- ^5 P8 y! o
<#div id="imfloat"></#div>
w& S! u {$ ?0 B) r5 ~! K: Z
# J$ G1 c# u7 \& h2 ]( R
9 p# G' K/ I7 ^7 q4 T 相应的css为: e6 o0 S0 q0 F; F. ~
#IamFloat{
- q* K+ J' e' N& K; D; ?, M2 X3 Nfloat:left; i/ R; R0 C9 x# d% |
margin:5px;/*IE下理解为10px*/5 s2 Q0 `0 K! T9 z$ G
display:inline;/*IE下再理解为5px*/}% T5 K" I- }" h5 M& z& O4 ]
4 V0 X- q d( Z: d8 R. x0 }; y 3、关于容器的包涵关系
! f B% [: ?% A, `- I5 }/ G, K( [! z; ]" N* v, e
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
. f J7 h S5 M
; c- n0 Z7 p. z6 V 4、关于高度的问题! R, A* ~, q# k5 v/ |
# _! \( \/ F- a v1 P+ J3 t 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
q; O5 j2 ^' v! E5 |1 {' x, ^3 V6 @
5、最狠的手段 - !important;
. l2 d& ~0 c: q: O% w, h' J E; p
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
3 \' v" m. ~% B3 M5 hbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
9 |0 b; R& I& E0 |background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
- \( `9 }8 N9 V 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|