  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
# y* e3 P" _7 f8 d) o. y0 X$ ]& d1 o2 \( J% q# d8 {& w
常见的兼容问题:' W% n* H6 f4 d) i8 \" B: F
" o# P/ a- r, f4 x" T2 I 1.DOCTYPE 影响 CSS 处理' }' k3 b2 d. K1 y
7 c# W e0 u3 m' s7 n/ _8 p 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
0 m: T6 ~' J; }& d
( w6 t) h! {) _, M" }# ]% M 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中" \2 L! \3 S& Y- B
/ O1 a8 P# S7 E
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width% ]" a9 o' e' H8 K
/ y# I6 l/ _. `' j 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
- a$ L) R( S9 Q9 F8 N. b
; B8 Y% w# d! Y% E5 b 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
) G" d- N# {) _- q6 X: O0 u& T2 U% o$ m" U% S
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
$ C8 z+ W) Q+ {& g9 S$ J- f" B* |/ Y
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。4 E7 n) W. f/ k* n# A
8 q2 `% C; z$ U& L
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
- D. X( Y( u/ ]$ N) Q 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}, b$ L- n# \ e: O3 ^ v% h3 T
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;3 |+ U1 [3 i4 e" I/ T
4 x: [3 l3 s# h- Z- @; t9 l
10.IE5 和IE6的BOX解释不一致
: D& i2 y- y/ h" A1 B IE5下 div{width:300px;margin:0 10px 0 10px;}
& f* d' o. m }4 m% k" [ div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}4 ^/ W M9 k0 Z
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
8 U) [3 G1 X6 x0 A+ f- b$ l4 L5 ]+ a, C
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
5 _$ }1 | h: y! F j4 G8 U9 _
$ p4 L. D! @& L* D' `1 Z 注意事项:0 }- u; {$ h! n
. z- z0 _/ F8 Y7 q( }. B 1、float的div一定要闭合。: C# f9 j" [, _ p( [
0 @ l8 i T* t; J$ H& u: w/ ?8 f 例如:(其中floatA、floatB的属性已经设置为float:left;)
6 H# Q/ J; g' V$ n$ Q8 v& r<#div id="floatA" ></#div>9 A- ?3 P' B2 N" P, n) I8 U' y+ L8 r
<#div id="floatB" ></#div>5 |: X1 v( V2 B6 K1 l* \
<#div id="NOTfloatC" ></#div>2 ?# C: J, |% A; E7 P
这里的NOTfloatC并不希望继续平移,而是希望往下排。4 T$ E _/ N1 z; ~( E y4 V. y
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
5 G4 E4 h0 V; Y. T+ y 在 <#div class="floatB"></#div>( F, i( q: o* K' r
<#div class="NOTfloatC"></#div>5 P# Z; q* B$ a
之间加上 <#div class="clear"></#div>3 Y; A' ?+ ^' s$ }, L4 H' }. Z6 V" a
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。. W+ i+ V0 ]/ t2 G' K/ @6 c
并且将clear这种样式定义为为如下即可: .clear{
, d) a i1 ]+ H( @clear:both;}; g' O% [( R# x1 R# {8 m$ [
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;8 y$ n: ]4 w7 D; m5 O7 @6 O$ i9 h6 H$ w
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
% A. D) U; l, c* Y7 D0 D 例如某一个wrapper如下定义: .colwrapper{
$ E0 f! f: H& Y1 Yoverflow:hidden;2 e$ |% e6 V# N' l- A3 f% H$ q7 F
zoom:1;' @% o8 p8 e& G
margin:5px auto;}" j0 F/ i* \7 W" h
1 P8 D. e- a' z% T
2、margin加倍的问题。
8 I1 \- J& `# p+ N/ N3 M; e7 E% O* c; [+ H
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
; L J! U6 S v 解决方案是在这个div里面加上display:inline;2 Y7 _0 Z2 j3 S( r. W3 F
例如:
& N7 _: `" r; W9 Q9 u<#div id="imfloat"></#div>, h' N" X6 s; f8 z9 z' B3 L; O1 v# c
9 Y( h$ t7 d0 l4 `4 Z0 _. ]3 ~. m% Y
9 O# u* @5 ?" H/ l! I 相应的css为# T5 l8 ^8 c+ h9 | f D* O- a% ]
#IamFloat{
- p, X- |) v6 Mfloat:left;! a3 v" N. |! U4 ^. p
margin:5px;/*IE下理解为10px*/
4 s+ D8 O e |' K! o, k; ~, L- @display:inline;/*IE下再理解为5px*/}
! t. k; C. N$ o: O. Q* J& w2 J; n5 U) @
3、关于容器的包涵关系
! W J; S- A$ \, A1 n4 q, n, g$ T$ p
3 R/ A, Z0 k7 A2 y8 p$ L 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。+ d" s& M- v0 q7 @
3 k/ \' \: q# R d1 p0 r; u
4、关于高度的问题0 r! E9 b9 }6 a
; N' i9 ~4 h* `' Q 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
" W! f" B9 M2 e$ u( @4 V0 y/ B; O" u4 S9 w3 S
5、最狠的手段 - !important;
; l' ?8 Y# s* a1 T8 [
7 n- |4 @1 I! {3 D, w 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
7 Y- A- o, e, S: wbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
! h) L7 ?& G- J$ M# ?+ Dbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}8 \' n& f8 R3 l* |6 P; D$ k( e! y
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|