抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > div+css 布局浏览器兼容

div+css 布局浏览器兼容

时间:2021-01-16 07:40:06

相关推荐

第一次写div + css 的站点,进度相当的慢,而且项目也赶得挺急的,整个人被操劳的很累,做了几天后我把所学到的,一些技巧和网上搜罗 到了综合下发出来,希望对做设计的朋友有帮助!

1.为什么在不同的浏览器显示效果不一样?

因为不同浏览器对于css样式表的解析不一样,所以导致样式乃至层布局发生变化。例如,ff中设置padding属性时,div会相应增加height和width,而ie的解析是不会的,再例如ff对盒模型的解析和ie相差两个象素。

2.设计时要做到所有浏览器都兼容吗?

我的答案是即使能做到也没有必要去做,科技是在进步的,用户总是在推陈出新的使用这新版本的浏览器,根据“设计诉说”的站点统计小样本结果显示,6225个访问者中有72.1%使用IE6.0;12.7%使用IE7.0;7.9%在使用FF2.0,剩余的不同版本的浏览器占的百分比都不到1% 所以我认为只要做到IE6 FF2.0 以及新出的IE7.0兼容即可,顶多向下兼容一下IE5.5,完全没有必要为了那些个小数点费劲脑子。如果有必要可以另外设计css文件,然后通过js判断浏览器版本进行选择相应的文件。

3.css样式的优先级是怎么样的?

这个是个好问题,当你弄明白这个,我想应该可以很自如的运用一些兼容样式表的技巧了。在正常的IE中,如果你在css中重复定义一个属性时,浏览器解析的是后面的属性,举个例子

box {height:100px;height:200px;height:400px;height:300px;}

<1> 区分三款浏览器简单方法:

#example { color: #333; } /* Moz FF */

* html #example { color: #f0f; } /* IE6 */

*+html #example { color: #0ff; } /* IE7 */

在兼容IE7的*+html的hack一定要在顶部加入DTD声明,否则无效

<2> ie7.0与ie6.0的之间不兼容

ie7,ie6 div+css出现宽度定义不同 在宽度定义上出现宽度的解释不同,IE7宽度在IE6上要宽一些,,正是这个原因网页可能会出现溢出问题, 还好这个问题可以通过更改数值或者 修改一下百分比解决. ie7.0修复了!important这个bug。 先前由于ie6.0对!important识别存在bug, 在firefox和IE中的BOX模型解释不一致导致相差2px,大部分网页标准设计师通过这个bug来兼容 ie6.0和firefox,即采用:div {margin:30px!important;margin:28px;}。但是ie7.0把这个bug给修复了,所以问题又出现了,怎么兼容 ie.7.0的同时又能兼容ie6.0和firefox?不过ie7 也能识别!important 也可以通过这个来区分IE6。 ie7.0对很多不规范的css不再支持,对js语法要求更严格规范。 很多在IE6下正常显示的js页面,在IE7下均不能正常显示,并且还没有提示错误。ie7.0对js语法要求更严格规范,只是这个规范似乎并没有 说明,也没有明白的告诉大家,他们是怎么“规”怎么“范”的 .

<3> 如何做到让IE6.0与FF兼容?

最常用的一种方法了,也是屡试不爽的——“!important”,这个字段是用来提高优先级的,而IE6.0对于找个字段是无法识别的,于是FF与 IE6.0就可以分开解析。

注意事项:

1、float的div一定要闭合。

例如:(其中floatA、floatB的属性已经设置为float:left;)

< #div id="floatA" >

< #div id="floatB" >

< #div id="NOTfloatC" >

这里的NOTfloatC并不希望继续平移,而是希望往下排。这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将 float标签闭合。在

< #div class="floatB">

< #div class="NOTfloatC">

之间加上

< #div class="clear">

这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异 常,此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden; 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就 达到了兼容。例如某一个wrapper如下定义:colwrapper{overflow:hidden;zoom:1;margin:5px auto;}

2、margin加倍的问题

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上display:inline; 解决方案是在这 个div里面加上display:inline;相应的css为

#IamFloat{

float:left;

margin:5px;/*IE下理解为10px*/

display:inline;/*IE下再理解为5px*/}

3、关于容器的包涵关系

很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一

定要用Photoshop或者Firework量取像素级的精度。

4、关于高度的问题

如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好

5、最狠的手段 - !important;

如果实在没有办法解决一些细节问题,可以用这个方法.FF对于”!important”会自动优先解析,然而IE则会忽略,值得注意的是,一定要将

xxxx !important 这句放置在另一句之上.

6.DOCTYPE 影响 CSS 处理

7.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行.

8.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中.

9.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width.

10.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式

11.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了 。缺点是要控制内容不要换行

14.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以.

15.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高 度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。

16.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;} 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释

成这样:

div{maring:30px;margin:28px}

重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;

17.IE5 和IE6的BOX解释不一致

IE5下

div{width:300px;margin:0 10px 0 10px;}

div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填 充)+10px(左填充)=320px来计算的。这时我们可以做如下修改

div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}

关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)

18.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义

ul{margin:0;padding:0;}

就能解决大部分问题

19.ff下父容器的高度自适应

height:100%; overflow:auto

20.各浏览器padding兼容

padding:0px; /*ff*/

*padding:0px; /*ie7.0*/

_padding:0px; /*ie6.0 */

21.img 下的留白,大家看这段代码有啥问题:

<div>

<img src=”" mce_src=”" />

</div>

把div的border打开,你发现图片底部不是紧贴着容器底部的,是img后面的空白字符造成,要消除必须这样写

<div>

<img src=”" mce_src=”" /></div>

22. 失去line-height,<div style=”line-height:20px”><img />文字</div>,很遗憾,在ie6下单行文字 line-height 效果消失了。 ,原因是<img />这个inline-block元素和inline元素写在一起了。解决方案:让img 和文字都 float起来

引申:大家知道img 的align 有 text-top,middle,absmiddle啊什么的,你可以尝试去调整img 和文字让他们在ie和ff下能一致,你会发 现怎么调都不会让你满意。索性让img 和文字都 float起来,用margin 调整。

22 .IE 5.x/Win

在此我们指Windows平台上的IE 5.0和IE 5.5。CSS的支持依然很糟糕,但是比起NN 4.x已经有了长足的改变。它们臭名昭著错误的盒状模型(Box model)可能是导致CSS界第一个hack的出现。我们先来看看盒状模型。W3C规范的盒子,可以使用“相加”来描述,即,一个元素的实际盒子宽度是由内容宽度(content width),边框(border),边距(padding)堆积起来的。而IE 5.x/Win则可以用“相减”来描述,也被称为边框盒状模型(border box model),一个元素的实际宽度就是该元素的width设值,边框,边距都从中减去。

来看一个例子:

div { width: 200px; margin: 20px; padding: 20px; border: 5px;}

依照W3C规范,这个div实际所占宽度是5px + 20px + 200px + 20px + 5px。而对IE5.x/Win的边框盒状模型来说,这个div实际宽度就是200px,而内容宽度被压迫到只有150px:200px - 5px - 20px - 20px - 5px。这时候,传说中的牛人Tantek ?elik(负责IE5.x/Mac的前微软员工,现在经营Technorati,Microformats创始人和贡献者之一)出现了,带来了Box Model Hack. 该hack使用了IE 5.x/Win不支持的voice-family,并在值中设置一些CSS转义引号(CSS-escape quotes) ,欺骗IE 5.x/Win认为规则块(declaration block)已经闭合。

div { /*为了更好说明,width调了一下写作习惯*/ margin: 20px; padding: 20px; border: 5px; width: 240px; /* 1. IE 5.x/Win需要的宽度 */ voice-family: "\"}\""; /* 2. IE 5.x/Win看见了},认为规则已经结束了 */ voice-family: inherit; /* 3. 能够正确解析的浏览器重置该值 */ width: 200px; /* 4. 这才是我们需要的真正宽度 */}

如果觉得《div+css 布局浏览器兼容》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。