|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
- u5 j, K" M. A; p" o7 C. c0 H0 e5 S) f
常见的兼容问题:0 P$ p/ {* _: ]. V' ~# M
! v j- X7 M7 Q 1.DOCTYPE 影响 CSS 处理 b/ f4 C6 x/ I g0 W# V# P* |
k( @: q% f9 Q/ b3 S* V
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
0 V2 \: @! ~& p9 s/ [0 _
# n/ R: [9 }; H7 ]" _( r: m 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中# Q3 L$ f* }0 _! F
6 a) s1 ~* v/ F) {0 H
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width$ J* t& V$ ^* H- H \1 @% n0 V
2 n, G- m+ H# r% l5 z4 ~ 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
9 H6 Z: U9 x: g0 ^8 j& [6 l5 T7 G: j( t
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
) ^$ l8 f8 o8 o& A* T, b8 `
- k$ x. h# i9 b2 ^ 7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以# G% Y# G5 }* Q7 Q& M. X2 A: ^3 O
/ @; f' _2 @, l# V. c- S% D) p 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
( }; Y& M5 B, T+ X' R. \) L2 k' p+ v! Y+ U' N" i! t
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
3 D; d# z: j8 m. O/ p 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
9 k6 l8 u8 T- i1 t6 Y( @: S+ Y 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
0 T$ N; N! D0 i! }
: h: g( R0 i7 |4 G8 L/ a1 I 10.IE5 和IE6的BOX解释不一致
3 Q: x, \( }7 c/ F5 u" k( Y IE5下 div{width:300px;margin:0 10px 0 10px;}2 t3 [& F: Q/ m2 \% D5 L# g% v
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
# t2 }8 x0 |2 N: M2 \5 M 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持9 f% J: a( w4 `5 ~2 c
% l r u+ B1 V* g4 I9 }
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
. o# Y! t8 A9 [/ z/ n( |
' x* ?: l7 a: \. t9 T+ z( N. l 注意事项:, w" J0 k* y w5 M8 K3 I, {
$ T4 v( s$ R. J' e# t0 t' {% h$ t 1、float的div一定要闭合。. B5 n5 s$ E o+ c9 U9 C" U6 [; H) D
5 J6 R8 O6 R$ M Y7 }8 b% i 例如:(其中floatA、floatB的属性已经设置为float:left;) + G( c! G1 W0 y9 J
<#div id="floatA" ></#div>5 P/ V2 G: ~. f5 [: S, C
<#div id="floatB" ></#div>" I; m4 i7 m4 k
<#div id="NOTfloatC" ></#div>
% g1 P1 ^1 h5 _, ?* {3 N 这里的NOTfloatC并不希望继续平移,而是希望往下排。
! O- D) P" A& B' E: k$ N 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
4 G9 f |& v+ B8 d: F! k( X5 a 在 <#div class="floatB"></#div>5 k `! b& X1 @ A% [# X0 X- t4 y
<#div class="NOTfloatC"></#div>
0 T7 t6 f8 X: b7 Q! c 之间加上 <#div class="clear"></#div>
! N0 t0 u: Z3 q. H, T) v 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。% C- i# Q& t4 y6 h: R
并且将clear这种样式定义为为如下即可: .clear{" W4 G3 E; s+ L3 z ]( z! I
clear:both;}
8 ^4 ^2 m% V9 I5 @9 R 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
9 f& u. l! B* q 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
' a1 k+ a( _6 Z$ M$ p 例如某一个wrapper如下定义: .colwrapper{
' h2 c) W5 e/ t/ H" A/ @5 soverflow:hidden;
- a) p/ j4 i" W* U8 u$ Izoom:1;6 i6 I e& @5 [8 v* n9 c8 ~
margin:5px auto;}
2 Y8 p9 E6 l& m- w8 a4 b+ e) [5 [: D' ~, E+ L$ `
2、margin加倍的问题。
" l2 ~9 t8 L; E: p4 S5 y' M5 E* m ]" {, K
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
" q1 I O/ R- @1 |2 ^ 解决方案是在这个div里面加上display:inline;
! h- `( c" c* ~: P6 C( m* i) U, r例如:
' P2 H" n9 h' |, @, y% j<#div id="imfloat"></#div>
* z4 b H' ]7 q$ R8 n' F( b& q8 F! S( ]; ?, }( s0 s) B* @
9 x; @! r/ h; C9 w( _# h
相应的css为
1 w4 W @4 Q1 [" e/ ]9 @#IamFloat{4 ~9 B5 _8 x( B! l+ X* H
float:left;- B+ U+ o8 `" w$ H; z
margin:5px;/*IE下理解为10px*/
6 _/ J, J; H, ^( `* b( ]3 Edisplay:inline;/*IE下再理解为5px*/}3 ^9 y3 p: o w" q$ h; H' w2 g/ A
! |4 E2 h! A$ t5 D+ _4 j: o 3、关于容器的包涵关系6 N. r; s* p' H9 Q* s7 D+ d1 V
5 k2 b0 h6 B8 N7 r 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。7 i' ~/ s0 V7 f3 \8 a
0 N; {5 `8 e# ^0 \" @& F 4、关于高度的问题3 ~% m2 T; ^7 W7 h: d
d( v( Q2 J) f4 @0 e) l 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
8 m) z$ L& a$ i9 z/ h7 `/ S2 O
5、最狠的手段 - !important;
) _$ n) S) R E+ Q9 b3 C v" P1 O n% p( y. g0 u5 ]
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{) x( l; K, n n# i) \, _" s
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
' o7 y2 B4 `8 G5 {2 jbackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
6 z9 o( U4 p0 J" s* T3 P8 B 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|