  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14189
- 金币
- 2385
- 威望
- 1647
- 贡献
- 1333
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。7 M! i$ P1 |: P+ }; Y& l8 G$ O
/ g! w9 e U% y, {% S* P I
常见的兼容问题:
( A5 e U) G" z/ h: S2 k2 \1 r5 O
( I1 X+ h R7 m B- x# t 1.DOCTYPE 影响 CSS 处理
1 T' z* M9 g0 q9 y4 B
* t, y5 S8 J( w" H1 s) O; v 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行& W7 r1 x9 n9 F6 l" d" t3 V
4 z& P+ h# w. W6 U% D( Q" ^) [$ ?
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中. v) S1 o% J8 \$ u
, e5 w' w8 q" @6 v- e 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
) y% d/ @9 W1 d( U5 m5 o8 p: h' O q) n; c: V8 }
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式& _5 A, Q7 W& s: G" [' c: h2 c, w
$ B2 b5 i5 J* ?) V 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
/ @& \: f/ h1 P4 O
# L9 ?5 P5 Q4 H) ]- T* N5 y 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
' H4 I5 j7 P% n( C. u# h
) u( d( `8 y, {' K J 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
! s; Y# x7 u7 k) Z& m9 q) f' Y/ {. \8 S& r' ~
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
7 P& ^; @3 ] L8 G: G# C% C) v 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}6 C# @, e: b1 j+ N% a$ A7 u$ g
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
+ Q% F8 k( w) I' O, a1 \
# \4 [! r8 x* L. \4 }) Z) G 10.IE5 和IE6的BOX解释不一致2 A. c+ O- L" o D! m
IE5下 div{width:300px;margin:0 10px 0 10px;}. s, ]3 y$ L( m3 s8 u
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
; F* O9 S1 R6 _ 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持- [! n5 u" @% g u9 U3 b3 \# T+ t
$ V# O# K7 H8 x; X" L$ Z# l
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题' E- g' s! V, `) |2 K. n
! e6 ^! W( |1 I8 t; ] 注意事项:
9 R2 s( h( l* b! A& d/ n# q( F1 x9 s& A$ Q; E+ A0 [ F. l, o* ^8 v
1、float的div一定要闭合。
3 z2 W4 q+ e" J. P, v1 c# G: j# M* z: T( i
例如:(其中floatA、floatB的属性已经设置为float:left;)
0 b. |5 R8 F' p: }6 L: k: R& H<#div id="floatA" ></#div>. D8 A1 m0 |& ]* h; R3 n
<#div id="floatB" ></#div>
8 x1 k2 I3 G5 E% B3 D$ W2 v<#div id="NOTfloatC" ></#div>
% @4 F" z* R$ X 这里的NOTfloatC并不希望继续平移,而是希望往下排。$ k0 E: ~0 o0 t9 b `! @
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
0 T& \( M& X2 f6 ^$ n7 d9 G& h 在 <#div class="floatB"></#div>/ h# K m' T+ l+ o( W4 E$ C
<#div class="NOTfloatC"></#div>4 D2 l! i, q) x9 B( Y9 z+ t! Q
之间加上 <#div class="clear"></#div>
4 V; B# C' [7 S& D& D6 Y 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
7 Y, I- m6 u* Y+ j. H) ]& e+ X 并且将clear这种样式定义为为如下即可: .clear{7 f3 l6 d( R( X; X
clear:both;}. q4 D: V9 |, P+ H/ q1 W# M0 s
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
: V; F u: Y. y" G4 V 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
; B; S0 z+ ]2 R0 p; C7 c% E 例如某一个wrapper如下定义: .colwrapper{
3 e" C6 t$ t/ c. Y6 z4 woverflow:hidden; v) r" J$ u& C x1 }
zoom:1;
+ o7 v4 q H$ C) F# lmargin:5px auto;}: b- x2 o7 G5 O; x! q
: ^( t4 }8 Z! C" Z$ C F
2、margin加倍的问题。
0 i8 B3 D; F# q. E7 d
N6 o$ o+ I" J 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。3 I. P* S' X6 o# \
解决方案是在这个div里面加上display:inline;
/ z' C# K1 d! O4 m+ q4 }% U例如:0 p" {4 ^3 H, c. B
<#div id="imfloat"></#div>( h5 m; {. l! [1 ?
2 A# h) t* t- l5 [! Z7 f6 K( }4 p" Z0 F3 V
相应的css为" I1 S0 _' }$ W" s2 x& T% L- t
#IamFloat{
5 h( w$ Q- u1 u5 i* V x8 _% Hfloat:left;
4 x' Y' D4 q7 q# A9 qmargin:5px;/*IE下理解为10px*/
* e' M! v& B4 a; e5 k/ ^display:inline;/*IE下再理解为5px*/}0 @. X- D% k E$ Z
6 a" ]8 r2 _2 q. C1 `# o 3、关于容器的包涵关系
d8 K5 a8 g* A2 k+ i) w# J6 t8 c, S# a; ?6 N. h$ v1 M: J$ W- d
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
9 Y: u1 P+ O: S- [( o' z* a
+ K3 n* {" u6 r5 G0 Q# ~ x 4、关于高度的问题1 M% s/ M- t5 }" G. w( j
e3 }! @6 }+ G 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
5 V( O1 r6 q8 f2 g- B2 ^5 C B$ _4 \( I& R1 q
5、最狠的手段 - !important;8 p) F" w( y" J+ X6 l7 u9 v
; U6 X0 j. s! ~9 @ C9 u# J/ q 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{; E& K! y" V$ k* v
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
7 N! Y4 ?( U: e) ^6 q! A7 lbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
+ a# ~$ e: M+ } 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|