返回列表 发帖

ie firefox 兼容CSS的问题

CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。4 E: h8 T0 `( O1 L$ y8 S

. h/ r" J5 q* C. T/ u  常见的兼容问题:
) I5 ]" P+ w  F( |. q
! {  Z& |" Y, f" I" U9 }* ~4 I8 a  1.DOCTYPE 影响 CSS 处理$ G+ |$ z- ?  N& R
# I( @: U+ }1 {/ f1 Z' J1 m' d
  2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行  u4 M( U7 j% D4 i. H: g1 H
4 Z1 L! o3 `" z# {' k$ a( [
  3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中$ y! F; c% E$ E. p8 K! X
+ R8 u" \. u7 l; l& x, q0 D
  4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width% x1 h  F2 T: R- v4 K- o. C. n$ s

% m  }) _6 a5 `7 c9 ~, s  5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式0 Q5 G0 |! x1 a8 {

# v+ \" c! b2 t3 l( Y6 P  6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行" X' h( g) b$ r  L; o$ V4 q  E4 Z
; L5 ]' {) Z- L6 Z* f( J
  7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以& r3 U2 X2 r9 H3 c% d% n2 i

4 }! I$ M; n* K/ k  8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
- U' [* @/ H3 D- ^: J* B( R1 }' `9 u* o, Y3 s1 g: p
  9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}! l0 P3 T- Z  w& g* p7 v! h7 L
  注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
; q  D, s  K- n( q: I! @0 h  重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
8 ~  f: s+ r: G1 ?
% P8 Q# n6 t" h0 B! q% `0 [  10.IE5 和IE6的BOX解释不一致. k, I8 E: T% E' F) u/ J
  IE5下 div{width:300px;margin:0 10px 0 10px;}
. H% `! N) L6 a, y8 A0 o3 q  div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
! u/ r' d( l" v' J  p) ^6 _5 F6 o  关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持3 H5 o4 `8 e# U2 N9 C6 T

( j  {% u# U! W2 k9 g  11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
5 m* q& c3 B% D  i+ w9 i& \, M7 u/ E( w+ C8 {
  注意事项:2 L3 k- Z% n& [! a+ V9 N
  K+ Y6 m2 S, n# }7 @
  1、float的div一定要闭合。0 V2 N8 O: N) s6 u$ C9 u: {4 m1 o
6 c7 {/ p8 w& n' q; b# C2 l) z$ y
  例如:(其中floatA、floatB的属性已经设置为float:left;)
" W$ L4 ]; K* Y7 U8 ~( m<#div id="floatA" ></#div>
! A! G: Q; \& i9 H4 j<#div id="floatB" ></#div>
/ J! k  v8 b* ?; o<#div id="NOTfloatC" ></#div>
% J' q3 M0 [+ f/ `4 [  这里的NOTfloatC并不希望继续平移,而是希望往下排。
# {$ ^$ E4 a3 L: u) G8 i1 ~  这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。: }( r" G  S: w" Q& k& X
  在 <#div class="floatB"></#div>
0 u7 B* p; M* V/ M" |$ t1 B<#div class="NOTfloatC"></#div>+ |, ~' e  a* V3 d
  之间加上 <#div class="clear"></#div>
: f1 n' V# n* G" a3 Z8 e: g8 F- J  这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
) n8 U, L0 ^2 N* R. M% c$ |! W3 n  并且将clear这种样式定义为为如下即可: .clear{0 B! t- p+ h* Q% A# Q
clear:both;}1 S9 I0 O& [$ X" C+ L. _0 ^* `7 m
  此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;* j( f7 Z( y2 i; P: N) h& S! B$ B
  当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
# B# ]. c3 |& k# P) [4 K/ D6 F  例如某一个wrapper如下定义: .colwrapper{
4 d& c; R5 ]" ?! j. E$ ]overflow:hidden;
5 U5 i! u8 T2 t; b' c, I* @% D& Czoom:1;4 I9 v* X# K! k2 k7 ^7 P
margin:5px auto;}
( q" W! B4 P- U" l* u1 `' {. E
* N9 G% _+ R' c: e  2、margin加倍的问题。6 ]: G5 B- Y3 f

7 M" }* \: ^7 X% P) d  设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
: W' I2 J  b/ u% M  解决方案是在这个div里面加上display:inline;
8 g3 v( ^* l* @2 `" g例如:) |' d* D7 V) v1 g
<#div id="imfloat"></#div>
$ z* j8 N5 Z& u7 n- S( ?' p& ]6 `
1 h$ U' o& _0 d8 i. k! P' O7 y* H+ Q$ t1 |! H( ~0 t* I- w  u
  相应的css为- \4 v" G; T) R: F* h
#IamFloat{
, e3 u- n4 A; a1 }6 i! {float:left;# ]5 u& k5 s5 o2 Z" ~
margin:5px;/*IE下理解为10px*/
0 a/ T; [5 u4 t( cdisplay:inline;/*IE下再理解为5px*/}0 b1 d9 q% K9 [+ ^/ ]2 C( ]
  E) h) N6 y* V) j0 P+ r3 w
  3、关于容器的包涵关系1 r' d1 ?- t0 j% r1 V- F5 i# w5 k- u8 M
1 a: n: ~7 d# C; G
  很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
  f" K& {8 r) m9 k
5 e4 G* i- A, \  4、关于高度的问题
2 o" F% n: _# X2 y9 U( S. q7 v5 E* D5 L6 Q
  如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
( G4 B* t3 M- I+ `' y' C  Y3 _
9 J/ o- y8 h$ _: X  5、最狠的手段 - !important;
7 R' R! n: F1 |$ `' I; Q
$ p# {& I5 [+ M
  如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{( A+ ^9 o6 v$ x, L2 Y/ F) p8 |
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/6 C1 z" g( t) ~, p6 F9 d# L" o
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
" f, u  w5 e) {1 M3 h8 G  值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

返回列表
【捌玖网络】已经运行: