  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14221
- 金币
- 2401
- 威望
- 1647
- 贡献
- 1349
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
) e6 h4 b( d6 L" ]. D
1 x+ N( S, R& q+ g 常见的兼容问题:1 h$ U, s+ x5 z
1 f- L5 l3 r6 W' j" y# C 1.DOCTYPE 影响 CSS 处理 U5 B* T' L8 V! ^, p3 E
- M% C' u; }* ^6 m9 |
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
f4 l- ]8 D2 X9 S; S' ?" g' R" l9 b2 \; N- |
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
4 y/ s& S7 y" l2 ]$ E
5 K X6 q3 j$ [0 m* M5 [ 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width$ W. E R2 `- S9 r; @2 g
* {4 a! T6 L1 g1 r# i 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式4 j/ d/ N) D) n* [1 S) I
1 T2 H& n2 _" o 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行 Y7 r/ O6 u% q" ]9 _7 Y
b6 P+ s" M2 x/ E; c 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以9 w6 n7 L1 d) j
7 O1 j, c9 u) S 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
) ]$ S0 A9 u$ V; I3 U* }
C# r: G9 f4 |4 Y% } 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
2 o( [6 ^9 B% n9 z 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}# V4 B9 q7 K* o" f
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; W/ W1 M. R% @* _
* M, x+ L6 Q/ _2 Q5 U1 P+ L3 o 10.IE5 和IE6的BOX解释不一致- `2 m0 ]- Q1 o( X# X. F
IE5下 div{width:300px;margin:0 10px 0 10px;}( U6 \1 N( v3 {
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}9 e5 d& Y# X" G- N( I' m, k
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
3 {" O: p* N* ?6 W O
, W- j2 d% x- P! ?8 A) k! N, s( I 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题$ l+ A: P- D: N
% C5 h3 H4 D" L1 |8 p
注意事项:- w m2 I. r& `# L' h
2 M8 G* J' ~9 o# z& q* T" g 1、float的div一定要闭合。
# K5 H% P \% I0 N5 E
+ W) n/ Q0 W3 D; `8 o 例如:(其中floatA、floatB的属性已经设置为float:left;)
. B. E) M9 n M) o0 O5 D& C. t9 `3 @<#div id="floatA" ></#div>
" s, t' i% v. q: l' {/ M<#div id="floatB" ></#div>
% l7 w! \, _) `- _<#div id="NOTfloatC" ></#div>9 y/ ~# j8 I3 X( {: e' h
这里的NOTfloatC并不希望继续平移,而是希望往下排。; l# H) m: L8 Z: V7 e3 T5 E
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
$ L* ]- N& j/ c1 K$ p 在 <#div class="floatB"></#div>* S: F$ l6 W1 G6 ~4 N- @9 {
<#div class="NOTfloatC"></#div>+ N* ]" ~ [ n L6 {2 @
之间加上 <#div class="clear"></#div>9 k. Y) L5 ~7 R6 P7 \& ~9 s( V6 o
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
) i1 l& y. r% ^8 Y7 D 并且将clear这种样式定义为为如下即可: .clear{1 G0 i3 A* {( Y2 r5 K$ t- h6 s" k
clear:both;}1 ?) ?& P( I( l0 ~% H/ z; a2 V. Y
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
. O7 c4 d; g" A! } 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。4 ^- t2 U# J& c- b" o& ~
例如某一个wrapper如下定义: .colwrapper{
W! S& I0 d/ Y2 ^# aoverflow:hidden;7 l5 Z: A3 l8 n6 D: B0 V8 L
zoom:1;
" ]! F( H1 L9 n# G& A6 [& vmargin:5px auto;}
5 t+ j+ G! [) R/ M# _+ P8 C1 j
|) I; M. J L5 R4 d& w; d1 { 2、margin加倍的问题。5 P5 G0 F5 o P6 ^& O: `' n
' @2 j! Z7 y3 b1 L- X n 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
+ _4 ~. I/ h' u7 `, x/ w3 | 解决方案是在这个div里面加上display:inline;
- i: F$ M+ s( d4 t8 Z0 m/ j* T例如:9 c& U! }/ L8 e
<#div id="imfloat"></#div>
+ h7 X- W5 B% C, g/ Z- b( l# u; @. X( v4 P6 z- y& J/ w
: V( q& C+ j K- y k- {+ F0 c 相应的css为! f9 Q8 e: E3 `; L
#IamFloat{& ~; M7 q, z# i, h0 _
float:left;- O/ @4 h; i$ k5 \ c* N0 d
margin:5px;/*IE下理解为10px*/ M+ M0 @2 m! S8 z) p
display:inline;/*IE下再理解为5px*/}
' h/ f2 Q7 F0 C0 F, S% T5 f% E+ I4 `% N% J7 v
3、关于容器的包涵关系
1 E% H u" L$ W. e: ]7 O4 R
" u2 q8 b: F( N$ U5 G4 Z: s 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。* i5 Q. i6 N& Z L5 g
* Q9 L6 u' T F8 { 4、关于高度的问题( T) p' ]5 m7 Z- N$ j; ^$ O
9 v) L) C# ~6 M! J
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
0 _$ F* L& p, T4 \+ { @. P! r" g, K9 F( u; B) g" C. f; B- G, Q
5、最狠的手段 - !important;+ q7 E* z# j& P$ @
" a+ x. \ a1 J. Z u: m 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
/ U4 U% [* f5 ~9 Zbackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/% _* {7 ~3 X4 m r
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
5 P* K# u' J: q, k9 Z J; ] 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|