标题:
ie firefox 兼容CSS的问题
[打印本页]
作者:
admin
时间:
2008-1-25 02:44
标题:
ie firefox 兼容CSS的问题
CSS对浏览器的兼容性具有很高的要求,通常情况下IE和Firefox(简称FF)存在很大的解析差异,这里介绍一下兼容要点。
4 \" p' `" b( U
% h& N- Y; D, n! V R9 R9 l
常见的兼容问题:
; v- T3 b- l5 b+ \/ v
H4 h$ G5 g9 ]% ~; x2 b4 p
1.DOCTYPE 影响 CSS 处理
% |3 j4 y x1 J7 m5 I
8 M' K7 H! |+ B8 z
2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
$ X' k) V8 k' M4 W- z2 Z1 ]
# R" A, n% E: N( N6 ~; L6 c; \
3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
6 V, h8 e- |0 ]+ _% m. |
; ~3 v z! u7 U
4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
; \$ K7 j( O/ I# D
$ F& h1 M, F# W( N8 D- }* o, B
5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
0 ?) t" |3 O# C( q [7 d( F
' Z* R7 O0 m8 }+ Y# Y; w7 G
6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
1 v; P% l3 _) i2 q, m, _5 e
|! O# z7 H8 n9 F4 v; f. n" m) ]
7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
$ j) ^: G9 U- ]
2 T. N2 M# {8 P" W6 ^) f3 ~- B% N
8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。
N6 S9 S5 K% R( o
+ C" p2 e# q# F1 f; V0 k
9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
0 @2 o* H% K) _* N( ~
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px}
5 W+ S3 U& g8 ]" D. b' b& \$ N4 `
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
# h T4 A; ^- F* F: F- J" [5 V
" i1 t) Q4 [, c9 l9 m
10.IE5 和IE6的BOX解释不一致
+ H8 H j# t5 i$ ], ~4 ~! y
IE5下 div{width:300px;margin:0 10px 0 10px;}
# S& q @* f: Q$ M' s! c0 [ m
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
! A3 n0 c$ a; h& [3 V0 E
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持
( ^" U- j: w. x' g4 h/ {! ]; }6 {
7 i2 ?6 z4 e( W6 G) P8 x
11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 ul{margin:0;padding:0;} 就能解决大部分问题
/ G+ h' \: Y! ~7 p% w1 s/ C
1 t- t( q5 E* K% c& H
注意事项:
0 I* M2 t& u5 \& h: p7 _8 w
4 V( _# v" o% }) B% T6 M0 @( \
1、float的div一定要闭合。
' k. Q& q4 y8 ?3 Z6 ]/ M$ s" c% e
% |3 q" d) m6 L" E. `8 Z) h
例如:(其中floatA、floatB的属性已经设置为float:left;)
# M9 a* g+ E0 f+ k$ S0 ]; Q
<#div id="floatA" ></#div>
. j) o% M0 u ]; A
<#div id="floatB" ></#div>
9 K: p4 `: u9 c* B4 k
<#div id="NOTfloatC" ></#div>
$ S4 j! h$ o/ _6 p) F- ?0 g
这里的NOTfloatC并不希望继续平移,而是希望往下排。
, Y. M* K w) `7 B
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。
* S- g; Q4 ?. R1 i, p
在 <#div class="floatB"></#div>
0 D; \' I& z! o) Y, m
<#div class="NOTfloatC"></#div>
% U# m p; H7 U2 I+ g" U2 G4 ^. m
之间加上 <#div class="clear"></#div>
; |2 `+ b9 r* D6 B8 L
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
. E2 E5 ^* B0 P, Z( S2 t% D
并且将clear这种样式定义为为如下即可: .clear{
, w" @# v+ t: B
clear:both;}
8 D9 _1 Z0 d! s% K- k
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
9 Z( ` w t# v! T2 ~
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
+ T/ V! [4 L: }- q7 O7 [
例如某一个wrapper如下定义: .colwrapper{
% Y3 X) b& I% P3 r
overflow:hidden;
2 G: `7 q: U, o4 ~7 N6 ]6 j
zoom:1;
6 ~2 D1 g& X: a7 n. Q" k
margin:5px auto;}
" X& Z7 l p9 W" @ d, S( E
. W7 m9 ?2 Z( U, d+ a5 z+ V6 G" C$ y/ M
2、margin加倍的问题。
$ \3 X- g6 |5 _$ r
/ W8 U6 H% n& f$ Y3 k* R7 C, k
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
4 ]% K. |' O( q/ l( @: D* ]- Z/ i
解决方案是在这个div里面加上display:inline;
1 R8 F9 }$ E- v. I
例如:
8 D4 x0 H7 f' c( z" j
<#div id="imfloat"></#div>
5 R& o; n8 }0 j& J/ h9 R& ?
8 t J0 r" k: y( L
( K& {/ X2 ^; k$ x9 j4 B
相应的css为
& r I; y% j: Z! _
#IamFloat{
4 `* c- h9 {9 a/ p' H$ @
float:left;
; I V; Z {/ w+ A. g% R5 t( I
margin:5px;/*IE下理解为10px*/
4 `5 s% }4 B3 L. y: e$ s2 I, @
display:inline;/*IE下再理解为5px*/}
$ A- o1 U e- E6 _
* q. h- L! h) c) R+ A9 X9 _
3、关于容器的包涵关系
+ L! i5 F, \7 n/ o! b* F" T
- J) d) g$ l) b, t* L H* I1 i
很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。
4 `+ g5 V+ h- F% c/ i
U5 f0 u8 i0 @' \
4、关于高度的问题
Y( X8 H9 \( E2 D( I
9 [2 b6 q6 D3 q2 q1 @5 R+ n; D+ v
如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)
* j J6 ~8 Q% m. r
- q% e4 H; K9 h' N
5、最狠的手段 - !important;
+ P" Y+ I+ C. f6 |2 m" b
# d e1 w, `4 u$ K+ t
如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下 .tabd1{
1 j' Y! M: B8 y
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
$ s$ k% O9 j; t: ^% ~0 L- h
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
9 S1 w- H, Y& w9 K6 i
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2