为什么css中设置z-index不起作用?(附原因解释和解决办法)

之所以转贴这篇文章,是很多朋友比较疑惑z-index这个样式。其实只要先知道以下2点就可以很容易的理解了——

  • 要想给元素设置z-index样式,必须先让它变成定位元素,再通俗一点说,就是要给元素设置一个postion:relative(或者 absolute或者fixed)样式。
  • 不要给想控制“上、下”的元素设置z-index,而是对他们的父容器设置z-index样式。这一点详细解释和原因在《精通html和css设计模式》一书中较为详细的解释。

下面是我从网络找到的一篇文章,希望对你有所帮助。

非原创,来源网络。感谢原作者奉献如此精彩文章。原文地址:http://bbs.blueidea.com/thread-2872952-1-1.html


《元素层叠级别(stack level)及z-index剖析》

声明


定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。
平台:win/IE win/FF


z-index:

用来确定定位元素在垂直于显示屏方向(以下称为Z轴)上的层叠顺序

    值:      auto | 整数 | inherit
    默认:      auto
    适用于:  定位元素
    继承性:  no

理解stacking context

每个box都归属于一个stacking context,它是元素在z轴方向上定位的参考。根元素形成 root stacking context,其他stacking context由定位元素设置z-index为非auto时产生。如#div1{position:relative;z-index:0;}即可使 id=div1的元素产生stacking context。stacking context和 containing block 并没有必然联系。

理解stack level

在一个stacking context中的每个box,都有一个stack level(即层叠级别,以下统一用stack level),它决定着在同一stacking context中每个box在z轴上的显示顺序。同一stacking context中,stack level值大的显示在上,stack level值小的显示在下,同一stack level的遵循后来居上的原则(back-to-front )。不同stacking context中, 元素显示顺序以父级的stacking context的stack level来决定显示的先后情况。 于自身stack level无关。注意stack level和z-index并不是统一概念。(将在后文慢慢理解)

stack level规则

每个stacking context中可包含块级(block)元素、内联(行内inline)元素,还有设置float属性的元素、定位元素等等他们在同一父级 stacking context中的显示顺序是怎样的?即stack level是怎样的呢?比如一个块级元素和内联元素发生层叠的话谁会在上面呢?是不是谁在后面谁就在上面呢?

根据w3c关于 stack level的介绍可以得出以下stack level规则

每个stacking context都包括以下stack level (后来居上):

    1.父级stacking context的背景、边界
    2.z-index值为负值的定位元素(值越小越在下)
    3.文本流中非定位的、block块级子元素
    4.文本流中非定位的、float浮动子元素
    5.仿佛能产生stacking context的inline元素
          否则,inline元素的stack level将在block元素之前。
    6.z-index:auto/0的定位元素
    7.z-index值为正的定位元素(值越大越在上)

以上stack level在浏览器执行情况:
firefox3.0下测试完全吻合,firefox2.0下稍有不同即:“z-index值为负值的定位元素”在“父级stacking context的背景、边界”之前。

ie6.0和7.0中:inline元素的stack level位于block元素之前,且“文本流中非定位的、float浮动子元素”(以下简称浮动元素)和“文本流中非定位的、block块级子元素”(以下简称block元素)处于同一级。

转载于:https://www.cnblogs.com/reommmm/articles/1417895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值