  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。+ r z, p' b$ F0 O) e
6 R1 F: |- e2 }
常见的兼容问题:
, D$ V* ~) w" z$ z* k7 _# |
" S; u! |9 p5 [ 1.DOCTYPE 影响 CSS 处理
s( P4 O% ^& W) \ F
- q6 {, S: g4 j7 U7 T+ s 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行& R( q, @, A4 ~9 y
x! `/ c8 E U/ [2 C+ x
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
* L0 t |- V5 t0 m8 {+ B+ ^, X3 u) n: k
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width' T" [6 H2 L: r
% v2 f$ M1 \% F$ P" L1 V) Y
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式. Y9 l* V* b8 a) a, ]0 x
5 }; T5 }1 w' Q3 [7 j! o
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行* M) p/ k: u( @: z8 A* D. @7 ]" t
2 D( L1 f! Y! n3 `. w. F; G0 i 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以4 n6 u" K5 E- P3 E4 D9 l" B
. r# F4 H. ~+ B! L8 ^6 N
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
: Y6 j9 e; a& [, v% ^* k- ]0 N
( o$ H! L& {8 {7 a2 F; p! q( P 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}5 y1 D$ W0 Z& k/ W+ O7 j$ S5 |* @
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}! `4 F. L& T" z" m
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
7 h+ G, W. o( E& y7 f$ U
! s/ f Z! H/ {8 y" j @" U 10.IE5 和IE6的BOX解释不一致
& B3 ^$ X" `, G$ V1 Q2 b+ ^ IE5下 div{width:300px;margin:0 10px 0 10px;}% K; Z5 s; |% L k# m* C/ `
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px} G/ P" k( X) _# `
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
) V4 g( |( @" Q
6 R) J% D5 f8 S, ? 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题: V1 T5 ~1 B& p0 j$ Z! c3 Y
$ l* F1 Z; Q! U7 p
注意事项:
: l! Z# K/ u- G% K+ _7 g9 |
! b$ L: |9 Z; U# v8 o4 T 1、float的div一定要闭合。
" m/ h$ ^, p3 d/ Q9 F* g1 D( L/ R2 n+ X5 R; W& M2 ~
例如:(其中floatA、floatB的属性已经设置为float:left;) u7 |: ^- J! R+ G+ \ Y# P8 {
<#div id="floatA" ></#div>4 y8 s( G4 A( Q1 m7 @5 |* ~- B
<#div id="floatB" ></#div>* f- x0 n6 [# _, k. H4 _9 t
<#div id="NOTfloatC" ></#div>
' G# j- \$ \+ c. g 这里的NOTfloatC并不希望继续平移,而是希望往下排。" o7 V; S$ U0 c# W! S; y! r4 z/ o
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。5 H) r3 F" l* F! M+ h
在 <#div class="floatB"></#div>' _# ^0 R- A" }( N
<#div class="NOTfloatC"></#div>7 V# a2 z2 x5 S
之间加上 <#div class="clear"></#div>
' w# h1 _9 f; K/ i7 | 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
- A! L4 F8 J G. @ 并且将clear这种样式定义为为如下即可: .clear{, D4 R! M, ~5 T! B, B( l! t
clear:both;}6 |6 ?( c" }; |' L. o) T
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;9 X. L$ ~2 p. r X( G0 i
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
; L( o2 p7 s* v- n$ M5 b 例如某一个wrapper如下定义: .colwrapper{
- W4 @% O& E# F' y6 _overflow:hidden;& z2 l" e# U _' R- w/ {
zoom:1;
( @* R9 }/ m3 _/ ^% k5 Pmargin:5px auto;}
# M J3 Q. H P- G/ g8 a% c8 s* ^$ F' x# [
2、margin加倍的问题。2 m% g6 N, E6 h7 M8 x
. H, n* f5 P) l/ }1 @. B# Q
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。5 K: M ?$ y8 r0 I
解决方案是在这个div里面加上display:inline;
* y# U9 |! d0 T# b* U" x& I例如:
0 t+ P" M% J0 U2 n<#div id="imfloat"></#div>$ n. c0 g! M* ^# Z. M$ Q
1 S' h5 z1 r2 Z& A( q3 z) t- O* Z& R! p3 ?, p D# m' ~3 N
相应的css为
7 e' D/ A$ U! {#IamFloat{; M: e* }. L4 T- i% E) d
float:left;# N1 v4 M6 W$ g2 |* \/ a# Q' N
margin:5px;/*IE下理解为10px*/
' v) _3 f% H, T6 Q$ ddisplay:inline;/*IE下再理解为5px*/}
- G% z7 o/ r: t4 B8 c4 g5 e0 K( w; L1 h% [4 K8 ^" G. O; d! N, p k
3、关于容器的包涵关系5 y/ i8 D$ l. n' u6 B# E2 v
9 A9 i. M' a. n4 O/ v- V1 y
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
; f1 B+ N$ L; N( y% j: j4 f4 C& s
H5 N1 ^* i. L8 t2 @* L 4、关于高度的问题
; U$ |# @4 l* B) n1 \0 U6 k% |7 c& M" l% z7 w5 T$ j% A% _" \
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事); \; z# j; B1 A: w$ C. J/ G
, c! F0 a' w& X- l% ^& a
5、最狠的手段 - !important;
3 o4 R) g+ D1 {! X
) ?; M1 p5 I2 {2 |9 B- T/ U 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{( A$ F( o9 q; [% z6 a3 x
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
5 G. t/ n, S0 R2 A* j: x V4 Sbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
4 l, A0 @: Y: d5 @ 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|