  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14191
- 金币
- 2386
- 威望
- 1647
- 贡献
- 1334
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
& ?1 r3 c' [$ H- \" Q! t0 d2 ~, a# G! t% p5 `
常见的兼容问题:
4 u) F+ }# P x8 P! _# W$ [$ o$ E6 C$ I5 i5 d* k8 H; q) U$ U+ T1 `8 [: {
1.DOCTYPE 影响 CSS 处理
- F6 }* Z7 I' | H3 P' Z' A( C; q2 ^
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
. C$ H i: H8 I- ?( L" _- ^
# {& @# l C# M" s 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
; k. S" U+ ~9 w
7 ^3 z S( @0 [6 S! P! v 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
% ?0 o# r1 |# ^7 J- e( ~ z+ C' M+ @4 J3 W
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
' V0 c- v7 u4 ?& m3 P X
! a$ b5 Q. j. t$ \ 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行4 g6 U* E1 N& t+ F
3 N" F: o7 n' {/ V 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以 R1 \( q6 W# l1 P
0 Y& F4 F9 a1 O: ] 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。7 V; q$ l$ N( d- h& t, O
. s( u! _ j/ \7 Y* w( }
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}9 l3 m- R: S: Y0 D0 T
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}& X0 z4 C7 J; c6 \' |$ H
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;, f$ c1 v- @- N
; j, L1 E6 w; M+ z X$ M 10.IE5 和IE6的BOX解释不一致( D2 k7 ]9 }. S1 H. s
IE5下 div{width:300px;margin:0 10px 0 10px;}
, u2 o8 H) }# H6 t' ^! e: m div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
/ b2 s4 L/ i' S4 [ 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
) n" w0 E% ]6 A# r V F8 N/ ?, b6 w/ [" U" ~) W7 h
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
$ @2 R2 L6 V+ D1 f" T; F2 |+ U- Y2 e3 V( D
注意事项:) \$ w- v' n0 A3 c, [" R* p
% q( R) I4 F. O& E- [# q
1、float的div一定要闭合。
$ D# ?6 ^" t/ ] e! |$ r _4 a7 Q
! L% ?" q( i9 [, A( \: z1 | 例如:(其中floatA、floatB的属性已经设置为float:left;)
, G3 a, U b- |7 x, }! L<#div id="floatA" ></#div>
% X7 V6 u3 ^$ V x<#div id="floatB" ></#div>
/ W& _% i1 @: | q5 I' A<#div id="NOTfloatC" ></#div>
* ~& Z% v+ ?, Q* t ^* I7 N 这里的NOTfloatC并不希望继续平移,而是希望往下排。
: e* j; j0 ?, P* i- |. x, u 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
c) Q" D. b8 D" x4 A 在 <#div class="floatB"></#div>( Q8 A9 `$ C& t; V
<#div class="NOTfloatC"></#div>
B" _, N& y! B7 v' ^( M, S* W8 j 之间加上 <#div class="clear"></#div>) n4 j) }3 X5 S* t# {, U7 q
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
! q( l- A L( Z7 H5 H/ X 并且将clear这种样式定义为为如下即可: .clear{. T: a$ i H9 n5 k3 h3 F3 D6 m
clear:both;}1 v( V- ~8 s0 Z6 B) C! J* F
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
2 }7 Q) c# {0 ~5 `8 I- d1 F' ~ 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。/ m y+ \! }9 z1 V9 K1 D& u
例如某一个wrapper如下定义: .colwrapper{
% v+ M0 I5 f3 G/ l- Y3 zoverflow:hidden;8 B: \& Y% f2 x, t
zoom:1;
3 H- ?% I# i; G: t/ _margin:5px auto;}
- t% N" D$ B q9 L4 s3 l, I, X Y2 W/ \
2、margin加倍的问题。; q& Q7 G. {7 w4 u F
* G7 s' u Z* {8 | 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。& k% T+ D9 V% {. R
解决方案是在这个div里面加上display:inline;
1 W' ~* y: v! A, j5 Z例如:) C( b+ D6 k+ l4 W5 j& n5 d1 X
<#div id="imfloat"></#div>$ [8 {2 E; q# [! p
# H, v$ r% w; a- y- z
/ v7 _! u9 J( l$ ]) c* }" y
相应的css为1 \; F* }8 `9 N+ Q6 o8 e
#IamFloat{
' Y5 T' ^( f0 Efloat:left;! c; |* g: F4 b6 [8 h
margin:5px;/*IE下理解为10px*/' w' h4 M2 s3 T) O8 k7 [& i Z: T
display:inline;/*IE下再理解为5px*/}
3 D! M% C1 `$ ~3 }
$ m% d. ]! G0 r 3、关于容器的包涵关系
" a. k/ _; O5 j& P$ E6 r* N1 A1 r g) J) f* F! h6 i3 q
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
$ p6 w$ w2 L6 d
) {5 O: v+ y! u. D; F' T/ D3 w 4、关于高度的问题' R) P+ C1 h% }
' i; X6 X# y. L( Y5 _ 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)) h" S( z9 C2 \3 b; P2 ~
2 F/ b; k% c! q% \2 v$ x4 w' m
5、最狠的手段 - !important;
) f5 x' g; y; ~/ k- p, i# y6 V
9 k9 V2 b8 g. |4 s- H 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
3 z+ J8 m( s8 Xbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
: ^ L& X9 ~& c: y: Ybackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
: {6 h/ K# M& ^" Y 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|