  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14247
- 金币
- 2414
- 威望
- 1647
- 贡献
- 1362
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。) g) ~: J. [7 u. g4 u n
) d! ^6 s* `0 o
常见的兼容问题:- [8 @+ a7 @% T& K) i+ U
5 j5 j7 T \! c 1.DOCTYPE 影响 CSS 处理9 G! P& u k! i) f
+ d/ L- Z$ v# w 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行& }8 y4 Y* K4 d+ v2 A/ H
4 X. Q; V# B, A9 h( w 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
6 c* F1 X& a o+ A; K8 O0 t: U; d0 q
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
% \* c# B m- V/ R# q
; S' J, `$ X2 w! m8 I# r4 g: G 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式- X- L$ F& a7 S1 \
- j% Q9 i; Y8 j, M 6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行% C J; H2 h( H' e; f4 p4 `# A& s
) C; v3 `/ t4 R
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
" E4 s; A0 T2 B+ W1 Z0 p5 X- S' j5 Y2 t7 n6 q
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。# b: Q. V5 L n3 ~- ~& V6 V/ [- \
( B+ I r( Y& o( a 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}1 g! N3 y! B/ L3 e5 P# x( `
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}# p: N' t' n, }
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
: A4 N9 C9 T0 f1 O) p" X3 Z9 t' A& w2 v) f
10.IE5 和IE6的BOX解释不一致
9 R3 b$ K* l. y( o1 q0 ^ IE5下 div{width:300px;margin:0 10px 0 10px;}
[1 O' b% S9 J5 V. e& l, H( k: a6 i div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}8 Z7 [& _8 F3 g5 F6 h" s: S( e
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持! K/ Q8 C5 P- A# Z6 P& s; q9 p
6 G3 J, g5 K. M- o p/ Q5 a" l
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
/ Z$ C" i+ b9 H- {: O
5 o# A# E5 L5 U 注意事项:
; J8 a& k" v2 f) }; }! k6 b Y' ~6 m' w
1、float的div一定要闭合。
' q% t0 r; g, P8 |5 Y
% s- T! w( ^. m) { | 例如:(其中floatA、floatB的属性已经设置为float:left;)
( V9 v6 u. T( ]<#div id="floatA" ></#div>+ k# p& i9 I1 F2 b
<#div id="floatB" ></#div>9 F6 s4 Q/ m6 P6 Q X
<#div id="NOTfloatC" ></#div>
5 Q/ }2 g/ w h! K H/ {) i 这里的NOTfloatC并不希望继续平移,而是希望往下排。6 `5 a+ o1 @% s8 h" w1 O) q) q
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
; t: D [7 u, Q$ s0 o! q( m C 在 <#div class="floatB"></#div>
+ e9 n9 d. G+ f+ c( M7 J# a<#div class="NOTfloatC"></#div>1 `# Z6 ]: m5 @
之间加上 <#div class="clear"></#div>
0 L% x2 h; H5 D6 n1 F8 C 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
' ~; q0 o1 _ a. Z1 a 并且将clear这种样式定义为为如下即可: .clear{, \* [( A; ~2 x. |
clear:both;}& l/ `8 e5 t+ O; l6 ?
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;, c; c9 v* ^/ U: {0 E8 M1 }
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
: b% p2 {( i X m/ {1 z 例如某一个wrapper如下定义: .colwrapper{; M }9 q; f6 _& f5 ?
overflow:hidden;
4 r+ v# D7 b' j* K' c! Xzoom:1;& L1 k* f. w1 Z; k: S5 P5 F F' b
margin:5px auto;}
) e9 E, S: a- M, A4 S2 y( R6 A$ t
2 ]- K( M8 t0 V* K: u/ m/ \( P0 x: ~ 2、margin加倍的问题。# B# ^9 v% g& L- s2 \' p1 i
9 s( w! S5 M, m9 n, w2 K. y
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
: ?0 V. p- d5 ^' u( L 解决方案是在这个div里面加上display:inline;
& s0 a$ e9 n" d7 _+ X, o: q* H/ v例如:3 o* F6 L" {9 d* J! a
<#div id="imfloat"></#div>/ |: s, Y$ Y `! e. V K" u
/ ~6 {: F% R6 i# k' v- M
M+ i* K4 d0 C+ X7 ^6 @ 相应的css为
4 B, |/ D( }, q% x( d- {#IamFloat{/ E/ p' M# y3 w4 w, ~' |9 Y
float:left;" y3 a N0 p7 n1 L& X5 u! f
margin:5px;/*IE下理解为10px*/6 F* [& t4 T" S; W! a$ |
display:inline;/*IE下再理解为5px*/}7 x) ]" z% x0 S( f
& p) k# ^6 j. U" h* Q
3、关于容器的包涵关系$ U) L1 G/ d. H3 s5 C7 b
% c1 Y4 A3 H# m 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。6 o+ y+ c5 x% b1 V0 y
q3 |0 D5 p# L 4、关于高度的问题0 Y, P2 q6 h1 C2 x* _) ^* e
7 P8 G3 \& v& q# G0 [
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)# t& X$ p7 ?8 Y" c$ f3 I
) V7 C U; ~- {9 E
5、最狠的手段 - !important;
2 {, e3 E% ^/ \1 A: a" S O
. x c. u. e+ S4 L$ m# x; P7 m 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{) |$ i( `7 s1 U6 J
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
, C5 i% T* x8 C- r+ V' `* Tbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
1 a N1 g) `- N8 @! I& M$ X9 a 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|