【问题标题】:Apply a css -webkit-filter grayscale before using a background-blend-mode keeping the color在使用背景混合模式之前应用 css -webkit-filter 灰度以保持颜色
【发布时间】:2015-05-04 08:43:12
【问题描述】:

我试图在鼠标悬停时实现单色彩色图像,其中图像的颜色转换为灰度,然后灰色阴影替换为我正在混合的颜色阴影。

它可能看起来像this

要在 Photoshop 中模拟这一点,您可以对图像进行灰度化,在顶部添加所需的颜色层并将其与屏幕模式混合。

据我了解,如果您将 css 过滤器和背景混合模式结合使用,css 具有这种潜力,但如果您使用过滤器,结果将始终是灰度。

所以我问是否有任何其他方法来获得这种混合,或者在没有 css 过滤器之前对图像进行灰度化

【问题讨论】:

    标签: html css grayscale blending background-blend-mode


    【解决方案1】:

    您可以一步完成,使用亮度作为混合模式。

    在这种模式下,亮度取自前层(图像),色相和饱和度取自背景(这里是纯色)

    以下演示还让您可以通过类分配滤色器

    .test {
        width: 400px;
        height: 200px;    
        margin: 10px;
        background-size: cover;
        background-image:  url(http://placekitten.com/1000/750);
    }
    
    .test:hover {
        background-blend-mode: luminosity;
    }
    
    .red {
        background-color: red;
    }
    
    .green {
        background-color: greenyellow;
    }
    <div class="test red"></div>
    <div class="test green"></div>

    另一种解决方案,图像中的黑色提供完全饱和的颜色(而不是黑色)。设置起来有点复杂,但可以实现。

    .test {
        width: 400px;
        height: 200px;    
        background-size: cover;
        background-color: white;
        background-image: linear-gradient(red, red), url(http://placekitten.com/1000/750);
        background-blend-mode: screen, luminosity;
    }
    &lt;div class="test"&gt;&lt;/div&gt;

    一种将这种效果作为可重用类的方法。图像已经在元素上,我们只是设置了设置效果的类和一个单独的颜色类。

    所以顺序需要是:

    • 第一层 = 白色
    • 第二层图像,混合设置为亮度。这样,图像的亮度与白色相结合,为高亮度提供白色,为低亮度提供黑色(即灰度滤镜)
    • 第三层,纯色,混合设置为屏幕。这使白色保持白色,但将黑色变为颜色。

    我们需要为最终混合使用伪元素,以便使用独立类轻松设置所有这些。这将设置为 mix-blend 而不是 background-blend :

    #cat {
        width: 760px;
        height: 560px;
        background-image: url(http://placekitten.com/1000/750); 
    }
    
    .test {
        background-color: white;
        background-position: 0px 0px;
        background-size: cover;
        background-blend-mode: luminosity;
        position: relative;
    }
    
    .test:after {
        content: "";
        position: absolute;
        left: 0px;
        top: 0px;
        right: 0px;
        bottom: 0px;
        mix-blend-mode: screen;
        pointer-events: none;
    }
    
    .blue:after {
        background-color: blue;
    }
    &lt;div class="test blue" id="cat"&gt;&lt;/div&gt;

    【讨论】:

    • 但是色调是从白色 - 颜色 - 黑色。我正在寻找一种解决方案,黑色将是您要混合的颜色。白色——颜色的深浅——颜色。在这种情况下,耳朵和眼睛的外侧是红色的,而不是黑色的。有什么想法吗?
    • 添加了另一个解决方案。但是这个更难概括。
    • 完美运行!非常感谢!最后一个问题。我有没有巧妙的方法将背景图像属性分开。在我的情况下,背景图像是使用 Php 动态设置的。所以我有一个样式属性,我通过了容器中的背景图像 URL(在 html 中硬编码)。颜色应该是指容器的一个类(css)。有没有办法在css中应用渐变,然后在容器中应用背景图像作为样式?或者它必须在一个语句中,就像你正在使用它一样?
    • 不容易(我告诉过你!)但可以实现 :-) 在答案中添加了 sn-p
    • 完美运行!非常感谢。我真的不明白你怎么会发现我会以这种方式工作,但也许解释太多了。有用!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2020-05-29
    • 2015-01-04
    • 2021-11-22
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多