谈谈层叠上下文、层叠水平和层叠顺序

层叠上下文(stacking context)是一种三维概念,如果用户和电脑屏幕之间存在一条看不见的垂直线,假设一个元素含有层叠上下文的话,那么这个元素就会在这个垂直线上比其它元素“高人一等”。
层叠水平(stacking level)决定了同一个层叠上下文中元素在z轴上的显示顺序。所有的元素都有层叠水平,包括层叠上下文元素,普通元素的层叠水平优先由层叠上下文决定。注意不要把层叠水平和z-index属性混为一谈,z-index确实可以影响层叠水平,但是,只限于定位元素以及flex盒子的孩子元素;而层叠水平所有的元素都存在。
层叠顺序(stacking order)表示元素发生层叠时特定的垂直显示顺序。

层叠上下文的创建

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

层叠顺序

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

可能会发现上面给出的顺序是没有z-index为负的情况,这是因为z-index为负时,其层叠顺序不一定是固定的。后面我们会说的,现在我们就来一一验证这个顺序,毕竟理解永远比死记硬背要好的多。

1.background与border(针对单个元素本身而言)
层叠顺序1-1.png

层叠顺序1-2.png

我们可以明显的看出,红色边框的后面透着黑色,那么证明background是在border后面的。

2.内联元素
层叠顺序2-1.png

层叠顺序2-2.png

可以看出我们的内联元素是在border上面的。

3.块级元素
层叠顺序3-1.png
层叠顺序3-2.png

可以看出类名为child的块级元素并没有覆盖文字,证明块级元素的层叠顺序是在内联元素下面的。


层叠顺序3-3.png

层叠顺序3-4.png

这里我们发现,child的文字覆盖了parent的文字,说明在文档流中,如果是相同的元素或者文字,那么后出现就会盖住前面的。

4.浮动元素
层叠顺序4-1.png
层叠顺序4-2.png

可以看出,浮动元素是在块级元素上面的,但是我们发现浮动元素并没有盖住内联元素,说明浮动元素是出于内联元素之下,块级元素之上的。这里还有一个现象,就是浮动元素的文字也是在parent文字下面,这是因为,浮动元素本身就比内联元素低。

5.定位元素(z-index为0或者auto)
层叠顺序5-1.png
层叠顺序5-2.png

我们发现两个现象,一是定位元素是在浮动元素和内联元素的上面,而是相同的元素,后出现的元素会覆盖前面的元素。

6.定位元素(z-index大于0)
层叠顺序6-1.png
层叠顺序6-2.png

当我们改变前一个定位元素的z-index的值,使其大于后一个定位元素的值,那么我们发现前一个元素会覆盖后一个元素。

7.z-index为负

(1)当父元素没有被定位时:


层叠顺序7-1.png
层叠顺序7-2.png

z-index的值为负时,其元素还在background下面。

(2)当父元素被定位时:


层叠顺序7-3.png
层叠顺序7-4.png

z-index的值为负时,其元素在块级元素和border中间。

总结说明

1.在层叠上下文中,子元素也会发生层叠上下文,但是子元素的z-index的值只在其父元素内起作用。
2.在同一个层叠上下文中,层叠水平值大的那一个覆盖小的那一个。
3.当元素的层叠顺序和层叠水平一样时,后出现的元素会覆盖前面的元素。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350