|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14321
- 金币
- 2446
- 威望
- 1647
- 贡献
- 1394
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。# x( g' ~8 C+ b$ E2 T
9 V# N2 m( |, s& Z6 i- P; z2 V3 l
常见的兼容问题:+ T+ A+ c6 p( J4 o1 e0 _
' x3 E$ K9 h; S4 R 1.DOCTYPE 影响 CSS 处理5 D6 Z, B. A2 {9 y
0 i6 ~& R/ \9 t! a- {0 m 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行3 o( j* u2 D" d' I" Z
/ v$ o7 Q1 \8 q/ u 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 ~( }5 r: @! j, H% V6 r: p
) `3 O- Q ` Q P 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
- v0 @& \. _$ g# G! f& N" x
% O8 N. ]6 d) P9 @3 a 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
7 O$ ~8 y1 T0 d( g+ h
2 i+ {7 y9 K6 H, k C 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行+ E+ ]- O# n8 \* L
w$ b5 B% I. l( I- l/ F 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
3 f8 F; A1 I5 o, Q$ b& Q/ D3 ~) k ^
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。! ~! ?, a/ h, \
* n; o! P4 ^. Q$ `
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}. _- H: }$ r* u4 E0 O+ P- |; [+ v) g% o
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
2 M3 b3 _, ~4 ]! m& s r M& K3 i 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
. }& N3 |2 ^( ~7 _8 e; N: w5 ^' g; N! w* b) [) g! c2 `% z; p
10.IE5 和IE6的BOX解释不一致. G8 s2 s b7 Y* w' U0 [
IE5下 div{width:300px;margin:0 10px 0 10px;}3 r& q7 Z, W+ s; M0 p
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}7 E2 S, C( a, L, g: N
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持+ t! X4 P8 ], L$ w
( t$ r. r" c. j1 n) Z 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题( R/ p% O9 w, {- L9 d( W
, H4 W0 h; G4 z8 @& A3 E0 ~1 v& \) T
注意事项:6 |; m$ A+ I: F) S
9 ~/ z8 J, j2 c: ~8 E. W 1、float的div一定要闭合。1 [/ `, {3 v! E4 H! x
6 ?, p# j; {* O9 d1 b$ C0 ~
例如:(其中floatA、floatB的属性已经设置为float:left;) & P/ H5 [! V% {. e. _# q
<#div id="floatA" ></#div>
; N* r- [8 A4 Y/ g5 N, Q! B<#div id="floatB" ></#div>
& M# [' g; v8 u3 g2 C3 K<#div id="NOTfloatC" ></#div>
! l$ k% |6 C1 f; }% |9 b' M" e 这里的NOTfloatC并不希望继续平移,而是希望往下排。) r. g% G9 R% X; L* i) n: ` l9 H1 U/ M' ^
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。+ T: t. _8 j1 n9 W0 c5 d
在 <#div class="floatB"></#div>
6 E# P4 I& j% v& M+ ]% L<#div class="NOTfloatC"></#div>& P G* G2 l) v7 ]# Q
之间加上 <#div class="clear"></#div>
+ _9 D9 G. v U' o# L 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。' a2 Y+ I6 H$ ]0 e8 C/ P- I- y
并且将clear这种样式定义为为如下即可: .clear{/ I" E0 H+ j* n' ?, V9 }3 F
clear:both;}+ p2 ]1 T2 Q2 C& X
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
+ @. L4 f* h' H( o 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
4 _6 e: r3 P1 S9 k; O# n 例如某一个wrapper如下定义: .colwrapper{* ^! b) q% G8 [! B( k3 s
overflow:hidden; K( b4 X& z( B. X+ Y
zoom:1;
7 }, C8 A# M, m7 lmargin:5px auto;}
" D/ q2 G8 y5 Y
0 ^: \. F1 b( f8 @ ` 2、margin加倍的问题。6 g2 @& m5 O0 c( w6 X* y( R
! S* n! H5 D' P; O# q3 d8 Y
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
7 G( N- Q# H) x1 C 解决方案是在这个div里面加上display:inline;
# x+ ]8 w/ D# s: v" F' }4 K6 x例如:
% y2 k" ? H5 E& u8 u' f<#div id="imfloat"></#div>+ z0 r: z- |/ @. a! y2 x
# p; I' d, B5 v, d" X3 F
$ [6 z0 _! l. ?9 Y* S0 U9 H 相应的css为' Y1 q4 i' U$ R( g
#IamFloat{" N# z0 u6 g' L$ e3 {
float:left;
$ h/ Y) l* r9 J$ ?2 Vmargin:5px;/*IE下理解为10px*/" E2 J* [: b- O0 u! c
display:inline;/*IE下再理解为5px*/}
2 ~/ w6 u, H1 k6 z% \+ ?3 W* b* T; C" }
3、关于容器的包涵关系
0 P: d5 Y/ [3 N" N
0 a+ \! u: U1 P$ f/ \& r+ e 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
0 l! M2 o7 I" w5 H8 Z) Y) d( s8 \3 S- f
4、关于高度的问题' O$ q; E, p7 h1 E
5 z0 \" a& K( y( z2 H. W1 b- H2 N 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)- c$ z; K7 U2 | c$ N
1 Q7 z* X, a. D0 ]
5、最狠的手段 - !important;0 K4 ?9 y4 y1 K7 g& z5 Y
5 J! U5 h& U1 E
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
2 m" h2 l q1 P0 Ebackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
. T1 ?* g6 N: z! E+ qbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}; X5 W0 }4 W6 P+ o) w
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|