inline-block
,无 position
定位(static除外)的子元素" >正常流式布局,非 inline-block
,无 position
定位(static除外)的子元素
Detailed introduction to CSS stacking order and stack context
Solving problems does not consider compatibility. The questions are wild and unconstrained. Just say whatever comes to mind. If there are CSS attributes that you feel are unfamiliar in the problem solving, go and learn about it quickly. Bar.
Keep updating, keep updating, keep updating, say important things three times.
3. How much do you know about stacking level and stacking context?
<a href="http://www.php.cn/wiki/903.html" target="_blank">z-index</a>
It seems very simple. The level of z-index
determines the stacking priority, in fact, if you go deep into it, you will find that there is something inside.
Look at the following question, define two p
A and B, to be included under the same parent p
tag. The HTML structure is as follows:
<p> </p><p>#pA display:inline-block</p> <p> #pB float:left</p>
Their CSS
is defined as follows:
.container{ position:relative; background:#ddd; } .container > p{ width:200px; height:200px; } .float{ float:left; background-color:deeppink; } .inline-block{ display:inline-block; background-color:yellowgreen; margin-left:-100px; }
roughly described, it means having a common The two p's of the parent container overlap. Is display:inline-block
stacked on top, or float:left
stacked on top?
Note that the order of the DOM here is to generate display:inline-block
first, and then float:left
. Of course, you can also reverse the order of the two DOMs as follows:
<p> </p><p> #pB float:left</p> <p>#pA display:inline-block</p>
You will find that no matter the order, it is always display:inline-block
p
Stacked on top.
This actually involves the so-called stacking level. There is a picture that can explain it well:
Using the logic of the above picture, the above problem can be easily solved. inline-blcok
’s stacking level
is compared to float
should be high, so no matter the order of DOM, it will be stacked on top.
However, the above illustration is somewhat inaccurate. According to W3 official statement, the accurate 7 layers are:
the background and borders of the element forming the stacking context.
the child stacking contexts with negative stack levels (most negative first).
the in-flow, non-inline-level, non-positioned descendants.
##the non-positioned floats.
the in-flow, inline-level, non-positioned descendants, including inline tables and inline blocks.
the child stacking contexts with stack level 0 and the positioned descendants with stack level 0.
the child stacking contexts with positive stack levels (least positive first).
A little translation:
形成堆叠上下文环境的元素的背景与边框
拥有负
z-index
的子堆叠上下文元素 (负的越高越堆叠层级越低)正常流式布局,非
inline-block
,无position
定位(static除外)的子元素无
position
定位(static除外)的 float 浮动元素正常流式布局,
inline-block
元素,无position
定位(static除外)的子元素(包括 display:table 和 display:inline )拥有
z-index:0
的子堆叠上下文元素拥有正
z-index:
的子堆叠上下文元素(正的越低越堆叠层级越低)
所以我们的两个 p
的比较是基于上面所列出来的 4 和 5 。5 的 stacking level
更高,所以叠得更高。
不过!不过!不过!重点来了,请注意,上面的比较是基于两个 p
都没有形成 堆叠上下文
这个为基础的。下面我们修改一下题目,给两个 p
,增加一个 opacity
:
.container{ position:relative; background:#ddd; } .container > p{ width:200px; height:200px; opacity:0.9; // 注意这里,增加一个 opacity } .float{ float:left; background-color:deeppink; } .inline-block{ display:inline-block; background-color:yellowgreen; margin-left:-100px; }
Demo戳我。
会看到,inline-block
的 p
不再一定叠在 float
的 p
之上,而是和 HTML 代码中 DOM 的堆放顺序有关,后添加的 p 会 叠在先添加的 p 之上。
这里的关键点在于,添加的 opacity:0.9
这个让两个 p 都生成了 stacking context(堆叠上下文)
的概念。此时,要对两者进行层叠排列,就需要 z-index ,z-index 越高的层叠层级越高。
堆叠上下文是HTML元素的三维概念,这些HTML元素在一条假想的相对于面向(电脑屏幕的)视窗或者网页的用户的 z 轴上延伸,HTML 元素依据其自身属性按照优先级顺序占用层叠上下文的空间。
那么,如何触发一个元素形成 堆叠上下文
?方法如下,摘自 MDN:
根元素 (HTML),
z-index 值不为 "auto"的 绝对/相对定位,
一个 z-index 值不为 "auto"的 flex 项目 (flex item),即:父元素 display: flex|inline-flex,
opacity 属性值小于 1 的元素(参考 the specification for opacity),
transform 属性值不为 "none"的元素,
mix-blend-mode 属性值不为 "normal"的元素,
Elements whose filter value is not "none",
elements whose perspective value is not "none",
The element whose isolation attribute is set to "isolate",
position: fixed
Specify any CSS properties in will-change, even if you do not specify the value of these properties directly
-
-webkit-overflow-Scrolling attribute is set to "touch" elements
So, above we give two The purpose of adding the opacity attribute is to form a stacking context. In other words, adding opacity and replacing the attributes listed above can achieve the same effect.
In a cascading context, its child elements are also cascaded according to the rules explained above. It is particularly worth mentioning that the z-index value of its child elements is only meaningful in the context of the parent cascading. This means that the parent element's z-index
is lower than another sibling element of the parent element, and it is useless no matter how high the child element's z-index
is.
Understanding the above stacking-level
and stacking-context
is the key to understanding the stacking order of CSS.
The above is the detailed content of Detailed introduction to CSS stacking order and stack context. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

It's out! Congrats to the Vue team for getting it done, I know it was a massive effort and a long time coming. All new docs, as well.

With the recent climb of Bitcoin’s price over 20k $USD, and to it recently breaking 30k, I thought it’s worth taking a deep dive back into creating Ethereum

I had someone write in with this very legit question. Lea just blogged about how you can get valid CSS properties themselves from the browser. That's like this.

The other day, I spotted this particularly lovely bit from Corey Ginnivan’s website where a collection of cards stack on top of one another as you scroll.

I'd say "website" fits better than "mobile app" but I like this framing from Max Lynch:

There are a number of these desktop apps where the goal is showing your site at different dimensions all at the same time. So you can, for example, be writing

If we need to show documentation to the user directly in the WordPress editor, what is the best way to do it?

Questions about purple slash areas in Flex layouts When using Flex layouts, you may encounter some confusing phenomena, such as in the developer tools (d...
