|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14387
- 金币
- 2479
- 威望
- 1647
- 贡献
- 1427
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。0 _/ G2 U8 M+ Y8 ~8 H7 z# R
# l/ b; A; A6 g G
常见的兼容问题:/ I4 u& L( N* D0 {
) c4 G' I5 v' D' d+ S2 ~( k, } 1.DOCTYPE 影响 CSS 处理8 `6 o" b) D: N6 \
q) i% l) S5 T 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行# q. }! n3 k1 |7 r
- X5 x, c4 @- Z0 |+ j1 O 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
2 |8 U. \3 E y* c0 P, _) Z) {% i4 p
, D0 H: [. T) p, Y3 `# ? 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
/ r% z8 q, x; N5 q) v# w) ~
# r' [( I8 u4 g4 t; X3 H" t 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式& D2 E- W+ |6 H. T( Q; u2 E
& T0 k" P! H5 x3 l6 m$ v% {0 M 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
: M& E3 z, H9 u1 P+ w3 i. |* P
4 ]8 I( z( w+ w3 h 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以- V9 T% s2 b% }9 M T
) V' Z% A, L5 S @& W6 O7 B. ?: X7 ^
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
0 B3 _2 E; g# @ A
) V1 ~2 K) O& @6 c( `( W1 }& M7 B 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
& h' i. T5 h8 j6 _( z 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
8 I! R5 _0 ]" @% s6 b$ W 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
) w+ e1 T5 Z v
. ]0 ^3 \; C" w' E2 ?0 r$ k: P 10.IE5 和IE6的BOX解释不一致2 ?8 L8 Q% p6 V' m# ]# B8 U# I0 S
IE5下 div{width:300px;margin:0 10px 0 10px;}) N( A4 b! a1 f) V* n9 ^5 U
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}) z, B; V' i, Z+ m/ O2 j
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持/ k. ^. D/ T3 C$ ^# }+ E& T
( f4 F+ `3 j+ w% u$ N6 W! k1 I
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
1 \3 {: U; i' \; N& X3 Q* S- }; i) M3 h
' R- R( `8 d; u6 L+ B$ P9 C+ D: j 注意事项:
: I( o% d' P8 |- f2 w0 D
! `7 f" g1 \* y: | 1、float的div一定要闭合。# D9 P' x4 n A. x
% y2 c/ L5 D* L5 z+ ~$ A/ V" j5 w
例如:(其中floatA、floatB的属性已经设置为float:left;) / R. Q, t# |- o
<#div id="floatA" ></#div>8 I- [* ~* w: ^/ ~$ k# C
<#div id="floatB" ></#div>; ~) Z. J# }2 y
<#div id="NOTfloatC" ></#div>' R% r0 j4 E. K1 ]9 d
这里的NOTfloatC并不希望继续平移,而是希望往下排。
- A/ c" n2 [9 j 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。+ o' e6 u, c9 `0 g7 _- @7 W
在 <#div class="floatB"></#div>
3 u9 i$ p1 P3 \2 u5 b7 H1 ^% H<#div class="NOTfloatC"></#div>% L6 h: R* x$ `. a& N. e
之间加上 <#div class="clear"></#div>
2 z! W- \. ]' f# a6 h0 s 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。9 B3 J J9 x s/ h$ m
并且将clear这种样式定义为为如下即可: .clear{7 n/ J' U, _( s; n$ G q! s" U/ {
clear:both;}+ I- `; [% m4 Q" C( Z& C# q2 u
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;" e3 ?$ N" i0 n6 w) G
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。# k% |- \) `5 t4 c* d8 q$ X
例如某一个wrapper如下定义: .colwrapper{
+ r- E3 t, M5 joverflow:hidden;+ U: h! M) O7 G: _: @, @
zoom:1;
8 ~7 F( }2 O) p8 h* L% d Hmargin:5px auto;}3 w- w; k1 Z3 v" G
5 B1 P! b+ x2 A3 j
2、margin加倍的问题。" z% K7 U" J# q4 I0 A: L
1 d' s, z& h* E/ Z. L% I 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。9 u% `% Y. ^& W& @
解决方案是在这个div里面加上display:inline;5 n o7 X# `! K. D
例如:
( \0 A* \1 M& p' n0 [<#div id="imfloat"></#div>9 m( v% V1 V# A6 Q* _4 L, C
- Y8 C% X1 N# ~; V- t8 _
n: ` \9 J& V3 D 相应的css为! i3 ]. t) F$ G$ C7 Z
#IamFloat{ l/ H z3 D/ u
float:left;3 t: q9 B' q, U7 y2 X
margin:5px;/*IE下理解为10px*/
# ^# E4 [% `* W8 D0 m4 r# R" c7 `+ vdisplay:inline;/*IE下再理解为5px*/}" r3 v: k* }' P. G1 m1 @
7 c5 y9 ?5 x; z q: I" ?# b 3、关于容器的包涵关系( f) @. z/ B" F N9 ~
" x5 K- c0 V, O, H# d& F3 H 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。8 r. c2 m) [) v, |
' U# P; y! A, F0 y# y! E) q3 ~1 R
4、关于高度的问题( e3 T9 \# |1 J& m. L
+ P+ }1 G8 {% L' Z 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)+ j7 V. k+ l% K0 L7 _
b1 f( o' f! R* G
5、最狠的手段 - !important;
4 I; x8 t4 m, h8 _* `$ C- |( f$ v8 g7 U" u% ?2 @
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{# t. y/ \/ b& l5 c/ _& f
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/( J, C1 l- }* Z O0 C+ D3 q
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
$ m0 Y% M F, M 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|