z-index影响下的层级布局

定义:


z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。(仅在节点的 position 属性为 relative, absolute 或者 fixed 时生效。

该属性设置一个定位元素沿 z 轴的位置,z 轴定义为垂直延伸到显示区的轴。如果为正数,则离用户更近,为负数则表示离用户更远。

默认值: auto(各种主流浏览器)、0(IE6/7、IE8的混杂模式下)
继承性: no
版本: CSS2
JavaScript 语法: object.style.zIndex="1"


可选值:

描述
auto 默认。堆叠顺序与父元素相等。
number 设置元素的堆叠顺序。
inherit 规定应该从父元素继承 z-index 属性的值。



规则:


基本规则:


1. 不设置position 属性, 但为节点加上 z-index 属性. 发现 z-index 对节点没起作用。
2. 设置了position属性(值不为static),对应的节点将脱离文本流,漂浮(覆盖)在其他节点上边。所以设置position属性能提升节点的显示等级。
3.如果所有节点都定义了相同的position,例如absolute。但没有设置z-index属性,节点将按出现的顺序依次覆盖前面节点重叠的部分,遵循“后来居上”原则。
4. z-index 为 0 的节点与没有定义 z-index 在同一层级内没有高低之分; 但 z-index 大于等于 1 的节点会遮盖没有定义 z-index 的节点; z-index 的值为负数的节点将被没有定义 z-index 的节点覆盖。
5. 子元素永远覆盖在父元素的上方。
<head>
<style type="text/css">
*{
	margin:0;
	padding:0;
}
body{background-color:#000;}
.b{
	width:80px;
	height:70px;
	background:blue;
	position:absolute;	
}
.lt10{
	left:10px;
	top:10px;
}
.a{
	width:80px;
	height:70px;
	background:red;	
}
.c{
	width:80px;
	height:70px;
	background:yellow;	
}
</style>
</head>
<body>
<div class="a">A</div>
<div class="b lt10">B</div>
<div class="c">C</div>
</body>


从父规则:


若是父节点都设置了一样的z-index值,则无论子节点设置何值,都只依照父节点的z-index值,根据上边所述的“基本规则”,完成节点之间的叠放。

<head>
<style type="text/css">
*{
	margin:0;
	padding:0;
}
body{background-color:#000;}
.b{
	width:160px;
	height:140px;
	background:blue;
	position:absolute;
	z-index:1;
	
}
.c{
	width:160px;
	height:140px;
	background:yellow;
	position:absolute;
	z-index:1;
}
.a{
	width:160px;
	height:140px;
	background:red;position:absolute;
	z-index:1;
}
.lt30{
	left:30px;
	top:30px;
}
.lt60{
	left:60px;
	top:60px;
}
.lt15{
	left:15px;
	top:15px;
}
.a1{
	width:160px;
	height:140px;
	background:pink;
	position:absolute;
	z-index:3;
}
.b1{
	width:160px;
	height:140px;
	background:gray;
	position:absolute;
	z-index:4;
}
</style>
</head>
<body>
<div class="a">A<div class="a1 lt15">A1</div></div>
<div class="b lt30">B<div class="b1 lt15">B1</div></div>
<div class="c lt60">C</div>
</body>


如图所示,A1、B1设置的值比C高,但是依旧被作为跟A、B同级的C节点所覆盖。



若在上边的代码加点小修改,比如删掉节点A的position属性,或者position设置为static,就会产生不同变化。

                                 

删去position属性,A1由于z-index值最高覆盖了其他节点               删去A1节点,证明A的z-index值失效从而被其他节点覆盖


原因:因为absolute的绝对定位是以设置了relative或者absolute的父辈元素为焦点的,用上述例子来说,A1是放在A中的div,但是A的position已经删除,所以A1、B、C都是根据屏幕的左上角作为定位的焦点,在定位的层级元素上属于同一层,因为z-index高于B、C,所以也就覆盖了其他节点。


默认值规则:


IE6、7以及IE8的混杂模式下,若只是设置了position属性,而未设置z-index属性的话,z-index的默认值是0,表示对应的节点将要加入到布局定位的层级元素的比较中去。
在其他浏览器中的默认值为auto,不参与到层级元素的比较,其设置了z-index的子节点直接跳过“从父规则”加入到层级元素的比较。
直接将上边第一段代码中A、B、C三个节点的z-index属性删除,效果图如下:
                                
firefox下z-index的默认值为auto                                   IE 6下z-index的默认值为0  





注:以上只是讨论了div元素中设置positon以及z-index属性的影响,还有一些特殊的元素例如iframe,select比较复杂的问题以后再更新

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值