无忧技术网 - RSS订阅 
无忧技术网

CSS在IE和Nascape的显示差别


作者:[佚名] - 发布:2010-4-22 17:35:38 - 来源:无忧技术网

Web建造者要对付的最棘手情况之一是:相同的CSS代码被不同的浏览器解释后会生成不同的效果。在以前,各种不同的浏览器生成极其不同的页面是随处可见的,而现在我们可以用所谓的符合标准的浏览器获得更好的效果。然而,显示效果的差别还是无法避免。

当前处于领导地位的一些浏览器在处理浮动效果上就存在着这样的差别。如果有人想创建一个能够随着浏览器窗口的大小变化而动态更改大小的多栏布局,那么这将是一个特别麻烦的问题。

简单的没有浮动的页面

假设你有两个div——div#one和div#two,它们都有固定的宽度。如果没有浮动或者绝对的定位,这些div就会以一个摞在另一个之上的形式放在浏览器窗口的左侧(如例A所示),因为标准的页面安排顺序是从左到右,从上到下,块级元素(block-level element)都会在前一个元素下面紧接着开始一个新的行。

下面是所有例子都需要的一段HTML:

<body>
<div id="one">
    Port side text...
</div>
<div id="two">
    Second column text...
</div>
</body>

 

下面的CSS代码用于基本的、不带浮动的版本:

div#one {
    width: 150px;
    margin: 0px;
    background-color: red;
}
div#two {
    width: 300px;
    padding: 0px 10px 5px 10px;
    margin: 0px;
    background-color: silver;
}


基本的浮动
当你创建一个包含有float: left或者float: right属性的CSS样式,并把它应用到诸如div标签这样的块级元素上的时候,div就会从文档的普通文本安排顺序里被删除,并被强制放到包含元素(containing element)的左侧或者右侧。如果包含元素是一个body标签,那么div就会浮动到浏览器窗口的一侧。否则,浮动的div就会移动到包含div的边缘,而以前是不会这样的。

如果你有一个以上的浮动元素,那么第二个和随后的浮动元素会紧接着第一个排成一条,其排列方式非常像文本里的一行字母。一系列浮动元素会对齐成一行,直到撑满浏览器窗口的整个宽度,然后换到下一行,就像段落里的文字那样排列。

 
固定宽度的浮动
只要div#one和div#two具有固定宽度,而且其总宽度小于浏览器窗口的宽度,它们就会像例B所示的那样紧挨着排在一起。几个大的浏览器在处理固定宽度浮动的方式上保持着相当的一致性。下面的CSS代码所生成的页面在IE6、Netscape 7、Mozilla 1和Opera 7里显示出来是一模一样的。

 
div#one {
    float: left;
    width: 150px;
    margin: 0px;
    background-color: red;
}
div#two {
    float: left;
    width: 300px;
    padding: 0px 10px 5px 10px;
    margin: 0px;
    background-color: silver;
}

 

可变宽度的浮动带来了可变的结果
当你想把div变成宽度可变的时候,生成浮动效果不一致的问题就浮现出来了。例如,假设你想要在页面的左侧放一个固定宽度栏,用于导航按钮的列表,而想在右侧放另外一个栏,让它根据浏览器窗口(的大小)自由扩展和收缩。

你可能会认为自己用两个左侧浮动的div就能实现这个效果;一个是固定宽度的,而另一个把宽度设定为自动,让div自动调整大小,这样它就能够填补第一个div和浏览器窗口右侧之间的空白。例C就是下面代码显示的结果:

div#one {
    float: left;
    width: 150px;
    margin: 0px;
    background-color: red;
}
div#two {
    float: left;
    width: auto;
    padding: 0px 10px 5px 10px;
    margin: 0px;
    background-color: silver;
}


如果在IE里显示这个例子,你会获得预计的效果,即左边是固定宽度的栏,紧挨着它右侧的是一个可变宽度的栏;但是,相同的代码在其他当前流行的浏览器上却会生成不同的结果。第二个div会掉到第一个的下面,而不是接着这一行放在右边。结果就和不带浮动的页面非常类似。

解决方案
要获得这种两栏布局,其中一栏能够自动调整大小的理想效果的一种解决方案是对第一栏使用浮动div,但是必须要从调整大小的那一栏里把浮动删掉。由于浮动栏和普通的文档安排顺序是分离的,所以常规的div会被放在上方,但是在浮动div的下方。在左边添加一个padding,并让其等于浮动div的宽度,而常规div的内容看起来就会像是放在左边div右侧的一个栏里。例D说明了这个技巧。下面的代码能够在当前所有的浏览器里生成相同的效果。

div#one {
    float: left;
    width: 150px;
    margin: 0px;
    background-color: red;
}
div#two {
    width: auto;
    padding: 0px 10px 5px 160px;
    margin: 0px;
    background-color: silver;
}

 

尽管当前Netscape/Mozilla浏览器一般都被认为要比IE更加符合标准,但是我个人认为IE生成浮动元素的效果要比前两个浏览器更加一致。但是如果不考虑哪一个生成的效果是“正确的”,那么其差别就会给Web建造者带来最头疼的问题。要避免你的页面设计出现问题,知道浏览器生成的效果会有所不同是第一步,也是最重要的一步。

责任编辑:liqwei
打印本页】【关闭本页】【返回列表
·上一篇:CSS中的长度单位
·下一篇:JavaScript[对象.属性]集锦
 文章评分
  • current rating
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
 相关文章
·[JS/CSS/HTML]几款CSS在线工具推荐 (2010-08-21)
·[JS/CSS/HTML]CSS查找BUG的10个顺口溜 (2010-08-21)
·[JS/CSS/HTML]CSS在IE与Firefox下的兼容性 (2010-04-22)
·[JS/CSS/HTML]CSS中的长度单位 (2010-04-22)
 相关评论
 站点最新文章 更多>> 
·[经典影音]弱点
·[经典影音]萨利机长
·[经典影音]天空之眼
·[管理知识]康奈尔笔记法,提高100%学习效率
·[管理知识]刘强东:我管75000人靠这4张表格
·[管理知识]跟壳牌学HSE管理
·[运营策划]编辑工作内容整理
·[至理名言]奋斗与决定
·[瀚海拾遗]盲人打灯笼之各家论道
·[搞笑段子]中国男足
 站点浏览最多 更多>> 
·[协议规范]http断点续传原理:http头 Range、…
·[JS/CSS/HTML]HTML 空格的表示符号 nbsp / en…
·[NoSQL]Mongo数据库简介
·[协议规范]什么是SPF记录?如何设置、检测SP…
·[协议规范]图解 HTTPS 通信过程
·[PHP]精选国外免费PHP空间推荐
·[程序综合]常用IP地址查询接口
·[程序综合]什么是 DNS Prefetch ?
·[程序综合]获取客户端IP地址的三个HTTP请求…
·[Linux]/usr 目录的由来