  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。0 p, T5 u1 z8 p2 U& \
2 @- w) H) a: V/ ~4 n2 k4 R; X 常见的兼容问题:$ a2 ]- [0 [( y& L) }2 I) o5 I A. |
- n, j* f) g1 ^; P; C
1.DOCTYPE 影响 CSS 处理
; g. Y$ F( q& ?' e. E5 d( E. O6 Y3 Z! {; F+ U8 k, M# u2 B" J+ ?6 F
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
% J. U; G9 V' V+ _4 a/ M
, a( J# X, {. ]' Q' x4 s; { 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中: X" g( b: A9 J4 G
7 ~# s; u9 J c; R; [
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
2 v; X+ \5 @0 g1 P
- l& u6 W( g5 m+ q6 R% U 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
$ l- y8 @1 c' s5 |3 ~5 w' { D4 I* ^
3 G8 Y2 o& h6 u$ n$ s' n 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行3 j6 \2 ?3 y/ N/ h
2 R, M7 e* n4 n5 q
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以' |- m, V6 B" K5 I4 K% {6 A
: n8 b4 F' a. u9 D 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
$ H1 p! e7 M+ B4 z; ]$ E# j& n
# t; R; O& s, b6 ?: ]8 p- L9 j9 Q r3 P/ G 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}2 {, d+ Q/ C* A6 E/ ] n( e
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
! R- G( b0 W; u& F 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;7 j Z' P$ r8 j5 y. E
/ I8 ~1 R! i1 F Y
10.IE5 和IE6的BOX解释不一致3 p5 }: w7 l# s% h4 B+ y7 k
IE5下 div{width:300px;margin:0 10px 0 10px;}
5 J" f( B' V, f div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
4 w: d# o6 D2 N2 ^' Y 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
$ K6 ~8 ?* {. T% F. R$ _: y
8 @! z' C k' S6 r4 I, X 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
$ G- e: n3 k1 P6 j$ H
! h4 Z* A/ K$ [/ o# W; ~ 注意事项:
/ i3 z; R4 ]2 S- H( @- b4 _% U
' _/ h9 v: S, l1 X7 }% ^ 1、float的div一定要闭合。- o) L5 X+ N$ Y+ q2 P6 ~
) ]& u& c6 y3 o 例如:(其中floatA、floatB的属性已经设置为float:left;) 6 R# C; W+ L' w. }5 _
<#div id="floatA" ></#div>7 j6 x$ A3 X9 m8 l v
<#div id="floatB" ></#div>
4 d7 S5 }* K4 ?% W# Q<#div id="NOTfloatC" ></#div> R' x) M, }2 u& F$ K8 T
这里的NOTfloatC并不希望继续平移,而是希望往下排。
+ F. Y j, K3 p# E" n& e8 ~5 Y 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。* C( O5 S& t! Q" c
在 <#div class="floatB"></#div>/ m' F/ Z6 Y& Q
<#div class="NOTfloatC"></#div>
2 E; {8 b; u+ M4 b! F5 b& s2 W, A 之间加上 <#div class="clear"></#div>6 T* ]9 G% S/ I) o8 W2 e
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
( q: }9 L$ I; J) ]( C/ g 并且将clear这种样式定义为为如下即可: .clear{
6 ]& w% l6 \& N5 A8 ~clear:both;}
9 n# G6 B# b" a, F# b- J 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
# Y7 i) `4 F$ X2 A7 ] 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
# ^- X! J) j" |) [+ } 例如某一个wrapper如下定义: .colwrapper{
* ?( S$ _. o: j& g- z0 l/ S* Aoverflow:hidden;7 }8 b& Z' i2 X9 a% f; ^
zoom:1;
! t% k# k8 U% `: `+ q# J% Vmargin:5px auto;}1 V; V% h* T- l8 }( u
* z! h9 U( o6 ~( T% c5 D' O$ p 2、margin加倍的问题。# {3 i4 l) t& S4 P$ V1 D
( v3 {( ]5 M* B
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。/ ^; u9 K3 P8 L8 p8 v3 m* n) p
解决方案是在这个div里面加上display:inline;- g' _& d# Z4 i' B' _! n
例如:# R3 G) v; F1 [0 k; B3 _, p1 E: \. `# v
<#div id="imfloat"></#div>, ?4 G- f6 J& H4 V/ ~2 ^! F% f
. t& j4 p; R5 O( c: D1 @8 [, [
3 c/ U6 @, M" _1 u" H/ {( f. ` 相应的css为
4 z1 |2 C8 c) g! q1 U0 p+ O6 G, E#IamFloat{7 Z% c& S( s ?4 Q( y. y
float:left;
# L1 h* Q. r L- B# A- Qmargin:5px;/*IE下理解为10px*/
8 G/ g8 z/ {: cdisplay:inline;/*IE下再理解为5px*/}
! |0 e; d5 b \* S: o, V- M9 E. Q' T$ T" d1 C" i7 t- a
3、关于容器的包涵关系% o; {: A* j0 c& E. Z
9 s5 e/ M8 X1 o" U: w, |8 C 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。+ r) W+ \+ ?! N; [+ \( s
/ c. W% n& q, O/ w* q; z
4、关于高度的问题7 D' L1 Z( U* W( D
/ H3 U( G8 E0 O3 g! ] 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)6 G% j1 z: D) ~8 ]6 p$ ]6 a
- } V) h& e' m
5、最狠的手段 - !important;/ s) f. Y) q' N
$ i' |- L" Q# J- c
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
. u- H, r3 Z' ibackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/6 `; L v" K8 \" B$ D. h
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */} t4 C: N, ?( r
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|