|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14321
- 金币
- 2446
- 威望
- 1647
- 贡献
- 1394
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
9 f: j( B3 g$ R( I: H, l9 t# I8 K! J( c) o
常见的兼容问题:
1 @8 q8 {6 q0 ~! J* L8 z
8 }0 {" x# B' N% _ 1.DOCTYPE 影响 CSS 处理
$ l& a% T, _) J
3 l* B$ f6 d0 n. N, S% P 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
) X% v8 x( Z! ~! m. R6 J
5 p. h) F& F' X4 r$ H 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
s/ x& ~7 V5 \3 ~" o9 X$ f) {7 @3 k3 q- E& L4 m/ o
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width( w9 v, A( @9 r: ], W3 Z6 n0 A
2 U) m8 C* W$ A3 z' a/ Q
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式, H9 T6 f3 E( `0 I& k; d
8 ]) e6 \. [7 P& G
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行2 I+ s w5 w3 k. B* h. |) c; b
% Y/ J5 e. n, v4 d D6 n
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
+ t( o1 b4 b4 ~& v; B& {
% g; R& A5 @! R8 A6 X 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。, [, X i6 r2 A: c7 |; H' H
% W1 A7 Z, {& z5 \; l) | w
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
\; x4 N) `5 p/ U# ^, h) x 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
_ ?. h1 v8 n2 W+ J; [ 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
. m& b, M; @9 P! S! I" V) L2 p- u7 ?
10.IE5 和IE6的BOX解释不一致
) z! m; I9 U3 ?+ k- S$ h8 p IE5下 div{width:300px;margin:0 10px 0 10px;}7 Z/ J/ a8 _' X u
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}7 E5 u1 B* Q4 _3 b+ e
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
; J5 O# |& w$ E8 F% ]/ o- H) u4 S
( e( D9 c/ T' S, c6 @8 |" M 11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题- ?6 E# y( ^$ {8 N! S) e
5 i, K$ L1 B5 h/ U. |3 h+ p N 注意事项:
" B. W) @9 {6 k4 C2 C
8 q- @% b3 J% D 1、float的div一定要闭合。 x) K' ?, P; ]1 x n4 t8 \' r
$ e2 B. i6 ]% _9 ]+ k* h6 t# f
例如:(其中floatA、floatB的属性已经设置为float:left;)
6 w5 e! N7 r7 U: ?2 L, k0 x. Y4 p5 c<#div id="floatA" ></#div>+ F' K2 I! O L% U+ I% p' C ~
<#div id="floatB" ></#div>0 v- g* ?; _+ E8 W2 X
<#div id="NOTfloatC" ></#div>
2 F: _" [7 I7 E) }. M; T 这里的NOTfloatC并不希望继续平移,而是希望往下排。( J: S' o% ], O5 u0 J2 W
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
/ f2 s1 ^6 e4 Z 在 <#div class="floatB"></#div>
- Y* s6 N6 g5 y+ j, v<#div class="NOTfloatC"></#div>" \& c9 {+ j* j
之间加上 <#div class="clear"></#div>$ l( y Z4 B t2 F% ]% W* i2 O0 S
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。5 [7 ?2 U8 M! D" m, T
并且将clear这种样式定义为为如下即可: .clear{
: m" v8 v$ C: {; g. L( [clear:both;}
6 F, e( q0 y( [; d6 u( d$ E: v 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;: F) \& ~2 B0 k7 P- D& N( O
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。 }$ w" _3 T5 Y" m8 U$ t" C
例如某一个wrapper如下定义: .colwrapper{
8 H1 K$ @( \; S, j$ d7 {overflow:hidden;' S. } n$ R u6 i9 E4 Q6 ^
zoom:1;
2 W D8 n/ L( v% d, mmargin:5px auto;}
2 u9 e+ {9 _3 n: l8 V
& i' t/ y# S' C1 o 2、margin加倍的问题。# v. ] V" a: L" L
. ?; e) h' G( P$ R) j
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
! o I W$ B( ?) |, }4 {- R& s 解决方案是在这个div里面加上display:inline;1 W' z& t% o+ Z( W8 _+ e9 P
例如:
" y8 j# i0 c0 Y, `/ n- T<#div id="imfloat"></#div>
' n7 o# Q. c$ E! j# a6 H! X* O ?) B1 g2 n
! S+ I" U; R# W) G- P 相应的css为
. y: F- o8 ?" b! f) L/ q& }#IamFloat{
: H7 p9 B$ s% s% |float:left;
' d ~: e) B; r: Y' H3 @ Rmargin:5px;/*IE下理解为10px*/0 |. b' `" b( ?; F3 `
display:inline;/*IE下再理解为5px*/}
& F3 R0 A/ {& _" K+ Q* \
" [7 Q: B3 w4 w0 Y 3、关于容器的包涵关系1 c1 p/ [6 Z( h5 }+ q5 c* z# |
( |4 |2 ?0 K4 b# F# v
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
+ ]/ A r9 L, [* S
, P5 F0 Y% K" M6 v X+ ?1 O' W9 w 4、关于高度的问题
2 D- ]" u; u) a/ [+ I5 X: ?. f/ P1 x; F
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
1 z; v/ B \) K; E
% z; E8 \( `! D/ r+ f, T 5、最狠的手段 - !important;
7 @* O% J$ d& s
3 A$ ^! m( w$ Z 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{+ Z- b' V" ]9 F
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
' F/ e. j% R" v# ], K! m/ u9 v3 z# U0 G1 Abackground:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}9 Y/ Q6 j' l. Q0 F6 f
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|