|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14321
- 金币
- 2446
- 威望
- 1647
- 贡献
- 1394
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。# P. X' l; T$ g2 q
. e/ s7 o8 B7 Z' S M; q 常见的兼容问题:
g& n) Z1 Z0 J: ^! m- W( F: v I
7 @) Z& S1 X* u" ~% \ 1.DOCTYPE 影响 CSS 处理' A" p1 U' w& D& J
/ O0 X! E6 W4 l 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行' {& |. g3 \$ r, \& a# q
* H5 M: z* n q5 O 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中2 S3 ~% ^& Y/ Y8 f* G
( r& U& Y( q+ h/ i
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
' N0 ?: N) t$ W7 i2 x1 a, i' \1 H q4 I
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
9 e" h9 ]5 F: O) R: u# y+ [& |& M1 b% K0 w# Z2 _3 h
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行1 ~$ _/ f/ Z6 g; N6 @+ X& f
6 L6 w6 s7 A7 y) L. C
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
, B n5 q$ O" t/ J8 f1 Z% z+ b* T A7 i# Z+ J; }8 M C
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
. |1 @% b, y) W% z P0 x' e& {2 S' w3 J
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
4 V7 W; a' t r* b& H 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
1 s( [/ w$ G9 H 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
' [2 P8 p1 Q% N8 ], d# n& H) N. d; O, T2 ?: h
10.IE5 和IE6的BOX解释不一致
# O& M3 B( [" P3 P; F% J: _( } IE5下 div{width:300px;margin:0 10px 0 10px;} D; ~( g$ N7 v/ o
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}2 P1 k4 h/ R7 ?4 Q* { h, X
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持3 [* W+ L# {9 T: f; E! W& Q
4 z: W3 \1 X: y' N. R/ R h' ~
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题& j5 C5 Q# a) h( }
- Y( q$ h1 A4 ]0 r
注意事项:
, [$ h- x, P2 e& x/ W7 M2 ~
2 `+ m3 W4 r$ b! j- x' P6 e+ B 1、float的div一定要闭合。, {) T0 s9 _/ Z0 h
7 L; b% @4 s: _1 R7 E8 s, `9 d 例如:(其中floatA、floatB的属性已经设置为float:left;) 0 Q7 M: S6 g' |$ n# W8 K0 n
<#div id="floatA" ></#div>/ j- l" E1 q2 z+ d
<#div id="floatB" ></#div>4 O3 b! U4 s3 ^" m! q! t" ~
<#div id="NOTfloatC" ></#div>
# ]1 u" C! ?5 s 这里的NOTfloatC并不希望继续平移,而是希望往下排。
1 l5 K+ @, T, A1 q* M# o 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。3 L8 R: ]3 T4 ~/ J2 w+ ]/ n' {
在 <#div class="floatB"></#div>
) l3 Y8 O, l2 G" Q' V<#div class="NOTfloatC"></#div>
3 d$ ~: j: b7 g' C% | 之间加上 <#div class="clear"></#div>
! Q; Q2 D; b% R; T6 } 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。7 ?8 C- {& @: F7 I! w
并且将clear这种样式定义为为如下即可: .clear{
1 R. u7 ^ ~: q0 a7 `' Iclear:both;}
7 \" \/ |9 K' v* t3 e 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
1 P% L! Q3 g5 W/ `3 g0 F 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
! C7 ] P+ f2 D7 }1 \1 ]$ O 例如某一个wrapper如下定义: .colwrapper{
2 {/ \! \( I# b1 O. {1 woverflow:hidden;$ }' Z/ J0 k! Q( r; L' t6 m
zoom:1;
. ?' Q5 v+ ~3 _3 l( |- ]2 M5 Z7 Mmargin:5px auto;}
7 ]2 p# m- U+ r$ i6 j; q# O
3 Z- J' v0 @$ Q" n: B& S5 U 2、margin加倍的问题。) \0 v9 U: `- D9 ~" {
' ? v+ _! o, U3 _ 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。$ M" B% Y$ V. v' g" @
解决方案是在这个div里面加上display:inline;# x' q( M+ {9 Q4 P) \2 B( v
例如:
, T, _) P2 b1 L4 e+ ~<#div id="imfloat"></#div>: b& I! ~, \% k: C! f5 U/ g- o/ t3 c1 r
% S3 |. \* w. ]
+ g8 L: M7 G6 X# i5 x Q) I; u 相应的css为6 U1 f3 \: |) K# }. B( k5 L
#IamFloat{
H& u4 B/ x. @float:left;
/ q5 t+ \6 ]" t. s8 [margin:5px;/*IE下理解为10px*/% g" k U' e$ n7 c [
display:inline;/*IE下再理解为5px*/}
W9 [6 n1 w4 ~+ E1 T1 P
2 y/ D# k+ y, @/ J& F1 x; i) O/ f 3、关于容器的包涵关系
* S& c" O5 M. W3 U2 D% o/ h+ `6 D0 U( u6 L) q v
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
- @9 ~) i7 _& @6 c; f, T' M. H2 T2 |* Z. O3 g
4、关于高度的问题
7 G/ B- e( G& r/ \, S
/ }% K R; z) y0 d& |/ @" H9 J7 } 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)3 w! {6 d# I$ N$ M; B
1 ?( J( N: g( W& A5 x6 g 5、最狠的手段 - !important;
* C J2 v/ M/ s5 |5 _( I/ h' s, k
6 r M" X/ d' F0 S0 L! F# O 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
; e; c2 @/ @, U6 x! Y, i9 T% |background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/- q1 h9 ^- g# l6 E! g0 S, {* g' p1 B
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
) w! q9 `. J7 l) L3 y- @- A 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|