|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
' M( ?' l2 J. d& g# m/ P# l( o3 R4 _
常见的兼容问题:
- p1 v( G) z) s% k( F. p- }; v. ]6 a1 R* [
1.DOCTYPE 影响 CSS 处理
3 J: K+ z. ^- k+ v
5 w( E. _1 }3 c) z 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行1 S5 H0 }9 h2 j6 [" [
7 ~+ @8 P, ?* ^
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
9 c4 [9 |, _" V# c: r) S2 H+ b$ T1 ^) V
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
$ F; A' c( G V0 j0 O7 E& m0 p9 p5 f& B7 r+ g% w
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
/ u' G' {6 `& t! l/ M# s2 P! H/ m' ?" a3 J5 B( D8 y" G2 v
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
! e+ e0 W/ s( t+ k4 p/ X! J3 Y6 A `- M+ z5 |2 L" |
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
% N; R' E! r& P5 q, v( @3 r# @' o0 K. c9 a& G! P: X3 J* }. S- c
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。5 N. t0 c) i+ M; o
4 v8 @- [; j4 r* p0 H( A. f
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}" ]+ i/ S) D# R# z6 s' ^' \: v1 q! ?( ~
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
9 v6 I, W4 g4 o6 k# q 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
$ a, v$ V9 ~6 _" {: T3 X8 u
) T9 w+ I, c3 u& v/ X3 x 10.IE5 和IE6的BOX解释不一致
8 W' m$ M; V( E. I; d" \& _# U IE5下 div{width:300px;margin:0 10px 0 10px;}* [- c% N. I6 R' B/ P6 D# A |
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}9 D# s+ v2 i# w/ L J1 H
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持 \! E: Z3 `" ]& l4 F* Q
0 x# i# S' J( g
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
, L* K9 a5 W0 h( g# w# g; F6 P6 X( i
注意事项:2 V% j+ G; C* }( {! Y) u
. q" F9 @( x8 t9 n& V9 X
1、float的div一定要闭合。/ `; T' x; W/ N' }/ c
( M" {- ~' x7 n& \" L$ a 例如:(其中floatA、floatB的属性已经设置为float:left;) ( [1 w* g- A* f% c' d
<#div id="floatA" ></#div>2 l4 P1 m+ Q+ K+ ^4 y* N+ W$ u
<#div id="floatB" ></#div>
! p o! S$ P6 M: W<#div id="NOTfloatC" ></#div>- l/ @) Y. U# }3 f
这里的NOTfloatC并不希望继续平移,而是希望往下排。) t9 E# A% u2 [: I+ {5 x
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。2 A, Z' `# r9 h8 q6 a
在 <#div class="floatB"></#div>
. Q# c& N/ {# F& z( Z0 [. L<#div class="NOTfloatC"></#div>( i$ v; x1 J& J5 Q0 b c
之间加上 <#div class="clear"></#div>
; A8 Z6 q: H8 [, d 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。2 [! B; ^, R2 a7 F
并且将clear这种样式定义为为如下即可: .clear{
3 p4 |3 t2 W W. _+ A5 bclear:both;}) r' t! E7 }: z: p6 @% c/ r
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
6 p6 b4 j/ ~' e7 P, f# G3 `) }9 T: S+ B 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
4 B" O9 _% y* R, c# b2 k0 z# n 例如某一个wrapper如下定义: .colwrapper{
& C8 d9 \9 h b0 ^5 c$ J& qoverflow:hidden;
$ \' t- @, N5 E$ G8 P4 azoom:1;
. s8 [- [+ a9 w* y# L6 E6 J# u9 rmargin:5px auto;}
+ ~7 A4 a' h8 m/ K
0 o8 T0 U% m9 E: W, N 2、margin加倍的问题。
- S4 @- C0 Q3 a3 j: ~. X A& V+ _# V. H, I* O% g# k. E0 e
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
/ d4 B+ T1 n* P$ C2 h, p 解决方案是在这个div里面加上display:inline;$ c4 `# N5 `9 c P% x6 o; ?: N; u
例如:
e) P5 I: N$ Q<#div id="imfloat"></#div>6 u2 t0 T# P+ P+ K8 E, |
. U; s: C, B* k& v' d1 @
" f4 y* Y1 T$ T9 t& F" z 相应的css为) S' G+ u% C3 y; C3 j% }, }. f. u
#IamFloat{
5 Y3 Y5 p7 W( B+ Q3 y) dfloat:left;
8 n; r* J/ ?; b! ]" H: n1 Gmargin:5px;/*IE下理解为10px*/% E: D1 F1 u$ E0 u
display:inline;/*IE下再理解为5px*/}! ^* x2 Y8 W4 m. P3 ?# @: _
& a9 i2 h! K* W: Q2 d1 b 3、关于容器的包涵关系
) n' l% F [: t3 g; H n" j
! C9 a4 a9 h; }# C 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。" O2 N! c. _$ }- \' e
$ B6 X6 }7 n+ _3 p) R) _% A1 Y) C
4、关于高度的问题
+ A! D0 n6 Y) F5 J q7 H
+ {& Z1 X) M. a: |. d8 g 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
! x# [ h9 m m% |5 t+ _* ]9 A9 V4 k' p+ V) t
5、最狠的手段 - !important;
+ m6 E1 E7 n6 c+ s
6 Y1 c5 I, \. K9 z3 }; a 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{3 m7 ]* V$ u/ |& F$ m
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/5 D! J0 N0 c8 p" V
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
2 y, q, P% ]$ I- [ 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|