如何使用 CSS 模糊元素周围的所有内容?

How can I blur everything around an element with CSS?

我们以this page为例。除了页面上的一个 selected 元素(应该获得焦点)之外,您如何模糊页面上的每个元素(header 导航下方)?

如果您模糊整个内容区域,焦点元素也会模糊(您不能取消模糊 child 或模糊 parent)。如果您 select(并检查)每个元素是否应该模糊,这不是最好的方法。此外,该元素应保留在内容区域内,不得以任何方式进行转换HTML-wise。

这个:

应该变成这样(只有 CSS):

只需使用绝对定位的叠加层将其变暗并为聚焦元素提供具有更高 z-indexrelative 位置会很容易,但不幸的是,模糊深色叠加层不会模糊背后的内容:

您需要查看悬停内容的容器并向其添加 :not(:hover)。

这是我的代码笔:https://codepen.io/amandaIaria/pen/vqdONB。我刚刚将它变成 CSS 而不是 SCSS 版本,并删除了所有不需要的东西。它可能不是 100% 的用例,但我就是这样做的。

.project-container:hover .project:not(:hover) {
  // You might not need this overflow but just in case
  overflow: hidden;
}

// This rule basically says when you are hovering the container and if the specific project is not the specific one you are hoving add the blur to the content.

.project-container:hover .project:not(:hover) .project__content {
       // All the blurs
        -webkit-filter: blur(5px); 
        -moz-filter: blur(5px);
        -o-filter: blur(5px);
        -ms-filter: blur(5px); 
        filter: url(#blur); 
        filter: blur(5px);   
        filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius='3') grayscale(100%);
}

一个 backdrop-filter 解决了这个问题,谢谢@Sheraff 和 @epascarello 23