css深入浅出:03_堆叠上下文

  • 1 . 什么是堆叠顺序?
  • 2 . 什么是堆叠上下文?

堆叠顺序:
  • background
  • border
  • 块级
  • 浮动
  • 内联
  • z-index: 0
  • z-index: +

判断一个人是否了解堆叠上下文的概念时,我想到了下面的这道题

初识堆叠上下文.png

看上面的图思考下面的这个问题:
border和background之间的关系是什么?
A:在同一面上,相平齐
B:border更加靠近用户
C:background更加靠近用户

为了验证上面的猜想,我引入0.5透明度border的现象来实现最终效果


显然可以看出:border更加靠近用户。
由此我们可以想到DIV它并不是一个平面的物体,也是有层次的概念。

通过平面和侧面的图也可以看出效果

image

同样,为了验证在DIV中写入文字验证最终效果:
image

侧面实际呈现是:
image

接着我在div的子元素引入的child来验证堆叠效果:
image

最终的结果是div的元素效果是盖不住文字(内联元素)效果。也就是说内联元素离用户更加接近。
image

最后我想到了一个同级化的问题,当我的子代出现内联元素和父级同时出现内联元素时,谁会更加接近用户的眼睛?

image
结果是非常明显的,谁最后写入谁就更加接近用户的眼睛(盖住前面元素)。
上面我们通过猜想验证的方式简单的介绍了border,background和块级元素,接下来我们再来验证一下浮动元素:

为了更直观的看出效果,我给内联元素‘你好’设置了text-indent: -10px;
效果如图:

image

很显然,内联元素的更加出现在上层,而浮动的元素天生优先于块级元素
image
截止至目前我们看到的所有效果:内联元素>浮动元素/浮动内联元素>块级元素>border>background
其中,有关于内联元素谁最后写入谁更加浮现在用户面前。

接下来我们接着比较绝对定位和相对定位元素的堆叠上下文的优先级谁更高?

image
可以看出经过绝对定位的元素优先级是高于浮动定位的元素的!

image

接下来比较z-index和position:relative之间的优先级:
image

通过对relative设置margin-top来清楚的可以看到relative的优先级是高于z-index的。
这时候我们得出一个结论:只有被定位的元素的优先级等级才会高于没有被定位的优先级的元素(position:static)

image

同样,通过上图我们可以得出,设置了relative的元素后出现的元素优先级一定高于先出现的元素。
image

而对relative设置了z-index(>=1)元素的优先级则高于没有设置z-index的relative的元素。
在考虑position:absolute与relative做对比时,同样也是只考虑z-index的影响:
image

上图说明对relative与absolute做比较时,谁后出现谁的优先级就更高。可以把absolute和relative当作同级来看待,但是如果对其中一个元素设置了z-index就会可以看出通过设置absolute/relative的元素优先级都会高于没有设置z-index的元素。

注:如果父元素z-index:0 子元素设置z-index:-1则子元素则会显示出来

结论.png

所以说,正如自然界很多物质一样。我们无法解释它的原理,但是可以通过现象来判断它的属性。如果这么说起来你听的有点麻烦,那么我问你:"请问:什么是桌子?" 我想你可能说:上面是个平板下面有四根腿撑着的木头叫做桌子.那么接着反问你:板凳算不算是桌子?如果算,为什么不叫板凳是桌子?如果不算,桌子不也是四根腿,一面平板吗!所以究其本质我们可以说:用来吃饭的载体我们可以判断它就是桌子。

同样的道理我们可以引申到堆叠上下文,我们只知道一些属性会触发上下文,但是并不知道堆叠上下文是什么。
所以触发堆叠上下文的内容有以下:

  • 根元素(HTML)
  • z-index值不为”auto“的绝对定位/相对定位
  • 一个 z-index 值不为 "auto"的 flex 项目 (flex item),即:父元素 display: flex|inline-flex
  • opacity 属性值小于 1 的元素(参考 the specification for opacity)
  • transform 属性值不为 "no ne"的元素
  • mix-blend-mode 属性值不为 "normal"的元素
  • filter值不为“none”的元素
  • perspective值不为“none”的元素
  • isolation 属性被设置为 "isolate"的元素
  • position: fixed
  • 在 will-change 中指定了任意 CSS 属性,即便你没有直接指定这些属性的值(参考 这篇文章)
  • -webkit-overflow-scrolling 属性被设置 "touch"的元素

image

通过上图我们可以看出,图中没有z-index。但是依然形成了堆叠上下文的效果。之所以引发这种效果的原因是满足了堆叠上下文的第一个条件根元素<html>
其次,如果父元素HTML是一个家长,是其内部都具备堆叠上下文的结构。但是如果给一个子元素单独设置堆叠上下文,而另一个子元素没有设置堆叠上下文,则没有设置堆叠上下文效果的内容将会被掩盖。
image

上图解释了如果两个子元素同时设置了堆叠上下文那么两个子元素则具备兄弟同时竞争,后出现的优先级较高的效果.
最后我们需要考虑到一种最特殊的情况:如果给最高级元素设置z-index:-1则后代元素就会显示出来,这是因为此时的层叠上下文从总体来看是一个整体,所以后代元素会显示出来,而不是被子代或者孙子代掩盖住。

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,722评论 1 92
  • 1. 堆叠顺序 堆叠顺序(stacking order):HTML 内元素发生层叠的时候的特定垂直顺序,即元素在用...
    饥人谷_风争阅读 3,307评论 0 9
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,136评论 0 1
  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    程序员poetry阅读 16,508评论 32 459
  • 这几天沸沸扬扬都在传阿里高管出轨的事,是同一个小区的邻居,孩子还跟我们家小朋友一个幼儿园,在各种群有交集,也在朋友...
    kimi妈妈阅读 225评论 0 0