层叠上下文是css中的一个三维概念,拥有层叠上下文的元素在z轴上比普通元素要高,而且其内部的所有内容是自成体系的,其后代都是在它的层叠顺序中

哪些元素拥有层叠上下文

1、根元素,也就是html默认拥有“根层叠上下文”

2、定位元素(position: absolute/relative/fixed)的z-index不为auto,而是有具体数值时

3、拥有某些css3属性的元素

  • z-index不为auto的 flex item
  • opacity的值小于1的元素
  • transform不为none
  • filter不为none
  • isolation的值是isolate
  • mix-blend-mode不为normal
  • 设置了will-change
  • 元素的-webkit-overflow-scrolling设为touch.

举个例子,如一个opacity:0.6的元素是层叠上下文,在一个普通元素的上面

<div style="background: blue; opacity: 0.6;">div1</div>
<div style="background: red; margin-top: -80px">div2</div>

上面只是一个比较简单的规则,在实际中有各种元素,那在css中不同元素的层叠顺序是怎样的呢?

css中元素的层叠顺序

css中的元素的层叠顺序,自底向上,遵循如下排列规则:

  1. border/background等装饰在最下面
  2. 接着是z-index为负的元素
  3. block块状水平盒子元素
  4. float盒子元素
  5. inline、block-inline元素
  6. z-index为auto/0、不依赖z-index的层叠上下文元素
  7. z-index为正的元素

这个规则不用死记硬背,结合每种元素的作用便很好理解&记忆了

  • border和background通常用作装饰,所以优先级最低,接着是z-index为负的元素
  • block盒子和float通过用来定位布局,而inline通常是重要的文本内容,所以有消极比block和float高
  • 接着就是z-index为0或auto的元素或没有z-index的普通层叠上下文元素了
  • 最高的就是z-index为正的元素了

按照上面的层叠顺序,如有冲突的话,遵循这两个规则即可:

1、z-index大者居上

2、后来者居上

z-index

z-index定义了元素在z轴上的顺序,值越大,元素的层级越高越靠上。但需要注意的是:z-index只有在定位元素和flex item上才生效,在其他元素是即便设置了也没有用。

如下,两个层叠上下文,第一个的z-index大,但第一个还是在下面:

<div style="background: blue;transform: translateX(50px);z-index: 5">div1</div>
<div style="background: red;transform: translateY(-80px);z-index: 1">div2</div>

而且元素一旦拥有定位,其z-index就会生效,auto被视为0级别(但实际上不是0,只是视为,此时元素还不是层叠上下文),flex item元素同理。

所以即便一个元素只设置了定位,还不是层叠上下文,但是此时该元素的z-index已经被视为0了,所以该元素会在普通元素的上面。

参考:

css 层叠上下文和层叠顺序的更多相关文章

  1. 深入理解CSS中的层叠上下文和层叠顺序(转)

    by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=5115 零.世间的道 ...

  2. 深入理解CSS中的层叠上下文和层叠顺序

    零.世间的道理都是想通的 在这个世界上,凡事都有个先后顺序,凡物都有个论资排辈.比方说食堂排队打饭,对吧,讲求先到先得,总不可能一拥而上.再比如说话语权,老婆的话永远是对的,领导的话永远是对的. 在C ...

  3. 关于css的层叠上下文和层叠顺序问题

    关于css的层叠上下文和层叠样式问题 最近在项目中遇到了一个让我欲仙欲死的问题,我给项目中的图片设置了一个淡入效果,几opacity变化,但当我在它的上面有一个定位元素时,动画结束后,定位元素居然被遮 ...

  4. [转]深入理解CSS中的层叠上下文和层叠顺序

    http://www.zhangxinxu.com/wordpress/2016/01/understand-css-stacking-context-order-z-index/ 零.世间的道理都是 ...

  5. CSS中的层叠上下文和层叠顺序

    一.什么是层叠上下文和层叠水平 层叠上下文和层叠水平有一点儿抽象.我们可以吧层叠上下问想象成一张桌子,如果有另一个桌子在他旁边,则代表了另一个层叠上下文. Stacking context 1由文件根 ...

  6. css层叠上下文和层叠顺序

    普通元素的层叠水平优先由层叠上下文决定,因此,层叠水平的比较只有在当前层叠上下文元素中才有意义. 诸位千万不要把层叠水平和CSS的z-index属性混为一谈.没错,某些情况下z-index确实可以影响 ...

  7. css之层叠上下文和层叠顺序

    大家在写网页的时候会不会经常遇到莫名奇妙的样式问题,比如谁覆盖了谁.也找不出原因,为什么z-index高的却没有覆盖掉z-index低的元素呢? 带着这些疑问.我做了个小实验.代码如下: <st ...

  8. 彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index

    前言 最近,在项目中遇到一个关于CSS中元素z-index属性的问题,具体问题不太好描述,总结起来就是当给元素和父元素色设置position属性和z-index相关属性后,页面上渲染的元素层级结果和我 ...

  9. 20190409-层叠の层叠上下文、层叠水平、层叠顺序、z-index、伪元素层叠

    写在前面乱七八糟的前言: 此"八卦"的源于,在写下图这个圆滚滚的导航布局时,使用元素及其伪元素加上绝对定位完成,但遇到:before或:after伪元素与元素的层叠顺序,就是伪元素 ...

随机推荐

  1. Django中数据库操作相关的错误

    问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...

  2. harbor搭建及使用

    harbor搭建及使用   1 系统及软件版本 1.1 系统版本 # uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP ...

  3. nginx 重定向到系统维护页面

    上周末兄弟项目准备扩展服务器以便提供更好的服务,兄弟项目有一些功能是实时提供到我这边的,需要我这边暂时把对应系统功能屏蔽,因为使用nginx,所以可以直接配置nginx重定向到固定系统维护页面. ng ...

  4. 【NX二次开发】多功能对话框UF_UI_message_dialog

    多功能对话框 1 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 2 { 3 UF_initialize(); ...

  5. 【MySQL】常用的命令

    连接数据库 mysql -u root -pmysql -u root -h 192.168.16.140 -p 创建数据库 create database dbstudents; 查看所有数据库 s ...

  6. SqlServer的order by问题

    如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中.这是我昨天写sql的时候遇到的,主要是因为最近在做一个数据库的迁移与更换,原来MySQL的数据库全 ...

  7. zookeeper集群及kafka集群搭建

    1.zookeeper集群搭建 1.1 上传安装包 官网推荐至少3个节点,我们这里也用三个节点192.169.2.18  192.169.1.82  192.169.1.95 准备好安装包,zooke ...

  8. .NetCore使用Docker安装ElasticSearch、Kibana 记录日志

    前言 最近园子里看到一篇<.Net Core with 微服务 - Elastic APM> 的文章(主要用于对接口的调用链.性能进行监控),非常实用,这里讲解.NetCore将日志写入E ...

  9. 从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程

    从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程 概述 本文将以ReentrantLock为例来讲解AbstractQueuedSynchron ...

  10. 2、linux防火墙的使用(firewalld)

    2.1.说明: 1.在 RHEL7 里有几种防火墙共存,firewalld.iptables,默认是使用 firewalld 来管理 netfilter 子系统,不过底层调用的命令仍然是 iptabl ...