热搜:fiddler git ip 代理 m1
历史搜索

CSS属性 isolation 的使用

游客2024-09-11 09:30:01

今天我们来聊聊 CSS 属性 isolation,基本上它提供了更多对元素与文档其他部分交互的控制,并且通常是解决 z-index 问题的一种优雅的解决方案。

让我们从一个实际的例子开始。我做了一个简单的卡片,如下图:

CSS属性 isolation 的使用 1

现在假设我们想在卡片的右上角添加一个引号图像,作为一个小小的装饰元素。大概是这样的:

CSS属性 isolation 的使用 3

😱 它…消失了

如果你仔细想想,这完全是没问题的。每个元素,默认情况下,得到一个z-index: 0。所以,这就像是说页面上的每个元素默认都位于同一层。

当我们在伪元素上声明一个z-index: -1时,我们实际上是把它推到了默认层的下面!

🤔那我们如何解决这个问题?

理想情况下,我们希望有一个局部的、有范围的 z-index 的伪元素,当我希望我的伪元素有一个z-index: -1时,我希望的是“在所有内容后面,但不要在卡片本身后面!

这个概念实际上是内置在 CSS 中的,它被称为层叠上下文!

层叠上下文基本上是由一个元素定义的,该元素充当其子元素的z-index声明的根源。子元素无论其 z-index 多低,都不能脱离出其所在的层叠上下文。

默认情况下,一个普通的 HTML 文档将有一个单一的层叠上下文,每个元素都引用它。这就是为什么当我们将z-index: -1分配给我们的伪元素时,它会被隐藏到卡片后面,因为只有一个全局层叠上下文!

但是,我们也可以在任意元素上创建新的层叠上下文!

有很多方法可以在元素上创建新的层叠上下文。其中包括:

  • transform
  • filter
  • opacity

完整列表请看 mozilla 文档:点击这里

所有这些方法都有一个问题,它们也有副作用!😢

它们创建了一个层叠上下文,这是我们想要的,但它们也做了一些其他的事情,也许我们不一定想要!
比如为什么我必须对一个元素应用一个不透明度来创建一个层叠上下文,如果我一开始就不想应用任何不透明度呢?

🪄幸运的是,有一个简单的解决方案,它被称为isolation

isolation是一个特殊的属性,其唯一的目的是在它所应用的元素上创建一个新的层叠上下文,且没有其他副作用。😄

它接受两个值,autoisolateisolate是我们需要的。

所以,这个问题的最终解决方案非常简单:

.card {
  position: relative;
  isolation: isolate;
}

到此文章分享就结束了,下次遇到类似的场景是不是有了新的解决方案呢?

原文链接:点击这里

标签:CSS