【问题标题】:Which CSS properties create a stacking context?哪些 CSS 属性会创建堆叠上下文?
【发布时间】:2013-04-22 13:12:28
【问题描述】:

我正在研究 stacking contexts 并使用创建堆叠上下文的属性进行一些测试。

我做了几次测试,发现除了z-index,当然下面的属性也会创建一个堆叠上下文:

  • transform 不是none
  • opacity 不是1
  • 还有perspective

还有其他应用堆叠上下文的属性吗?

【问题讨论】:

  • position: fixed 可以在 Chrom(e|ium) 上创建堆叠上下文!在chrome://flags 中有专门的标志。
  • @minitech 是的,z-index 需要静态以外的位置来创建堆叠上下文。我相信 OP 已经意识到了这一点。或者确实意味着position:fixed 在没有z-index 的情况下自行创建堆叠上下文?
  • @FabrícioMatté:是的,该标志声明 所有 固定位置元素创建堆叠上下文。我不知道这是否是一个错误修复。
  • @minitech 哦,有趣。 =] 会去看看。
  • @minitech 我不知道固定位置的 chrome 标志,谢谢

标签: css z-index


【解决方案1】:

以下一种或多种情况会导致元素为其后代建立自己的堆叠上下文1

  • 根元素始终拥有一个根堆叠上下文。这就是为什么您无需先定位根元素即可开始排列元素的原因。任何尚未参与本地堆叠上下文(由以下任何其他场景生成)的元素将改为参与根堆叠上下文。

  • 在定位的元素上将z-index 设置为除auto 以外的任何内容(即具有position 的元素不是static)。

    • 请注意,对于带有position: fixed 的元素,此行为将被更改,这样它们将始终建立堆叠上下文,而不管它们的z-index 值如何。一些浏览器已经开始采用这种行为,但是这种变化还没有反映在 CSS2.1 或新的CSS Positioned Layout Module 中,所以现在依赖这种行为可能不明智。

      another answer of mine 中探讨了这种行为变化,而这又链接到this articlethis set of CSSWG telecon minutes

    • 另一个例外是flex itemgrid item。设置z-index 总是会导致它建立一个堆叠上下文,即使它没有定位。

  • opacity 设置为小于1 的任何值。

  • Transforming元素:

  • 创建CSS region:在content 不是normal 的元素上将flow-from 设置为none 以外的任何值。

  • paged media 中,每个page-margin box 建立自己的堆栈上下文。

  • filter effects 中,将filter 设置为none 以外的任何值。

  • compositing and blending 中,将isolation 设置为isolate 并将mix-blend-mode 设置为不同于normal 的值

  • will change 中,将will-change 设置为任何非初始值都会创建堆栈上下文的属性。

  • masking 中,将clip-path/mask 设置为none 以外的值。

请注意,block formatting context 与堆栈上下文不同;事实上,它们是两个完全独立(尽管不相互排斥)的概念。


1这不包括 pseudo-stacking contexts,这是一个非正式的术语,在定位方面仅指 things that behave like independent stacking contexts,但实际上参与了它们的父堆叠上下文。

【讨论】:

  • 哦,这不是 Chrome 22 中的标志吗?我想这就是它被移动的原因。
  • @minitech 根据我的阅读,似乎引入了标志,因此您可以禁用 Chrome 22 中引入的新 position:fixed 行为以进行反向兼容。
  • @minitech 也来自链接的文章:“要测试您的页面是否会更改,请转到 Chrome 的 about:flags 并打开/关闭“固定位置元素创建堆叠上下文”。如果您的布局在这两种情况下的行为都是一样的,你已经设置好了。如果没有,请确保在启用该标志的情况下它看起来对你来说是可以接受的,因为这将是 Chrome 22 中的默认设置。"
  • @minitech:我修改了答案,并根据您删除的答案添加了关于伪堆叠上下文的小脚注,尽管我的答案实际上并未包含它们,因为它们可能会造成混淆。
  • -webkit-overflow-scrolling: touch creates a new stacking context as well.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多