打印

[教程] 对《无法冲破的等级》一文的补充

前些时间发表的《position:relative/absolute无法冲破的等级》一文,讲了定位中的等级,这几天再看的时候发现文中讲得并不透彻,没有直指关键。所以特别的在这里做出补充希望能把position中的等级讲得更为清楚、明确一些。

我们都知道,position有四个不同的值,分别为:static | absolute | fixed | relative。在苏昱的《CSS2中文手册》中是这样解释的:static:无特殊定位,对象遵循HTML定位规则; absolute:将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位。而其层叠通过z-index属性定义。此时对象不具有边距,但仍有补白和边框; relative:对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置; fixed:IE5.5及NS6尚不支持此属性。

但是要想改变对象的层叠位置需要的是另一个CSS属性:z-index。但是这个z-index并非是无所不能的,他受到了HTML代码等级的制约。z-index只能在同等级的HTML上体现他的作用。这里需要声明的是z-index只有在对象的position值为relative/absolute时才可以使用。下面我们就举些例子来解释等级的特性:
复制内容到剪贴板
代码:
<div id="box_1">
  <div id="a">这是第一个块</div>
  <div id="b">这是第二个块</div>
</div>
针对上面的这个HTML代码我们还需要写一段CSS来定义它:
复制内容到剪贴板
代码:
#a,#b {position:absolute; width:300px; height:100px;  }
#a {z-index:10; left:0; top:0;  background:#000; }
#b {z-index:1; left:20px; top:20px; background:#c00; }


 提示:您可以先修改部分代码再运行
这是最普通的在这种情况下#a与#b的层叠等级是可以通过z-index来设定的。这是没问的,那么什么样的情况下就会出现问题呢?我们再看一个实例:
复制内容到剪贴板
代码:
<div id="box_1">
  <div id="a">这是第一个块</div>
</div>
<div id="box_2">
  <div id="b">这是第二个块</div>
</div>
根据这个结构再写一个CSS,要注意这个CSS中的不同的地方:
复制内容到剪贴板
代码:
#box_1, #box_2 {position:relative; width:300px; height:100px; margin:10px; background:#ddd;}
#a, #b {position:absolute; width:100px; height:300px; }
#a {background:#c00;  z-index:100; }
#b {background:#0c0;  z-index:1; left:50px;}


 提示:您可以先修改部分代码再运行
这时候我们看,不论#a设为多大的值,他都无法超过#b,所以说z-index是无法冲破HTML的等级的,他必需是要同等级的状态下才可以发挥威力.那么如何解决这个问题呢?我可以反过来想,堂兄弟之间的顺序不能被重组,何不把父辈的等级做一次重组呢?所以我们把#box_1的CSS中加入一个z-index:100; 在#box_2的CSS中加入z-index:1;这样再看一下效果:
复制内容到剪贴板
代码:
#box_1, #box_2 {position:relative; width:300px; height:100px; margin:10px; background:#ddd;}
#box_1 {z-index:100;}
#box_2 {z-index:1;}
#a, #b {position:absolute; width:100px; height:300px; }
#a {background:#c00; }
#b {background:#0c0; left:50px;}


 提示:您可以先修改部分代码再运行
这是指定父级重组了层叠的顺序,如果要是没有办法一一指定父级的顺序重组,那就要看看上一篇的《position:relative/absolute无法冲破的等级》.但是也不是什么问题都能解决,但是看看也许能帮你想到更好的办法!

毅博客阅读处:http://andymao.com/andy/post/69.html

[ 本帖最后由 小毅 于 2007-3-7 14:08 编辑 ]
本帖最近评分记录
  • zhuyinhong 威望 +1 谢谢分享 2008-12-21 13:50
  • blank 威望 +3 精品文章 2007-3-7 15:41
谢谢对原文理解的补充!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!
看了这篇后,思想豁然开朗。^_^

TOP

认证您的手机,获得手机认证图标, 更多手机认证的好处
明白了,谢楼主的补充!
昨天看了一下前文.想了很久没睡着.没弄明白,看了这个后.终于理解了

TOP

关于楼主的定位观点的几点补充和纠正

首先,感谢小毅同志为大家提供这样一篇启人心智的技术探索。仔细阅读受益匪浅,优点和好话就不再说了,下面就几个技术观点与大家一起商榷:

第一,“ absolute:将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位。而其层叠通过z-index属性定义。此时对象不具有边距,但仍有补白和边框;”,该话有待商榷。根据CSS布局模型,以及实践检验,对于绝对定位的元素来说,边距是有效的,我们不妨看看一个示例。
没有定义边距(margin)

 提示:您可以先修改部分代码再运行
定义边距(margin:100px;):

 提示:您可以先修改部分代码再运行
第二,“relative:对象不可层叠”,此话不是很准确,实际上相对定位也同样能够层叠。例如:

 提示:您可以先修改部分代码再运行
如果认识片面或者说话不准确的,还各位补充和纠正。谢谢

[ 本帖最后由 zhuyinhong 于 2008-12-21 13:46 编辑 ]
推荐CSS新书:《精通CSS网页布局》

TOP

第二,“relative:对象不可层叠”,此话不是很准确,实际上相对定位也同样能够层叠。
我的认为是relative使对象可以偏移但还占据着原来的位置,而这些位置是无法层叠的

TOP

引用:
原帖由 skyoxu 于 2008-12-22 09:24 发表
第二,“relative:对象不可层叠”,此话不是很准确,实际上相对定位也同样能够层叠。
我的认为是relative使对象可以偏移但还占据着原来的位置,而这些位置是无法层叠的
这里有两个概念:
一个概念是元素本来的位置,另一个概念是元素现在的位置。相对定位保留原来位置不动,但是偏移后的元素是能够层叠的。
推荐CSS新书:《精通CSS网页布局》

TOP

研究的真透彻

TOP

真好.研究得很透彻啊.

TOP

我是FF3,为什么这个例子就给直接冲破了呢??
楼主的实例,后边那两个我运行后的显示时一样的……
到底是哪里出了问题呢??

TOP

ff3确实直接冲破了
IE里就没有
佛说:---

TOP