|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。& v$ b6 k, _8 v" n+ ^
" T! m4 n9 o* ^ 常见的兼容问题:6 g- {$ G. x3 b
. u# b3 _7 u+ j. l6 k* e) E5 _
1.DOCTYPE 影响 CSS 处理5 F6 C4 V: @" r& e: f
1 [9 p7 A2 Z ~, s7 K0 f 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行; B# u2 I* O1 n2 P
% }" d( b2 ^7 D* m9 D) q x
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
8 b; ]" o% o2 e- _7 L- o: I' n1 H: L1 A$ P* A9 a
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
) Y1 z) A& b6 f6 w
, N* g* n- t0 K7 P* {& G 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式! K2 F; @/ p6 I1 k
+ \& d6 F1 p+ Y& Z- c" o8 Z% t
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行& d1 {! L( P/ Q1 N/ w8 U7 N
7 ]9 L. z" ?' G% Y 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
& v& U( T6 |+ V0 n: M" {8 r, P4 H F% ?/ w3 {
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
6 b9 D8 s) } Z A7 x5 A# [/ R7 @; p
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
3 `: u9 N, w5 c. X* a$ W 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
9 g1 U: v& y& p+ \- S! I( f h 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
9 l9 `% ^6 Z5 O; R4 x8 s/ }0 L j4 D. b: p! D
10.IE5 和IE6的BOX解释不一致
/ s& e2 J- Z4 m8 F* C; z! m IE5下 div{width:300px;margin:0 10px 0 10px;}
2 q2 @$ h( y2 ^7 U; K div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}4 p+ s) v! _! C* _) V( {( w
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
+ g2 t" |2 G9 M$ O; R
1 m; j7 m# V+ B5 u% v4 ^( z+ f/ p' S 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
; i8 v% c8 s& p9 u, R/ }% c D9 W! }+ Y
注意事项:( R/ G2 { K6 b7 ]9 l
( [! K) A8 M, t% L, P. ?( N* A
1、float的div一定要闭合。7 x$ D$ M3 G( i) u' H, H
! C- \+ A, m. V2 f 例如:(其中floatA、floatB的属性已经设置为float:left;) ' B- G7 g' a! {/ Q: c/ W
<#div id="floatA" ></#div>
$ A E. Z! h7 F" k<#div id="floatB" ></#div>9 @6 J; s' l3 B3 ?2 l
<#div id="NOTfloatC" ></#div>, `4 k0 ~0 \: y. K. W( ^# X
这里的NOTfloatC并不希望继续平移,而是希望往下排。
% C% L" M5 _$ o2 @2 S$ P7 f2 @+ {! { 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。( v' }6 @% Z; x" ~9 H6 N
在 <#div class="floatB"></#div>
* G& d ?: K I8 q/ I6 `<#div class="NOTfloatC"></#div>
1 j1 I7 N% U' n4 A9 C* K 之间加上 <#div class="clear"></#div>* E7 o& T2 w# R/ _& R) w
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
, x* w& c6 B; h! j0 p6 n7 E. Z 并且将clear这种样式定义为为如下即可: .clear{' B8 M3 C0 L3 y+ K9 g5 r
clear:both;}
+ X9 | Y$ _: z$ o+ H 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
- h" w; l! A5 Y# [ 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
8 X0 N+ Q: N% x" J- h 例如某一个wrapper如下定义: .colwrapper{
, _- w( S% } b) l$ goverflow:hidden;
j* _% B. U y( ?$ C. L; Rzoom:1;
" T3 m$ A. ?; v+ X' ? Smargin:5px auto;}+ h% d/ h2 Z2 t3 ~7 p3 W
- t/ ]4 H+ D+ s. D- C3 E. x
2、margin加倍的问题。
$ V2 w M$ z$ O1 g ?# x* @" _# ^- w5 r; W2 o
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。/ l: t5 M& g) t# \) O, i0 E& ^* J& @
解决方案是在这个div里面加上display:inline;
+ ]8 Y- k4 f1 b1 B& x; p6 Z例如:
# @3 h4 [. p. f1 e3 j5 e7 _& b; {<#div id="imfloat"></#div>/ x/ E+ \% }4 ]
, K' Q3 e* L" y/ w- S6 t
' P g- ^7 V/ i; [# u 相应的css为
$ m5 d$ ^: A& O) ~1 M#IamFloat{
0 o8 V8 N5 R" C m3 V4 g8 W, V$ lfloat:left;
* \, v* p. t# ~+ |- E& imargin:5px;/*IE下理解为10px*/
% @- o, O7 S# A1 }9 h# O$ Bdisplay:inline;/*IE下再理解为5px*/}
" u4 @- {8 @1 N- ]
5 G9 c3 p! K6 T% N# t$ F" B 3、关于容器的包涵关系
! T2 ?5 ?' e2 @7 T; V. V# P1 [ l% Z9 C. ^8 e# m
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
5 z( C' q" M0 }3 z3 y! h6 f: @2 W3 b/ ]3 A
4、关于高度的问题
5 j# N, ^! r* Q& d/ a. {1 e9 w9 d' x" B6 d$ P. e
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)& K6 I) y- G- A& z b$ O6 f. _
4 k; o) s l0 d 5、最狠的手段 - !important;
+ \! e, X" T* \2 |. m" H
0 e/ N" \2 l3 Q7 n 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
- E8 O3 Q! g1 D0 i/ Rbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/0 T. Z, z# F d' [- V; S- Y5 k
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}" R6 Y( a- Q6 Z' A2 A
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|