美文网首页
层叠上下文

层叠上下文

作者: 超级关 | 来源:发表于2019-01-05 17:56 被阅读0次

层叠顺序

说到层叠上下文要先引出一个层叠顺序的概念。CSS中所有的元素默认有以下的层叠顺序,如果是兄弟元素的话,默认后面的覆盖在前面的元素的上面。

  1. z-index: -
  2. background
  3. border
  4. 块级元素
  5. 浮动元素
  6. 内联元素
  7. z-index: 0
  8. z-index: +

什么是层叠上下文?

层叠上下文,又叫堆叠上下文,英文名:The stacking context
层叠上下文是HTML元素的三维概念,这些HTML元素在一条假想的相对于面向视窗或者网页的用户的z轴上延伸,HTML元素依据其自身属性按照优先级顺序占用层叠上下文的空间。
听起来很繁琐,那么如何去理解层叠上下文呢?

先看个例子

在html中,有两个块元素dad1dad2,里面分别对应有自己的子元素son1son2。给所有的元素分别设定不同的background-color以示区分。

1-1.png

然后将dad2中的子元素向上平移直到与dad1中的子元素重合,我们会发现,son1覆盖在了son2的上面。这是因为我们给son1设定了z-index使他高于son2,一切都很正常。那么是否这个son1永远都高于son2呢?

紧接着,我们将两个父元素都加上z-index为1,那么理论上是不影响刚才的结果变化的,那么神奇的事情发生了...

1-2.png

之前权重较低的son2突然覆盖在了上面,这是怎么回事呢?

在CSS中,根据正常的层叠顺序,由于有z-index:2的存在,son2在页面中的层叠顺序应该高于son1,但这是相对一个相同的层叠上下文下是生效的。由于在没有给父元素都加上z-index之前,默认的层叠上下文是整个html 下,页面中的所有元素都在这层叠上下文下,遵守着层叠顺序。当我们给父元素都加上z-index之后,原来的dad1dad2分别生成了两个新的层叠上下文,其中dad2的层叠顺序是高于dad1。那么其中的子元素因为隶属于不同的层叠上下文,要先比较父元素的层叠顺序。就好比在两个不同的部门下,如果部门的等级高,那么这个部门所有人的等级都要高,哪怕是部门中最低的那个,都要高于低级部门的任何一个人。所以son2会出现在上方,权重比son2要高。

满足一下任意一个条件,会形成一个层叠上下文:
  • 根元素 (HTML),
  • z-index 值不为 "auto"的 绝对/相对定位,
  • 一个 z-index值不为 auto的 flex 项目 (flex item)
  • opacity 属性值小于 1 的元素
  • transform 属性值不为 none的元素,
  • mix-blend-mode 属性值不为 normal的元素,
  • filter 值不为none的元素,
  • perspective 值不为none的元素,
  • isolation 属性被设置为 isolate的元素,
  • position: fixed
  • will-change 中指定了任意 CSS 属性,即便你没有直接指定这些属性的值
  • -webkit-overflow-scrolling 属性被设置 touch的元素

总结一下,在CSS中,如果没有生成新的层叠上下文,则按照css的默认层叠顺序进行排序。而如果有了新的层叠上下文,则要根据元素所在层叠上下文的权重来排序,层叠上下文高的内部元素,权重都要高于层叠上下文低的内部元素。只要记熟了层叠顺序,理解了层叠上下文的含义,多加练习就可以掌握了。

相关文章

  • z-index和层叠上下文

    一、 层叠上下文、层叠等级和层叠顺序 层叠上下文(stacking context)层叠上下文是HTML中一个三维...

  • 深入z-index

    涉及“层叠顺序(stacking order)”,“层叠上下文(stacking context)”,“层叠水平(...

  • z-index part3

    不支持z-index的层叠上下文元素的层叠顺序均是z-index: auto级别 依赖z-index的层叠上下文元...

  • 层叠上下文

    层叠准则: 谁大谁上: 当有识别的z-index值,层叠大的在上 后来居上: 当层叠水平一致,层叠顺序相同的时候,...

  • 层叠上下文

    1.概念 stacking context网页中的元素级别不同,有z轴 2.层叠水平 普通元素的层叠水平优先由层叠...

  • 层叠上下文

    http://www.zhangxinxu.com/wordpress/2016/01/understand-cs...

  • 层叠上下文

    z-index:只对定位元素及 flex 元素的子元素有效 父元素的opacity值不为1,子元素即使设置了负的z...

  • 层叠上下文

    层叠顺序 内联元素和块级元素的层叠顺序 box1 边框的颜色比 box2 的颜色深,说明边框在背景的上层;box2...

  • 层叠上下文

    层叠顺序 说到层叠上下文要先引出一个层叠顺序的概念。CSS中所有的元素默认有以下的层叠顺序,如果是兄弟元素的话,默...

  • 层叠上下文

    什么是层叠上下文? 层叠上下文是HTML中的一个三维概念。可以简单的理解为一个元素如果具备某些特定CSS属性就会成...

网友评论

      本文标题:层叠上下文

      本文链接:https://www.haomeiwen.com/subject/gmvkrqtx.html