zoukankan      html  css  js  c++  java
  • CSS 的 zindex 属性

    元素的 z-index 属性规定了它的的层叠级别(stack level),这些级别确定了元素之间互相覆盖时的层叠顺序。但是 z-index 似乎没那么简单,这里总结一下。

    首先是层叠内容(stack context)的概念。层叠内容由下列这些元素形成(其中定位元素指 position 不为默认值 static 的元素):

    • 根元素 HTML
    • z-index 不为默认值 auto 的定位元素
    • opacity 小于默认值 1 的元素

    但其中要注意几个问题:(1)对于非定位(即 position 为 static)的元素,设置 z-index 无效;(2)在 IE8 之前,定位元素的默认 z-index 为 0;(3)在 IE9 之前,opacity 属性不被支持;(4)在 Mobile Webkit 和 Chrome 22+ 中,所有 position 为 fixed 的元素都形成一个层叠内容,无需设置 z-index(这使得在触摸设备中滚动网页更加快捷)。

    所有层叠内容按照包含关系组成一个层叠树,浏览器从根元素开始按照前序遍历的方式递归地绘制它们。对于一个层叠内容,浏览器按照下面的顺序绘制该元素(先绘制的内容在底层):

    • 该元素的背景和边框
    • z-index 为负数的子层叠内容
    • 非定位的块级后代元素
    • 非定位的浮动后代元素
    • 非定位的行内后代元素
    • z-index 为 auto 的定位后代元素和为 0 的子层叠内容
    • z-index 为正数的定位子层叠内容

    对于相同级别不同 z-index 的后代元素,按照 z-index 值从小到大绘制;对于相同级别且相同 z-index 的后代元素,按照在 DOM 树中使用前序遍历依次绘制。

    我们来看在下面的例子。第一种情形中,只有 A1 是层叠内容,各元素的层叠顺序从低到高依次为 A,B,B1,A1。在第二种情形中,有 A,A1,B 这三个层叠内容;但由于绘制时是根据层叠内容递归的,虽然 A1 的 z-index 最大,层叠顺序却是 A,A1,B,B1。第二种情形说明了,如果父元素是一个层叠内容,它的后代元素能否覆盖父元素外部的元素,实际上由父元素决定,而不由后代元素决定。

    <!DOCTYPE html>
    <html>
    <head>  
    <style type='text/css'>
    .A, .B {
         80px;
        height: 80px;
    }
    .A1, .B1 {
         50px;
        height: 50px;
    }
    .A {
        background: gray;
    }
    .A1 {
        position: relative;
        z-index: 4;
        background: blue;
        left: 60px;
    }
    .B {
        background: red;
        margin: -20px 0 0 20px;
    }
    .B1 {
        position: relative;
        background: green;
        left: 20px;
        top: -40px;
    }
    #A {
        position: relative;
        z-index: 1;
    }
    #B {
        position: relative;
        z-index: 2;
    }
    </style>
    </head>
    <body>
    <div class="A">A
        <div class="A1">A1</div>
    </div>
    <div class="B">B
        <div class="B1">B1</div>
    </div>
    <div id="A" class="A">A
        <div class="A1">A1</div>
    </div>
    <div id="B" class="B">B
        <div class="B1">B1</div>
    </div>
    </body>
    </html>
    

    参考资料:

    [1] Specifying the stack level: the 'z-index' property
    [2] Appendix E. Elaborate description of Stacking Contexts
    [3] z-index下的一些知识
    [4] CSS z-index 属性的使用方法和层级树的概念
    [5] Understanding CSS z-index - MDN 
    [6] Understanding z-index
    [7] Stacking Changes Coming to position:fixed elements

    [YAML] Updated: 2013-11-08 20:20:00

  • 相关阅读:
    ssh:connect to host xxx port 22: Connection refused---------you don't have permission to acccess the requested location--------remote host identification has changed
    YOLOV3算法笔记
    jQuery元素查找方法
    jquery获取元素方式
    jQuery常用事件
    Jquery常用方法
    JavaScript数组操作
    jQuery中.bind() .live() .delegate() .on()的区别
    CSS初始化代码
    jQuery判断浏览器
  • 原文地址:https://www.cnblogs.com/zoho/p/2551955.html
Copyright © 2011-2022 走看看