  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14171
- 金币
- 2376
- 威望
- 1647
- 贡献
- 1324
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
' ?; a2 W L! Z& O, g: F5 y* {! e5 \( |$ `; e7 |0 e
常见的兼容问题:
$ Q8 ^* j5 \, ~, K" H \( V
( ?) {) B% S7 b* B 1.DOCTYPE 影响 CSS 处理5 L1 Z G7 D8 y; S5 \
3 J3 [' {2 R- E i3 [& N" M
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
4 p: [; h0 { |' j" Q1 T' x+ v: S+ {4 s
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
0 V) H; C- w9 u4 h: v6 @, K( C. U& K2 r! X. o; k5 K, Y
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width8 l5 C5 w; D1 @
+ {. Q5 ?& ]. v, U4 t 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式: ^& g0 t* h- C# O- d
: v" Q3 {! J0 E/ B5 o" ] _+ a
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
% g; |4 J0 n2 {6 b
: m6 t' B4 H1 s9 B 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
" P$ A8 D9 h7 ]* R: w
/ v: Y0 s' t# B% S2 W% Z 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。5 H5 q, }) ^6 q" S4 I
1 |3 C: [' g" p
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}5 k" b- S& G! G! J) [$ m: v
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
; F! j2 H& |' V6 L% @7 i 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;# m0 a/ p3 E* d1 Q; [6 Y
) {( p1 w- x- K8 o; b+ E* ^( x" } 10.IE5 和IE6的BOX解释不一致2 _7 D$ r7 z3 u: }2 a0 B% ^. _
IE5下 div{width:300px;margin:0 10px 0 10px;}
" l! v4 V# T+ R$ J& C" Y3 N div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
/ t7 E* [7 ~: W9 s. [; L# L( s0 t 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
3 z/ `) z4 e) H! p- J8 e( T# ?% P+ H7 g! M, J8 G* n+ O
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
?7 E4 i# b6 ?9 M* a1 T: H8 L6 u) x
. y* `7 {' d& Q" Z 注意事项:
* ?1 F+ {/ ?% D! R! R8 S
: q2 }' N; _% j @. l1 ` 1、float的div一定要闭合。/ I- K# d3 ]* F; Y- S
1 {0 C4 w$ G, C. x 例如:(其中floatA、floatB的属性已经设置为float:left;)
0 Z; I2 g$ w: B5 L& h# j<#div id="floatA" ></#div>5 C1 X2 a( [- B: R# s
<#div id="floatB" ></#div>$ ]9 _: h/ y1 `' L: k8 ]
<#div id="NOTfloatC" ></#div>
0 n& M7 x4 [) W$ [/ ~+ y; A) n 这里的NOTfloatC并不希望继续平移,而是希望往下排。0 j1 {% B4 B# i9 F# z
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。9 V$ ~9 E [1 ^, g: L
在 <#div class="floatB"></#div>% ?5 F! j7 Z' Y0 {" y9 }
<#div class="NOTfloatC"></#div>0 i- D/ z' Z" H4 F3 E, f. H" j* j
之间加上 <#div class="clear"></#div>
5 E" T1 q: K. y# O0 E7 s. N 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。# D) a6 b3 y7 S- A8 E
并且将clear这种样式定义为为如下即可: .clear{
4 e( Q6 }4 Z& `2 tclear:both;} s) c9 \: Q5 u% s1 M% I6 C/ _% J
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
( c* O. W7 _$ H( s" e 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
' i& H3 [4 `# E, V6 E 例如某一个wrapper如下定义: .colwrapper{- M$ U* U( V+ {% M( F4 D: M" N, v
overflow:hidden;( p: X; W3 F4 u/ q: N& G# h
zoom:1;
) P6 t, A" W% m# \2 e/ `8 ]margin:5px auto;}
# Z0 N- s6 {2 I4 h# Y2 I; _( D3 j" L' f0 S
2、margin加倍的问题。# l9 }4 I9 ?4 `0 \$ X, g1 T# }
. z5 u( F1 n4 i- `, j 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
) U+ `7 ?+ p. Z* l. ? 解决方案是在这个div里面加上display:inline;
v8 f8 o7 N( z+ ~例如:4 T/ _) I# K. S" _0 Y- a8 b9 F
<#div id="imfloat"></#div>' S1 \9 ^2 E4 r, A6 h, I, i- w8 y* z
/ y. ?: z8 q$ t# F, K
9 x$ t8 a4 D: `8 C
相应的css为
; v3 c* X* S! }* l7 y0 a- \: |#IamFloat{0 p* {7 D. ^. s* G( j# x5 V
float:left;
7 U, A$ K& `, a* F f2 e4 k. smargin:5px;/*IE下理解为10px*/1 U8 D- q7 G: }9 X2 c# Q& {$ [
display:inline;/*IE下再理解为5px*/}" l% a( @' d3 V" h/ y
/ n2 F& x* V* ^3 V 3、关于容器的包涵关系
; t0 w+ R3 C* b( s! V" P2 M3 F8 ]$ ?# q
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
) E8 Y+ H0 i4 t: G! Q& U! ?- Z0 z- N. I L/ b5 c4 W
4、关于高度的问题8 D2 E" ?: L! ~. g
1 E( K' `& Q6 J; y4 R4 |
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
7 ]1 \7 m# k2 }, B- [) E7 a* H0 M
, [! }0 @$ D9 D; A 5、最狠的手段 - !important;) M' `7 u4 n" `7 n" [' ?
4 P- S/ J- \3 D& y* m8 S' v 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
* a% ?/ f6 ?9 J9 [background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
8 P9 f/ N/ q' o! U& vbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
" q$ l8 \4 _( \& i9 `8 e w$ h 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|