当前位置: 首页 > 图文教程 > 网页制作 > CSS样式表 > CSS教程:定位属性在元素中的层级关系

CSS样式表
CSS网页设计 IE8和IE7共存
CSS2 打印属性让打印HTML文档不出问题
制作网页中设计段落缩进的方法
CSS border 属性使用说明
CSS border-style 属性使用方法
CSS border-color 属性使用方法
CSS border-width 属性使用教程
CSS padding属性定义边内补白
CSS margin 属性定义边外补白
网页布局教程 掌握CSS网页布局属性
css 背景样式属性说明
span margin 设置生效
html 滚动条在IE6和IE7中兼容性问题
IE6 两个div有间隙的问题(IE 3px bug)
CSS 数字和字母将容器撑大问题解决
换个角度看页面重构中的语义化
DIY属于个人开发使用的CSS Reset
CSS 空格引起网页布局间距问题
CSS 网页制作时遇到问题的快速参考技巧
css li 去掉点的样式写法

CSS样式表 中的 CSS教程:定位属性在元素中的层级关系


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-03   浏览: 187 ::
收藏到网摘: n/a

在现在项目产品的前端开发中随着交互的增多,再加上html结构的语义化要求,元素的层级关系越发重要了,经常页面会出现页面某些元素会被其他元素遮盖,很多时候我们通过position:relative或position:absolute,及z-index值来改变元素的层级,但是z-index过多或其值如果没有充分考虑的话,元素的层级关系会非常复杂。我这里只总结了position:relative和position:absolute在兄弟元素中的一些层级关系,有遗漏或者不足的地方,欢迎大家留言补充和斧正。

注意:这里把position : static这个默认的定位属性值同意认为没有定位,position:relative、position:absolute和position:fixed都认为是有定位 。position:fixed在ie6下未支持,所以本位不做实例,在其他浏览器下同样适用。

一、在没有定位属性的兄弟元素中,一般在html结构下面的元素层级高于结构上面的元素。

可能表达不清楚,看一段代码吧:

<div style="width:400px; height:200px; background:#000; color:#FFF">结构上面的元素:width:400px; height:200px;<br />
这里黑色的可见高度是150px,还有50px被红色的元素遮罩了(margin-top:-50px)。</div>
<div style="width:500px; height:100px;background:red; margin-top:-50px;color:#FFF">结构下面的元素:width:500px; height:100px;</div>

如图显示:

2009-12-21_192737

=====================分割线===========================

在了看一个类似的例子:

<div style="width:400px; height:200px; background:#000; color:#FFF;margin-bottom:-110px;">结构上面的元素:width:400px; height:200px;<br />
这里黑色的可见高度加起来是100px,还有100px被红色的元素遮罩了。</div>
<div style="width:500px; height:100px;background:red;color:#FFF">结构下面的元素:width:500px; height:100px;</div>

如图显示:

2009-12-21_193043

这两个例子充分说明了一般情况下:没有定位的兄弟元素中,在html结构下面的元素层级高于结构上面的元素。

二,兄弟元素中有定位属性的元素层级高于没有这两个属性的其他兄弟元素。

看一个在结构上面元素上加position:absolute例子,这个可能大家很常用:

<div style="width:400px; height:200px; background:#000; color:#FFF; position:absolute">结构上面的元素:width:400px; height:200px;<br />
这里黑色的可见高度加起来是200px,红色的元素被遮罩了。</div>
<div style="width:500px; height:100px;background:red; color:#FFF">结构下面的元素:width:500px; height:100px;</div>

如图显示:

2009-12-21_194510

=====================分割线===========================

看一个在结构上面元素上加position:relative例子,这个可以用来做很多事情,特别是选项效果,还有元素不想脱离文档流的时候:

<div style="width:400px; height:200px; background:#000; color:#FFF; position:relative">结构上面的元素:width:400px; height:200px;<br />
这里黑色的可见高度加起来是200px,红色的元素的50高度被遮罩了。</div>
<div style="width:500px; height:100px;background:red; margin-top:-50px; color:#FFF">结构下面的元素:width:500px; height:100px;</div>

如图显示:

2009-12-21_195551

三、兄弟元素中有position:relative和position:absolute定位属性的元素,结构下面的元素层级高于结构上面的元素,但是有z-index设置时,z-index值大者居上。

看一个在例子:

<div style="width:500px; height:140px; background:#000; position:relative; z-index:100"></div>
<div style="position:absolute;top:0; width:600px; height:120px;background:red; z-index:99"></div>

四、非兄弟元素,任意一者或其祖元素拥有动态定位时,同时各自向上寻找动态定位的祖元素,并分别从中拿出具备最高级别的祖元素(或其本身)进行比较。

1.子元素的z-index无论多大,父元素大者居上,如图:

05

2.父元素居下,子元素也可以居上,如图:

06

或者看这段代码:

<div style="width:800px; height:160px; background:#CDCDCD">
<div style="width:500px; height:140px; background:#000; position:relative; z-index:100">这个在最上层</div>
<div style="position:absolute;top:0; width:600px; height:120px;background:red; z-index:99"></div>
</div>
<div style="background:#00F;width:600px; height:130px; margin-top:-50px"></div>

3.结合以上两点,看个更加复杂的,如图:

07

有遗漏或者不足的地方,欢迎大家留言补充和斧正。