  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14189
- 金币
- 2385
- 威望
- 1647
- 贡献
- 1333
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
( Y6 [% ~" h# G, S" n2 A
7 \& U7 W. B2 q* |3 [7 n 常见的兼容问题:
3 M( h8 n! P \
# k6 n& I- b8 {+ g: D 1.DOCTYPE 影响 CSS 处理. A8 j0 h7 r: S5 ^- n
( p! Y7 q" {2 A( a6 I3 f* Q 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
1 I( Z# v) Z" X: o
/ Z+ g" a. M" k 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
; v7 T: [9 H& q4 J
: X% k* i/ K7 O4 X% n 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
0 H" u5 ?2 b: X7 N! \; O( L: d/ X; f% K+ D8 w9 [1 f7 R6 O. M
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式7 _5 |2 g* \: R
8 j$ C" X% }8 r4 S 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
) k* G$ ?8 @6 I( J. L7 U/ j1 M
% l) R8 t/ ^/ C/ a 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以- I/ j/ `4 w" a
. h) Z; a# x# I 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
0 P' n9 `$ }, s, K8 r) \4 w) R& i9 f
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}: r+ w7 O& q# t0 H. Y+ f
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
+ B; c9 X* u* s5 r9 U. z 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;9 A4 C, G+ z% c
+ W) `$ a, M6 ^0 J 10.IE5 和IE6的BOX解释不一致
% j6 H' A! u# X& ], g! {+ Y$ X IE5下 div{width:300px;margin:0 10px 0 10px;}* S+ X+ I- ^7 l8 i3 ?3 v: M
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}& e+ N U: s# W. |- r
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持& Q5 v8 B a9 [! g. d
i9 x$ R o/ g U& F
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题$ o* j' |; G+ d/ w E g. c/ W
6 v2 x5 g; f& a' |1 b! z 注意事项:, w9 L( ]1 n" _( {
% M G' _& g. l- |9 l4 @( ^0 [ 1、float的div一定要闭合。, f; N* a4 u2 Z( X+ [
" H6 e* z. Y; f; E 例如:(其中floatA、floatB的属性已经设置为float:left;)
3 p+ {0 z, z9 t) n! B8 d. g<#div id="floatA" ></#div>
, }- g. x4 L5 ?# E- B<#div id="floatB" ></#div>
$ Z, g! H+ Y* M @/ h7 N" n/ V<#div id="NOTfloatC" ></#div>; R, a3 U5 G* z% r# l
这里的NOTfloatC并不希望继续平移,而是希望往下排。
" {6 q" a) ?7 s& s4 X4 D% h 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。% v: {# b+ q) n+ g7 u9 c
在 <#div class="floatB"></#div>
! v3 T/ Z- ^+ E0 O<#div class="NOTfloatC"></#div>. C% i2 x2 Q1 [
之间加上 <#div class="clear"></#div>4 C$ ?: \7 l0 R$ V( @5 o* u: J
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。2 ^# E( ^/ O( s! I7 y2 A' u( ]
并且将clear这种样式定义为为如下即可: .clear{: F% W" J F! d: }) P S
clear:both;}( L; N, h9 O" P; }, d
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
# q# r, O8 m/ S X 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。1 e! d9 z9 U3 g, d" b$ Q: S2 {8 t3 v: [
例如某一个wrapper如下定义: .colwrapper{2 W1 [' X, ^4 }3 [9 d9 x" i
overflow:hidden;1 p9 l2 ]* J! }1 q0 q) w
zoom:1;
+ ~. N* M" y7 u- ^5 Fmargin:5px auto;} q* j+ S1 |0 L$ d
& Z9 Y7 z6 C" G- f& V: c 2、margin加倍的问题。: w& B$ V9 ~- s9 S- ~8 \. K2 \
7 w5 k" C8 a6 v; @2 G3 W4 j( e 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
9 |/ c+ `+ s! o* P E9 ] 解决方案是在这个div里面加上display:inline;
0 I( [6 |5 `4 m5 f例如:" X: i$ o4 M4 X8 x) L: q# e
<#div id="imfloat"></#div>$ q% ?/ J+ J5 M- T5 l% C' t5 i3 e; \
- m0 q9 m/ f- }, V, J# i# ^
- B" L# `! O- n& c 相应的css为
: K' h9 ^ V" ?5 B; W#IamFloat{$ B. n/ U# K- Z: x* h- ^( N
float:left;
0 T. X8 i/ F1 N: h, A2 q) Y/ ~margin:5px;/*IE下理解为10px*/! r1 j, F' q" ]9 g; v' v( W
display:inline;/*IE下再理解为5px*/}) a' \& c( c0 n
, S+ p3 e$ x) t4 e c 3、关于容器的包涵关系
( o& x. I9 {# d& y! M( x
& ~5 `# S- S1 M- ^8 p% I 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
7 Y* o2 R: U" f) t/ Z! d3 S
! \" y) ?+ P% x7 _$ Y8 H 4、关于高度的问题. ^8 g. r' A2 s/ C* }2 |& {
3 ~, O1 A( }" y: o 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)5 N% r3 k" x" f- s$ A# |
2 l; x& W$ X6 f8 ~2 [" d7 L+ D 5、最狠的手段 - !important;- D2 f9 t7 ]! g: s% B7 L
: n2 u* X4 f& X( T 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
. h) w) l" ]5 qbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/5 X* I! Q4 a s$ r
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
- Z8 P/ d% @, i) ] 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|