|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
, G9 ^. a7 a& a& G% s: {' m/ }$ k& b0 o
常见的兼容问题:+ l+ y& A5 _1 Z# x8 J9 W: r
G! Q! i$ O- y% l: l( Q
1.DOCTYPE 影响 CSS 处理
3 p0 R# r2 p! x- U" Z; t8 S" Q6 X# g( |: \# _3 o5 n7 @6 \
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行7 ]) i; U0 M$ m7 A5 N- n: @
: y1 O+ d; D4 L# g4 g7 ^" H( H
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中7 g: \: I- Q! I
n8 m2 o) E4 y& y, ~ X+ Q 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
# [) m) C) e8 g$ U4 w
7 h7 b P+ u" N$ e4 l 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式5 i1 x/ f$ ]# C( t6 S# j* B
. g' ?) u/ _7 h4 _1 e* i& J" \+ L 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行7 K) S6 x; U# U& Y# P2 k
L5 Z+ R6 }/ C Q2 P3 p; y' O 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
, G2 j. ]' ?! ~5 u0 h( J; O
R6 n+ g+ X7 S! C 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。+ M0 L& d9 q3 u0 j4 Y$ G5 f: ?
/ h+ n4 V: D; o 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
! b; o w0 V5 {! k% Y/ I 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}6 `5 o2 ?$ N/ g
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;# h. _, ` N- l7 P' Q$ z! N
4 J; m9 q& o% P. Y: l 10.IE5 和IE6的BOX解释不一致 \6 Q' M4 m, |" l) `9 h# x
IE5下 div{width:300px;margin:0 10px 0 10px;}6 Q& f) V* [- S7 x
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
( E: Z' F# {% q. K- n" C: | 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
! c8 {' |( ]8 B
/ O) t( d; g1 Z* V 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
2 r, V! v, `- A9 l9 f1 h* j
* K" \$ D" C; }: H; o% ~% A4 N 注意事项:
! u. J y" B' F5 X }6 m( ?+ M+ N9 B- t/ ?+ t) }" U4 o
1、float的div一定要闭合。
; u" p' ^) G# O X+ s& j1 r5 y' \4 I$ G
例如:(其中floatA、floatB的属性已经设置为float:left;)
0 ^* i# x$ e" q0 k; L1 \<#div id="floatA" ></#div>
; a9 E! b1 Z$ a/ e<#div id="floatB" ></#div>
9 H% R+ t S5 E* k) r8 ^+ B<#div id="NOTfloatC" ></#div>
; u+ I$ Y7 ]6 Q 这里的NOTfloatC并不希望继续平移,而是希望往下排。
% \+ z! [! r& \7 y! A5 }; p 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
1 V6 ~) l& V2 @# y" E* X" ^ 在 <#div class="floatB"></#div>
3 S% ]* A8 A: T/ O% \* {<#div class="NOTfloatC"></#div>2 ?4 ^! ^( V) i% @( r. l* n5 k
之间加上 <#div class="clear"></#div>; V+ T& _! C9 {& @
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。+ P6 |% b7 m1 F
并且将clear这种样式定义为为如下即可: .clear{
, T) {0 b& ~8 T8 C) V7 _3 Sclear:both;}2 r! W$ x& p' W: S7 t2 g" K
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;3 P c4 G2 d) b; ~( u
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。$ j/ z3 O; L- |- L) n3 }
例如某一个wrapper如下定义: .colwrapper{
. Z# b, `& ~6 H8 P0 v: `overflow:hidden;
0 K; Y6 l* ]/ T) X" }; B6 Qzoom:1;+ N: y4 u$ R# `6 C
margin:5px auto;}
5 @, _5 Z, Y/ ~, M( ^/ e) l
- W7 P$ v1 w$ B, ? c6 |, C 2、margin加倍的问题。
% }6 x- b" G/ b- k7 h# f) p1 T+ c r: O7 F5 }# Z5 B
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。( u! j9 m5 i( L: s, v8 ?
解决方案是在这个div里面加上display:inline;. \3 V/ L ^# r, B8 b. t
例如:
0 Q$ a3 @/ R! ?5 |8 B# n' A<#div id="imfloat"></#div>* d5 B- d: Q3 t* r' V/ z
3 u- M' ~' }9 j; b' n/ X! k! e, i' f! E# c
相应的css为) ?4 `5 T) ^2 h1 Z7 V6 ]
#IamFloat{+ W) D4 X( r' H3 T1 J
float:left;
/ ^4 p# n0 Y& o2 Zmargin:5px;/*IE下理解为10px*/
2 V+ ~6 N Z4 \% f$ `( e# W& o& ?display:inline;/*IE下再理解为5px*/}- F% J7 K# v6 H; L
4 M1 h+ y3 [3 [$ \ @ 3、关于容器的包涵关系) F# `) `+ }; Y8 X; i! y5 @
& C! C3 Q% W8 P9 [/ D7 t
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
1 i7 n0 U" _0 y( B! x$ k- e* ^" B& n4 b* n) ]1 k
4、关于高度的问题( j# a9 w( W1 W2 s
* U& c- q& n$ N* _! R6 t& `, F 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
* U6 G E6 Z+ C3 g4 f" V& y0 J' z% B, _' R& s
5、最狠的手段 - !important;7 r5 r( ^$ N7 N2 B: f
- A8 I1 H9 L6 t7 ]% d
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
$ P& n; P* {+ p4 ?background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
5 K) f4 i7 g) d) g6 Ybackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}6 ? E7 D+ R: n6 ]
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|