  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
( k1 X* e6 i& o2 `' @8 ]9 ]3 y- U$ [1 A
常见的兼容问题:: F y% V t( O. g5 F& h9 Q4 o
% [6 K- r9 l5 D1 `" D% I9 Q
1.DOCTYPE 影响 CSS 处理
: t9 v# @# H+ V# q$ q( r. R/ c* C: f& g* Z) H
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行+ d) r4 q- L& e3 D' Y1 E$ d# Z$ u# F z
* ]# w5 ^: l' Y+ V3 g2 {9 r3 w: s 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 w* i/ q8 w; N( [# o2 K9 M
% y7 f, l4 g, k7 O- D' f 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width& b0 s: X) x% P
$ S; t+ s8 J8 Z# F. m' J 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式6 F. d/ F0 n# t+ E, L5 d. j! A
# l* p( M# r- c$ X6 ^8 i+ |: c8 x; D& d
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行- k! ?" N7 Y0 m7 U
. |' ^: g! a; \9 A 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以5 A) p3 Q/ M4 }; K+ S2 x
F1 }! Y5 s- U) L7 L6 D
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。' U# V: o% S( P
! ~. f4 _9 q# n1 V! e: @3 g
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
' [3 Z5 X2 X$ {( D& S W 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}8 k% n: l' h* J% t8 w
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;4 ?: w7 Y/ L7 h2 R9 g
+ T& l( {* e S9 q c5 z4 h" V) K
10.IE5 和IE6的BOX解释不一致
! u+ ~0 Z- R# T' T IE5下 div{width:300px;margin:0 10px 0 10px;}9 ~- |, |3 Y3 O/ R- d# c# X6 m
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}/ f7 M$ ~5 N) n$ f8 D
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持* T0 y. l$ L) X5 ?+ A" {
' D2 N2 U1 B) ? ?7 Q- O- M1 h
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
4 V! O- X' U3 c. h6 z% w: B( N* a. E" w
注意事项:
7 }$ p' R# p/ ]& |+ d# c3 i$ A6 y7 e) R. b% D
1、float的div一定要闭合。; s7 ?: e2 |5 w$ D6 H
~, L, Z) X% X+ s" z
例如:(其中floatA、floatB的属性已经设置为float:left;) 6 j. Y, O! Y9 V
<#div id="floatA" ></#div>
. b* [' U2 Z/ v, m$ v<#div id="floatB" ></#div>
3 R# {% o* M1 O4 ?4 S+ Y \( I, N<#div id="NOTfloatC" ></#div>
) R+ D5 P6 H5 }4 a. ?4 O: j 这里的NOTfloatC并不希望继续平移,而是希望往下排。 b- L$ f+ W. }2 Q7 P! r
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。. S' ~( w, _3 v- h# i1 ?1 T! d/ O
在 <#div class="floatB"></#div>8 u, V! K, S4 V$ ?. E3 k8 t* I! ]
<#div class="NOTfloatC"></#div>; j0 V) {1 ^# B& T5 u+ l3 [! W- m3 @
之间加上 <#div class="clear"></#div>2 \) N6 n5 c; M3 s
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
$ u) j; o) F" A1 r! s 并且将clear这种样式定义为为如下即可: .clear{% M0 U8 p# z* K7 [- @( J
clear:both;}$ {5 X. F0 h3 @% d# I. w! I
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
: p5 z, ?1 Y' W9 V* W# J 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。' X$ y) J; K6 p f. [# H
例如某一个wrapper如下定义: .colwrapper{
* `& u& u7 T) e# poverflow:hidden;! b4 h% t+ i' \$ n
zoom:1;
$ R/ B- s, S; |' d6 H* I' ^2 C wmargin:5px auto;}! Q* ]& k% Y. M6 E% Q
$ s' V( Z5 t5 I3 X) a! H; t/ ]: T+ W) c 2、margin加倍的问题。
8 u! ?. m: e, B; j8 a/ p$ \9 Q' x2 w: H
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
9 D D" l/ A* o0 T) ?6 z 解决方案是在这个div里面加上display:inline;2 Z1 C( m7 ^7 A) A) ?
例如:
7 Y$ U' |+ M( O9 J7 e( h& v<#div id="imfloat"></#div>2 M- a; u2 u# d y# v( C
% k9 _. S/ N: p) L$ r
# Y( a* X3 E3 w' t 相应的css为
5 B ~2 p, M0 ]0 ?#IamFloat{* U. u5 L9 O6 j4 S1 k; ~8 e
float:left;6 N- Q0 \1 S+ {2 x* x
margin:5px;/*IE下理解为10px*/( N( z3 W D* N1 i d
display:inline;/*IE下再理解为5px*/}2 b* M G/ W: J+ k3 J# @0 V4 C0 x- ^
6 G! o* r# d6 X 3、关于容器的包涵关系
4 C/ G; K* K% A( F0 b7 ^. R, ]) ]
- G+ [4 p, y# P 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。- k- }! {* l6 D4 q! p! i+ Q
( B O, X& z4 l! J& L% P 4、关于高度的问题4 a) G% k8 Q. \! A9 @7 y; e
! R9 g, f8 x' ?# p 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
/ O9 a' m. p4 ^( m
6 ^3 t+ {4 T/ S. e! L 5、最狠的手段 - !important;# n/ M$ r, e' T0 j q5 C
. B2 t# E' a8 g" _! ~9 ]
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{0 f( x0 N9 e$ ?' \( E
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
4 ~) J0 O5 N+ {% D' J3 E. Rbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}5 z7 f0 n! @" Q {
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|