  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
2 X* Z3 ]2 R& r% R( ^/ e/ B" X2 M- f- A% i8 h: r7 P2 V" i/ m) ^
常见的兼容问题:
1 E' G e! g) E. u; f) p& ?( w2 V( U
1.DOCTYPE 影响 CSS 处理& w7 m$ [( r/ R, n8 J
, ^8 a8 _1 n5 ?: r" `) Q
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行7 Z9 E. `" E8 b
8 h' j& d& k0 a
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
! n: P' E# }7 e. d" {' R( }) _8 Z9 l/ u; `
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
2 G5 c* P3 b" h, }2 C$ w6 c" N3 }
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式: X4 \- l2 V! h" l. x @
$ i$ A( S6 V% a2 ]7 E 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行 O9 w1 W- W: }1 T) _
9 J! E5 D2 Z0 F4 U
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
2 o2 r6 Z& @* J. O+ q0 [; F4 [
+ j* ]& A5 W9 @& w 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。1 P/ ^/ Y& g: e
6 X7 l$ [- e9 ?1 Z; p/ J# s. e' U6 _9 ]
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
- ?& L. \: ~* ]" }& k! p# i& j 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px} o) u( [& |7 S3 o* \& g i# q; v
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;; [# m& @# W+ d; ~, z6 k2 B. v
, t6 B: S2 u+ C
10.IE5 和IE6的BOX解释不一致
9 ~7 e" [8 \; `- v0 M }. ~ IE5下 div{width:300px;margin:0 10px 0 10px;}
8 K3 d @) U4 t. ` div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}/ M" I& C$ i b% D
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
9 y5 O: U- P* Z
* W, |6 I0 Y$ p! z! v 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
8 n8 ?. O' ]. X9 T4 ? x9 u0 u- w& e6 |7 d8 i2 ^
注意事项:* ?" x/ b! b) k; X3 L
5 N+ P5 M. m; l% p, x# h3 g
1、float的div一定要闭合。/ X7 k, i' o% b. g% x: O
# i% h+ l! C0 Y/ K 例如:(其中floatA、floatB的属性已经设置为float:left;) 2 D) c- \% t! `0 x9 C: Q& N- {: M3 b
<#div id="floatA" ></#div>, \- x/ ]& {% a9 D7 r/ Y/ P
<#div id="floatB" ></#div>
6 a; C& b9 f3 u<#div id="NOTfloatC" ></#div>
' }( M+ L5 k6 E; ^% W( x# k& b# n 这里的NOTfloatC并不希望继续平移,而是希望往下排。
) W- \7 @8 T/ O; j; b) `( U 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。, B9 P a$ v/ y2 Y7 ?3 e
在 <#div class="floatB"></#div> G/ i) z8 m, U% b
<#div class="NOTfloatC"></#div>
7 P% n( Q) {6 x/ \3 D 之间加上 <#div class="clear"></#div>
4 z, o$ J# ]/ | 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。9 I# X8 ~$ v. J1 |
并且将clear这种样式定义为为如下即可: .clear{6 W) G8 c) A' a5 o1 [
clear:both;}
# M4 I) j# f/ t* w( \ 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
% }2 r) K l0 j 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
9 P* ^, J) {& q6 l- a) \ 例如某一个wrapper如下定义: .colwrapper{3 a* D z+ n: s4 n O4 f
overflow:hidden;" ^: W8 y' b" W8 Y2 }
zoom:1;
4 o& R. z5 L) _ E; e/ o4 d8 ^/ Z/ F9 ^margin:5px auto;}5 L" z( ]/ R' y3 a
9 D& M# }! E3 v: A
2、margin加倍的问题。
" s* A. ^1 g* [$ M1 _4 A' T0 F1 x: X& R- z8 {+ i) i, P
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
# F2 ?# r0 D1 @ 解决方案是在这个div里面加上display:inline;
1 w: c$ ]6 n, P9 i+ `# T% z例如:
" s8 E# v5 Z+ v<#div id="imfloat"></#div>
. q% A9 h1 A: z& ^: c1 }9 m, v5 C. l9 y/ L' a
- h- P l6 O# C; c" a2 b$ x
相应的css为
. S3 @9 {5 {5 A5 z. \4 |5 T#IamFloat{3 k1 G) `6 \: Z) B/ d0 h
float:left;5 g$ d' B& h) G6 u
margin:5px;/*IE下理解为10px*/
2 B0 y1 {6 h/ |6 E2 ]" Fdisplay:inline;/*IE下再理解为5px*/}
; L" s4 ]5 w+ z! I7 M3 o" ?2 [. E* y4 C) }
3、关于容器的包涵关系; O; T% B+ K7 K4 y9 G+ ?/ q Q. o2 n
$ q$ `( t( J! E+ h% T$ H* L
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。4 D% O# r) j, w( m5 D* p
& O9 J2 Z. j- l2 [
4、关于高度的问题1 E! _% m8 Q* j9 y- P
% J+ P) h9 q) \( [! D }1 A3 j
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
2 g+ b$ r. e1 h
7 A* W( L. x/ x# ^4 A+ J1 B 5、最狠的手段 - !important;7 K* q+ ^* Q# o; M8 R- [
4 C0 [% z }# |( r 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
8 b% k @& ?2 X2 {0 `1 |+ K0 _background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
" M* G. y2 U- [! G; u4 N) Ybackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}: m1 i! `8 O- m3 x# B: }" g& t
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|