代码之家  ›  专栏  ›  技术社区  ›  Jaeger

如何在背景图像上应用两个过滤器?

  •  0
  • Jaeger  · 技术社区  · 6 年前

    我正在建立一个固定的背景图片网站。这将是完美的,它既是灰度和模糊。

    自从我自己发现 filter: blur(100%) 会模糊整个页面和它的内容,我知道我可以在一个 :before

    .front-layout {
      font-family: 'Fira-Mono', 'monospace';
      min-height: 100vh;
      background: #0e0e0e fixed;
      background-size: cover;
      filter: grayscale(100%); <-- I somehow need it here
      &:before {
        content: "";
        position: absolute;
        width : 100%;
        height: 100%;
        background: inherit;
        z-index: -1;
        //filter: grayscale(100%) blur(5%); <-- What I want to achieve
        filter: blur(5px);
      }
     // Some other elements
    }
    

    仅供参考,背景图像是直接在HTML中动态设置的,这就是为什么它没有出现在这里。

    不知怎的,我无法摆脱外面的过滤器 :之前 不管是什么元件,还是里面的过滤器都不起作用。总而言之,要么两者都有,要么两者都没有。

    我如何才能摆脱第一个过滤器和应用两个过滤器在我的电脑 :之前 元素?

    我重新创造了一个 JSFiddle 如果你运行我的代码,你不会看到任何事情发生,除非你取消注释我的评论。

    1 回复  |  直到 6 年前
        1
  •  1
  •   misorude    6 年前

    这个 ::before 后面

    如果您可以只为伪元素设置背景,并且让元素背景保持透明,那么它将以这种方式工作——但是如果您需要使用 background: inherit 为了让伪元素继承通过内联样式设置的父背景,它不能以这种方式工作。

    .front-layout > * {
      position: relative;
      z-index: 1;
    }
    

    https://jsfiddle.net/9sfqd7te/6/

    取决于元素实际包含的内容,以及这些子元素本身是否以任何方式定位,它可能只适用于该元素;或者您可能需要进行调整(例如,如果某些元素已经定位,则将其排除在应用相对位置之外,并且/或者不覆盖它们可能已经具有的更高的z索引)

    .front-layout > * 已将此限制为父级的子级,树下更远的子级不受影响。)