|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14387
- 金币
- 2479
- 威望
- 1647
- 贡献
- 1427
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。, d# o: L) }* E& X h
6 i2 L" \" P W+ ?
常见的兼容问题:7 v b8 z6 l4 G/ r0 A# e
{8 P- p! v: I$ u+ Y% F" ` 1.DOCTYPE 影响 CSS 处理
! b) N4 P8 C! O2 O) G) I1 S/ _
- P! H0 z" ]4 \7 ~8 O/ I: Q 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行0 a0 F% o! y( ]
" N) g6 r ?1 E0 X! a$ R3 w
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中# h2 j3 }5 k8 Q
, T" E: k8 u* u% L
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width2 W# R5 `- j! ^# [7 ~. _( P2 j% y
6 V; I& |% C2 A9 I; R/ N' J
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式- L" _( z* c- r/ `: V. z
8 o0 I, w/ x" a i4 W$ F
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行% }# G& b6 ~7 w+ e. q9 E
0 Y8 C; w: O* \' K, p: \8 L 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以0 B' c+ G- Q% }* x0 `0 a
! M. Z# G: g( G0 T0 B, T" J6 R 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。0 ] [3 f% C. r" z
# e) k6 ^) s) W6 u+ p 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}0 z/ y' Z1 s% H
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
- U1 J" I. V9 Y o5 |( v/ B+ m 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;8 x( x0 y% }# p' k
6 G# Q3 T5 y. x+ S 10.IE5 和IE6的BOX解释不一致9 z/ X1 h r h! S3 ]
IE5下 div{width:300px;margin:0 10px 0 10px;}
5 r9 v3 r9 a" J. N div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}/ ?7 N( k9 ?' d% y
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持; H' R3 n$ r$ q2 Z t
" A! i& k" u3 p, D1 s* A% [8 f
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题( |7 p. M( M, F* U/ M$ z: Z
- i0 T( V7 J; O( m$ I( v) E
注意事项:
" b3 K% }0 O0 t7 C' H$ K$ u( _, J; ?7 M
1、float的div一定要闭合。( T p p% I+ M4 u+ y9 d6 R
9 t# q2 B. b8 ^$ z 例如:(其中floatA、floatB的属性已经设置为float:left;)
% ^# ?; J9 }7 C7 g: E$ d: Z<#div id="floatA" ></#div>
: Q$ ]0 v/ I# P! r<#div id="floatB" ></#div>1 H. n$ |8 A9 m* s/ E& |
<#div id="NOTfloatC" ></#div>! v: b7 ]. Q/ q- R# T
这里的NOTfloatC并不希望继续平移,而是希望往下排。
( V3 Z$ K, f, V+ R+ P' c0 D6 H 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
3 d3 W, K* M: O7 F3 |* T, ~* D 在 <#div class="floatB"></#div> @3 u2 r# j6 C1 ~
<#div class="NOTfloatC"></#div>& `* W6 j1 }2 G% J" e
之间加上 <#div class="clear"></#div>
% {' ?$ ~3 E$ k! } 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
2 |. g+ V; v7 R 并且将clear这种样式定义为为如下即可: .clear{$ m" R" D* ^, m z) o
clear:both;}* Y- F R0 f# O
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
9 V- [9 U7 O" I3 I- d7 I8 K 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。; ?$ N& b9 L5 Q$ H/ |8 v
例如某一个wrapper如下定义: .colwrapper{% f8 q4 P( r" \; k" X* k9 D
overflow:hidden;
; q# h7 u: @+ l1 p( R- Jzoom:1;
0 o0 n2 S7 D0 Imargin:5px auto;}
) e( v) ?" u9 D- s1 Y7 A4 s* j; }* @! v+ c7 G
2、margin加倍的问题。8 s9 b/ q" B+ U; u3 }$ |
# @2 @1 b! {! a) C 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。9 i; W- T" w0 ~3 k& O* q
解决方案是在这个div里面加上display:inline;$ M7 ]2 ]: S) ]6 U6 [% n7 L8 ~2 v) d) W
例如:4 X* Y' O" ] k& p3 s5 J
<#div id="imfloat"></#div>
+ U" I( `- ~5 i, y- r
& m; j% u/ Y/ l+ _5 h. r" l1 @+ a9 [* E4 q D' j
相应的css为
4 R/ i. {- y+ ?3 _6 y2 X7 D( n/ g: D#IamFloat{: x2 Y! V- s" T! r3 E
float:left;
q9 s1 E' r" K* Lmargin:5px;/*IE下理解为10px*/9 F# {0 Z9 G/ m' n2 c% z$ x
display:inline;/*IE下再理解为5px*/}
. V7 V" c3 e4 h% h+ |! x; y; K# X9 x3 a! n$ B
3、关于容器的包涵关系, m, c# p% B$ C5 H" H: P. G% o
. x3 ?/ J" l( c) `7 Z 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。4 W3 x) n9 n& k+ Y: T) z _5 K
& E A+ i9 Q8 O w7 U9 f 4、关于高度的问题2 |& j6 u5 L) _1 N
~# E9 }; O& }3 W
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事), T2 j- W! V. f/ I; b2 c5 C m, ]( U
1 G0 j: d: J5 x* |' _
5、最狠的手段 - !important;( ` }9 u$ s4 H6 E
1 }0 `9 _2 u4 O1 k4 t; X1 R" b
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{( g8 H& a T5 a* d8 y7 q" k
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/* Z v0 w2 t. x" n4 D& [6 u2 M4 @
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
5 a& ]& B* f# | 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|