• 层叠上下文


    css层叠

    层叠上下文

    层叠上下文(stacking context),是HTML中一个三维的概念。每个盒模型的位置是三维的,分别是平面画布上的X轴,Y轴以及表示层叠的Z轴。通常在元素发生堆叠时,就能看到某个元素可能覆盖了另一个元素或者被另一个元素覆盖。
    层叠上下文可以理解成,在发生堆叠的时候,当前元素和其子元素变成了一个整体,按照当前元素的层级堆叠。

    层叠顺序

    是指排列规则,如下:
    border < z-index负值 < block < float < inline < z-index为0或者auto < z-index正值
    即: 层叠上下文元素在子级元素下面, 自己元素根据不同属性来排列,相同属性则是后面的优于前面的。

    例子:

        <style>
            .item{
                  300px;
                padding-top: 10px;
            }
            .father{
                position: relative;
                background: rgb(255,255,0);
            }
            .block{
                background: rgb(255, 0, 0);
                 100px;
                height: 120px;
            }
            .float{
                float: left;
                background: rgb(0,255,255);
                 100px;
                height: 100px;
                margin-left: 50px;
            }
            .inline{
                margin-left: -100px;
                background: rgb(0,255,0);
            }
            .zIndex-1{
                position: absolute;
                 300px;
                height: 200px;
                background: rgb(255,0,0);
                left: 0;
                top: 0px;
                z-index: -1;
            }
            .zIndex0{
                position: absolute;
                 200px;
                height: 100px;
                background: rgb(0,255,0);
                left: 0;
                top: 100px;
                z-index: 0;
            }
            .zIndexAuto{
                position: absolute;
                 150px;
                height: 150px;
                background: rgb(255,0,255);
                left: 0;
                top: 50px;
                z-index: auto;
            }
            .zIndex1{
                position: absolute;
                 100px;
                height: 50px;
                background: rgb(0,255,255);
                left: 0;
                top: 150px;
                z-index: 1;
            }
        </style>
    
        <div class="item">
            验证:  inline > float > block > border
            <div class="father">
                <span class="inline">inline元素</span>
                <div class="float">float元素float元素float</div>
                <div class="block">块级元素</div>
            </div>
        </div>
        <div class="item">
            验证:  正 > 0 = auto > 负值 (但是 0 和 auto 会有所区别  0会新建层叠上下文)
            <div class="father">
                <div class="zIndex1">正z-index</div>
                <div class="zIndexAuto">z-index:auto</div>
                <div class="zIndex0">z-index:0</div>
                <div class="zIndex-1">负的z-index</div>
            </div>
        </div>
    

    展示规则

    1. 当某一元素是变成层叠上下文之后,其子级元素只会内部相互比较,
    2. 当某一元素是变成层叠上下文之后,该元素将被作为整体在父级层叠上下文中按顺序进行层叠。
    3. 层叠上下文可以包含在其他层叠上下文中。

    生成层叠上下文条件

    • 文档根元素();
    • position 值为 absolute(绝对定位)或 relative(相对定位)且 z-index 值不为 auto 的元素;
    • position 值为 fixed(固定定位)或 sticky(粘滞定位)的元素(沾滞定位适配所有移动设备上的浏览器,但老的桌面浏览器不支持);
    • flex (flexbox) 容器的子元素,且 z-index 值不为 auto;
    • grid (grid) 容器的子元素,且 z-index 值不为 auto;
    • opacity 属性值小于 1 的元素(参见 the specification for opacity);
    • mix-blend-mode 属性值不为 normal 的元素;
    • 以下任意属性值不为 none 的元素:
      • transform
      • filter
      • perspective
      • clip-path
    • mask / mask-image / mask-border
    • isolation 属性值为 isolate 的元素;
    • -webkit-overflow-scrolling 属性值为 touch 的元素;
    • will-change 值设定了任一属性而该属性在 non-initial 值时会创建层叠上下文的元素(参考这篇文章);
    • contain 属性值为 layout、paint 或包含它们其中之一的合成值(比如 contain: strict、contain: content)的元素。

    参考

    MDN

  • 相关阅读:
    java返回json数据日期为一串数字字符串 js 转义
    ==和equals以及hashcode
    【线程分析】
    【dubbo&zookeeper】
    线程安全实现方案
    IOC原理
    java锁
    java特殊运算符
    HashMap原理和TreeMap原理
    volatile与synchronized
  • 原文地址:https://www.cnblogs.com/cyrus-br/p/14031169.html
Copyright © 2020-2023  润新知