|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
5 h. W; r$ v9 l4 P9 U2 m
6 G6 i! {$ S# l2 K2 c# J0 b6 T 常见的兼容问题:
2 @0 M2 Q2 j) P" s
& Q7 m. \1 I5 [7 F8 Y/ ~5 c 1.DOCTYPE 影响 CSS 处理
' @( \% m6 o+ b9 a% z; `3 R
" E) L9 n1 r- \5 E 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行5 `6 |: p" a: ]
. g# i$ {/ I0 Y$ B" H7 }4 m2 ?
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
7 V% T5 U# S# E% }1 b% ^) p. t P; { D# z
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width+ ]$ A( X: F6 }( p1 P* e2 E3 Y
5 ^& P! S8 ~! K; E" ?1 { 5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式1 }( C% ^3 {, @' d- M
6 N1 k' l' l. e% |- _1 o! l* e
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
6 n' C% W: d0 N4 c* O. Z: ?6 |; \; r
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
6 ~/ r5 `1 j1 n0 ?# M
- K j9 {# u+ E' M; t, H. z3 ? 8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
9 O* }* ?1 ] _& e" ^" J' S# S
$ _# n2 z* U' r6 x) B4 B& ~9 m 9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
2 ^1 @6 J c3 O7 v( K7 J 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}( J9 q% ]7 }- X+ ~. ]% i: |4 X, J5 H
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;+ J, \ Z# K9 z" D( d' E3 p, S1 T
+ w: x, }7 C( m: w4 k5 f
10.IE5 和IE6的BOX解释不一致9 [4 J; ` v7 Y
IE5下 div{width:300px;margin:0 10px 0 10px;}6 C$ X" w0 c" r, j: k0 ?9 s
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
! k( t' e7 p0 K2 P 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持0 ~/ Q& I9 r$ }/ b& v
! B1 I. A. P j8 p0 R
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题/ ~, f& R, m }/ o# I
' h4 M& f3 l- d7 d* j: e3 X; O0 B
注意事项:
# e" x, ]- F9 {& G2 ~& ?7 o/ O2 g+ `
1、float的div一定要闭合。
5 w5 J+ Z! d- k7 y2 }
' ~, G( S6 _. Y" J+ G 例如:(其中floatA、floatB的属性已经设置为float:left;) * `: _& t8 w( w; v: i' B, { V; \
<#div id="floatA" ></#div>
; @( u' q* ?3 Q9 O3 v7 x<#div id="floatB" ></#div>
; S6 d4 m+ g/ l# V- k5 F<#div id="NOTfloatC" ></#div>5 Q3 { e' p% f5 C0 E7 V: D# U
这里的NOTfloatC并不希望继续平移,而是希望往下排。' w) X6 T# b( G1 }
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
1 j7 m2 B! g( c2 b5 c6 f 在 <#div class="floatB"></#div>2 Q! D$ o9 K$ D1 @. `1 z% k
<#div class="NOTfloatC"></#div>
# e0 V" {$ W U( j. d1 B& b" O 之间加上 <#div class="clear"></#div>* U7 B4 }6 F0 o; O4 P3 g6 h
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。) \& e3 A+ k6 p: o4 a4 U
并且将clear这种样式定义为为如下即可: .clear{
: R/ u- g/ f& k' q+ v- hclear:both;}
7 Q$ u) [: j' S 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;( v* B" s' H$ }, |) i9 R1 @
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。! i0 E: P/ c* f+ n, P8 x+ m6 G
例如某一个wrapper如下定义: .colwrapper{
7 ~ ?5 E. ]9 b1 D$ y: uoverflow:hidden;
/ v( l# a" l. qzoom:1;0 K1 X8 r: B% p; Z0 _- ]9 A( T
margin:5px auto;}
2 s3 j9 D2 Q X' F6 o9 @ g5 H% U0 T3 Y- h
2、margin加倍的问题。
% h: ]0 h1 s/ [$ I! p) R+ w- B3 u; P
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
0 Z& h8 t$ d" s1 R; q# j2 h h 解决方案是在这个div里面加上display:inline;' q2 I f8 N3 t3 l6 e* e; g& U
例如:! O' w& y) x: ~) H0 g1 B
<#div id="imfloat"></#div>6 u, n7 X4 X( j" ^1 C1 c
& d# W5 V$ y2 U) K! J
; }: t u& j, F$ ]: u' D$ `' S 相应的css为" i7 i; J `+ }% C* c
#IamFloat{& p& C2 } n: w# q/ l0 L7 |+ W
float:left;
8 K& E; D/ n; b9 v9 {- Dmargin:5px;/*IE下理解为10px*/& Z2 s+ A0 E0 C" H
display:inline;/*IE下再理解为5px*/}) |2 C: O* r7 g6 H2 _8 |
! q5 u) G( c' y% p# y
3、关于容器的包涵关系( I: A6 q; \3 B( g: h5 p
7 i! Y" {7 o4 t- C 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。0 G h! `/ C/ u6 @
: b8 K" c% Y( }* O) B. B7 b 4、关于高度的问题6 r! M q1 D, ^2 D
, F! n# M/ I1 E7 u7 ^7 f 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)! s) v( Q+ d* e# y8 o' |5 x2 X
! h5 Y3 x+ V; b5 P& B1 \0 }1 R
5、最狠的手段 - !important;
" \! O1 v" ]2 Q. D* ~9 f3 V2 v9 a
' G2 S3 r: J0 G) P# a9 r. O8 @ 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
2 b) X( [9 |* G& K. Ibackground:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/' C1 L: A. F; F- L7 i- A! ^
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
5 d8 b9 n* Z0 O7 q, E; r 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过 |
|