- UID
- 864
- 斋米
-
- 斋豆
-
- 回帖
- 0
- 积分
- 62579
- 在线时间
- 小时
- 注册时间
- 2010-3-29
- 最后登录
- 1970-1-1
|
发表于 2012-4-16 19:26:29
|
显示全部楼层
CSS兼容IE/Firefox要点
) _! D' E4 ?. ? [日期:2007-12-09] | 来源:网络 作者: | [字体:[url=]大[/url] [url=]中[/url] [url=]小[/url]] | 首先我们说说firefox和IE对CSS的宽度显示有什么不同: 7 h5 F0 d/ R; Y& b+ [- B" I
其实CSS ’width’ 指的是标准CSS中所指的width的宽度,在firefox中的宽度就是这个宽度。它只包含容器中内容的宽度。而Internet Explorer ’width’则是指整个容器的宽度,包括内容,padding ,border。
% L6 r2 s1 b+ @. N5 R( BFirefox中:容器占的宽度=内容宽度+padding宽度+border宽度 " i; O% D$ c% Q6 W. Y
IE中:内容宽度=您定义的容器宽度(Internet Explorer ’width’)-padding宽度-border宽度
2 A* C- H2 f I; m/ D) e) _9 s( n# l3 h. @
所以,如果IE中定义 width:120px;padding:5px 的话,所显示的宽度就是120px.
7 }3 X0 @- R& Y1 m7 u3 B1 W 即padding:5px是在width里面。
3 w6 F- b8 p- V 而Firefox中,上面这个定义,显示宽度就是 130 px;
7 i2 v7 \ f- w# r' O4 I 所以,我们就必须这样定义 8 I7 H" A: L+ e0 B: T6 S
width:115px !important;width:120px;padding:5px;
8 m& G/ ^7 I9 K+ ]" N9 a$ m; s1 c ; K9 A# ?. D" y* T8 M+ G4 G3 z; `0 V
必须注意的是, !important; 一定要在前面。
4 K8 v. Y5 |/ t
, F+ V- x% W4 u! S9 ? N& b8 Z7 H% K9 v) e8 i
CSS 兼容要点:
* d+ m. V% Q6 k$ m! h- DOCTYPE 影响 CSS 处理
- FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
- FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
- FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
- FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
- div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
- cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
- FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格! l. v- z* Y9 }8 l
XHTML+CSS兼容性解决方案小集" z+ T& b( }1 H; r' V3 l4 |% p
使用XHTML+CSS构架好处不少,但也确实存在一些问题,不论是因为使用不熟练还是思路不清晰,我就先把一些我遇到的问题写在下面,省的大家四处找^^
1 Y: T& p1 y$ G* _. e- 在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法:, i; {/ y5 c% w1 K* Z: J5 c# E
div{margin:30px!important;margin:28px;}注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:& k3 u/ L* p! p' ^; u7 Z2 |, H
div{maring:30px;margin:28px}重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; - IE5 和IE6的BOX解释不一致IE5下div{width:300px;margin:0 10px 0 10px;}div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则 是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改, L. [/ P) m, x/ `
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px},关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:) - ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义/ d" F1 c/ O G% b5 J& J8 {3 Y9 E# n
ul{margin:0;padding:0;}就能解决大部分问题 - 关于脚本,在xhtml1.1中不支持language属性,只需要把代码改为
9 S1 e! b% v) e1 T9 N<script type="text/javascript">就可以了 - margin加倍的问题
- R$ l9 n0 N" R& l& K/ O 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
/ m8 {3 ~" d5 K% \ 解决方案是在这个div里面加上display:inline;* p x: b) l2 u3 F2 \5 R7 N
例如:
! ^" J( d2 F1 ^$ ]. |<#div id="imfloat"></#div>
7 L/ u0 M9 Y. @9 [$ H# c1 ^( A 相应的css为
, h$ R5 ^+ |5 s' T! R, K#IamFloat{
7 `& j0 b0 r. E+ Ofloat:left;' r Z9 j5 x% a6 |) X
margin:5px;/*IE下理解为10px*/
9 f4 T% ]$ I* j# S; \3 F/ k; }display:inline;/*IE下再理解为5px*/}- v7 ^+ Y% W, `
- B f Q4 C( T4 r# P q5 v6 O; U
' ^: W$ j. f" P. b2 V
9 ^) r) c" r9 F 8 z! Y0 O: x) F! u3 i5 z) k- O
, B+ O8 F) Y# ?+ e8 ^; D. \
$ n( g/ Y9 |7 H- m, Z |
|