CSS在IE和Nascape的显示差别

css|显示

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)的左侧或者右侧。如果包含元素是一个主体标签,那么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建造者带来最头疼的问题。要避免你的页面设计出现问题,知道浏览器生成的效果会有所不同是第一步,也是最重要的一步。

--------------------------------------------------------------------------------
本文作者:Michael Meadhra在Web发展的最初阶段就在这一领域从事开发。他出版的书已累积几十种,包括即将上市的由Osborne/McGraw-Hill发行的《如何用Dreamweaver MX 2004做到一切(How to Do Everything with Dreamweaver MX 2004)》。

时间: 2024-09-24 13:16:01

CSS在IE和Nascape的显示差别的相关文章

使用CSS解决网页在IE和Nascape的显示差别

css|解决|网页|显示 Web建造者要对付的最棘手情况之一是:相同的CSS代码被不同的浏览器解释后会生成不同的效果.在以前,各种不同的浏览器生成极其不同的页面是随处可见的,而现在我们可以用所谓的符合标准的浏览器获得更好的效果.然而,显示效果的差别还是无法避免.  当前处于领导地位的一些浏览器在处理浮动效果上就存在着这样的差别.如果有人想创建一个能够随着浏览器窗口的大小变化而动态更改大小多栏的布局,那么这将是一个特别麻烦的问题. 简单的没有浮动的页面 假设你有两个div--div#one和div

html,css手机滚动条滑动的时候显示滚动条,不滑动的时候滚动条隐藏

问题描述 html,css手机滚动条滑动的时候显示滚动条,不滑动的时候滚动条隐藏 html,css手机滚动条滑动的时候显示滚动条,不滑动的时候滚动条隐藏 解决方案 默认就是啊.可以用下面的css美化一下: ::-webkit-scrollbar {width: 5px;height: 5px;} ::-webkit-scrollbar-track,::-webkit-scrollbar-thumb {border-radius: 999px;border:0px solid transparen

ie8选择兼容窗口后,css的background-image:url就无法显示图片

问题描述 ie8选择兼容窗口后,css的background-image:url就无法显示图片 ie8选择兼容窗口后,css的background-image:url就无法显示图片,取消兼容后显示正常.如何处理呢? 解决方案 background:url,这个就没有这个问题了. 解决方案二: 低版本浏览器可能没支持background-image,尽量用background吧,或者不去管低版本浏览器的兼容问题. 解决方案三: 兼容模式和标准模式DOM的padding和margin那种会依据模式来

IE、Nascape环境中CSS的显示差别

Web建造者要对付的最棘手情况之一是:相同的CSS代码被不同的浏览器解释后会生成不同的效果.在以前,各种不同的浏览器生成极其不同的页面是随处可见的,而现在我们可以用所谓的符合标准的浏览器获得更好的效果.然而,显示效果的差别还是无法避免. 当前处于领导地位的一些浏览器在处理浮动效果上就存在着这样的差别.如果有人想创建一个能够随着浏览器窗口的大小变化而动态更改大小多栏的布局,那么这将是一个特别麻烦的问题. 简单的没有浮动的页面 假设你有两个divdiv#one和div#two,它们都有固定的宽度.如

CSS实现使超级连接放大显示的研究

css|放大|显示 代码如下: <!--StartFragment--><style type="text/css">.demo a {float:left;margin:5px 1px 0 1px;width:20px;height:20px;color:#999;font:12px/20px 宋体;text-align:center;text-decoration:none;border:1px solid orange;}.demo a:hover {po

CSS代码如何使图片自适应显示宽度

图片尺寸过大将会影响页面布局.最理想的解决方案自然是自动生成缩略图,涉及的后台工作较为复杂,用CSS进行控制是一个可以接受的捷径. 如果用width 属性强行设定显示尺寸似乎太不智能.幸好 Firefox/Opera/IE 7 都提供了 max-width 属性支持.假定希望图片显示宽度不超过500像素,CSS可能如下: 以下是引用片段: 以下是引用片段: fit-image { border : 0; max-width : 500px; } IE6 不支持 max-width 属性,但是利用

css效果在jsp页面为什么显示不出来

问题描述 我在dreamwear做好地网页html的,在IE9中运行时很正常,css效果也很正常,但是我把html中得内容复制到jsp页面中,并且也罢css也复制过去了,在myeclipse运行我的jsp页面在IE没有Css效果,但在谷歌里浏览.和火狐中就有效果,我实在想不通,因为之前在dreamwear中用IE运行时是正常的,之后变成jsp在谷歌也是正常的啊,但jsp在IE中css效果怎就不正常了呢,上述证明我的程序一点都没错啊,我这里想要知道的是css在jsp中怎就不正常显示了呢? 解决方案

CSS或者JS实现鼠标悬停显示另一元素_javascript技巧

想达到鼠标悬停到元素a上,显示另一个元素b,可以通过css实现也可以通过js实现. js: 写两个函数:mouseenter,mouseleave,例如:其中 $("#a").mouseenter(function() { $("#b").show("normal"); }); $("#a").mouseleave(function() { $("#b").hide("normal");

JavaScript和CSS通过expression实现Table居中显示_javascript技巧

上篇博客说的是将div设置为居中显示,今天来分享一下如何将表格居中的显示.至于居中的原理就不说了,可以看一下我的上篇博客,这次没有使用window的两个事件,而是使用一个叫expression的函数.现在多数的浏览器都支持这个函数.在写上一篇博客的时候,我脑里想能不能把计算后的值赋给css的left和top属性呢?后来查阅资料找到了这个函数.这个函数用来把CSS属性和JavaScript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义的属性.就是说CSS属性后面可以是一段Ja