  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14161
- 金币
- 2371
- 威望
- 1647
- 贡献
- 1319
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
2 z6 r5 [2 h3 @- x# m+ D$ Z- k+ M Q0 P8 V( N# S( v
常见的兼容问题:$ N o' R$ \# H/ S
: M3 R* E* L: ?; L- r1 z) `+ ]% m
1.DOCTYPE 影响 CSS 处理
! O; a6 h e4 B0 N2 T' E0 f% o- X$ J8 a( q
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 j0 E0 Z+ S$ \8 {5 f' l
9 Z( n8 w% C" w+ `, [! q2 w" ~/ r3 T) \ 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中0 H1 D9 s3 B+ x; o8 [5 T
) S1 ?- J& ]/ S" H* g5 x
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width m& F4 N4 F7 K. ]+ x( Y5 U
' @5 `% _/ g) B. T) D 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
8 C% ^- r% o" [1 Y7 w
; L/ L. S. q0 ? 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行9 N# L X: A2 _. C& t
( l, t: |. i- w9 B/ m 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以1 T9 h) J& ~6 H
5 y r" P% }& S4 g
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
& p/ F7 n# U: y& i8 O- Z4 Z6 s0 r2 e. A
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}/ @% n, H+ M5 z! E0 r9 z
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px} _) Z: H+ h, G- A4 s: t* h
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
& R. h' T/ D; Q
5 ^* W' p. }* |( z: y, |0 ^ 10.IE5 和IE6的BOX解释不一致( ^% z h- `; ?1 @' h9 X* q
IE5下 div{width:300px;margin:0 10px 0 10px;}
$ g2 d( R! R% C# Z- d div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}9 t; f1 s9 `: H% b7 d
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持% G$ i8 M/ a) T0 g* P7 u2 G1 C
! u( t/ K- G* {; O" F
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
?% j! B3 |7 w( r6 ?2 p0 l
7 p9 V+ l# {+ i1 @! d5 b% N! b 注意事项:
0 j) _, | f9 J% g4 {- r. b( \8 ~
1、float的div一定要闭合。6 T9 h* a- i8 u7 v+ g& L
. t/ |0 o1 U2 A- T b# _' b
例如:(其中floatA、floatB的属性已经设置为float:left;) ) L- E" B3 {+ M! D+ O! d" M
<#div id="floatA" ></#div>
' n, M& E+ j6 [% c% ~/ J. k- F: U<#div id="floatB" ></#div>
1 R m2 R2 A: g' N<#div id="NOTfloatC" ></#div>9 T$ M9 f) J: y1 b% z+ O
这里的NOTfloatC并不希望继续平移,而是希望往下排。6 h2 Z6 m2 e. l W1 e. Q
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
1 L; W& f. n1 z, l, \0 n3 U5 O 在 <#div class="floatB"></#div>) |9 z, R7 J, W& g4 g
<#div class="NOTfloatC"></#div>( h# p, I) e+ i
之间加上 <#div class="clear"></#div>
& i- @# A+ _2 K 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。/ N t% z `9 R+ ^. I$ a
并且将clear这种样式定义为为如下即可: .clear{
0 U$ y4 i) e7 R% u- M& D8 E' T. bclear:both;} s+ o9 O- `4 m) F" K
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;9 n8 }" l) {* T# R- N% @7 i
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
% ?3 x6 N$ |8 x8 x5 V 例如某一个wrapper如下定义: .colwrapper{& H+ x& z# p) |
overflow:hidden;! {4 j0 K$ O, V9 \
zoom:1;
1 R" s% [% U8 E5 J! Omargin:5px auto;} m) ?# d' `" J o( C
, c3 z v9 Y- q2 O" P 2、margin加倍的问题。
; D# F! \/ ?! }& n7 {
: O# W ]7 B* l4 H. f! @+ J: { 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
& Z2 U7 x: t% B8 f( c 解决方案是在这个div里面加上display:inline;
* { X" R0 e+ v+ U$ ~2 J例如:5 ], {! Z9 h# t+ j4 O
<#div id="imfloat"></#div>2 l- Q7 D ?4 W) t/ ~1 t
4 M8 @ E" P1 @
% N5 Z" E2 J$ `4 u
相应的css为 N$ r9 f% V. a/ s
#IamFloat{
T0 o$ t" B, a5 x: t5 e% C1 Lfloat:left;
- j3 e! t9 X8 R* Hmargin:5px;/*IE下理解为10px*/; P* l% D& h; ~8 p' u; T
display:inline;/*IE下再理解为5px*/}
/ K6 n; ^: v& S1 \
% c1 s2 y' ], |' c5 i! `" ~; } 3、关于容器的包涵关系 v7 [3 |( G2 c
7 t( @5 T& H, s" M9 {, j ^ 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。/ G; w6 S3 z2 V/ ?' @ }
' b0 B) V' d4 U! K
4、关于高度的问题% k$ n) j& t- ~) }. J5 c
: v) U; ?( z6 A5 O) j7 f& g 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
) k' U: A& @7 T5 J* Y1 a$ y. s4 W8 J2 g* [$ y
5、最狠的手段 - !important;
$ r' r& L9 N; Q9 N: |" e" o+ t: I# {+ n
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
% |; ]! A! P0 \& \( |8 ]background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*// O3 C+ d8 l0 N1 e" }/ t1 N# x
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}1 j: ?% W. c- q, @
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|