DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费积分!
background-blend-mode
属性定义了元素的 background-image
如何与其 background-color
混合。
.container {
background-image: url('image.jpg');
background-color: red;
background-blend-mode: screen;
}
在上面的演示中,左侧的默认 background-image
没有设置混合模式,因此图像会覆盖 background-color
。 然而,在右侧,混合模式修改了 background-image
与下面的红色 background-color
混合。 但请注意,文本颜色 未 受此附加属性的影响。
值
initial
:默认值,无混合。inherit
:继承父元素的混合模式。<blend-mode>
:一个值,将根据其background-color
更改 background-image。
值可以设置为以下任何值(在下面的演示中,
background-color
为红色)

normal
:如上所示,background-color 不会穿过 background-image。
multiply
:background-image 和 background-color 相乘,通常会导致比以前更暗的图像。
screen
:图像和颜色都反转,相乘,然后再次反转。
overlay
:background-color 与 background-image 混合,以反映背景的亮度或暗度。
darken
:如果 background-image 比 background-color 更暗,则替换图像,否则保留原样。
lighten
:如果 background-image 比 background-color 更亮,则替换图像,否则保留原样。
color-dodge
:background-color 除以 background-image 的倒数。 这与 screen 混合模式非常相似。
color-burn
:background-color 反转,除以 background-image,然后再次反转。 这类似于 multiply。
hard-light
:如果 background-image 比 background-color 更亮,则结果为 multiply;如果更暗,则结果为 screen。
soft-light
:最终结果类似于 hard-light
,但更柔和,看起来像是在图像上放置了一个漫射聚光灯。
difference
:通过从最亮的背景图像和 background-color 中减去较暗的颜色来获得结果。 通常图像会具有非常高的对比度。
exclusion
:结果与 difference
非常相似,但对比度略低。
hue
:结果是 background-image 的色调与 background-color 的亮度和饱和度相结合。
saturation
:保留 background-image 的饱和度,同时混合 background-color 的色调和亮度。
color
:保留 background-image 的色调和饱和度,以及 background-color 的亮度。 在此示例中,由于图像为灰色,并且效果保留了灰度级别,因此我们只得到一个大的灰色斑点。
luminosity
:保留顶层颜色的亮度,同时使用 background-color 的饱和度和色调。链接多个混合模式
每个背景层只能有一个混合模式,但是如果我们使用多个线性渐变,那么每个渐变都可以有自己的混合模式,这会带来有趣的显示效果。
这是通过按您想要影响的背景层顺序列出这些值来实现的。
.container {
background:
linear-gradient(purple 0%, red 90%),
linear-gradient(to right, purple 0%, yellow 90%),
url('image.jpg') 30px,
url('image.jpg') 20px;
background-blend-mode: screen, difference, lighten;
}
第一个线性渐变具有 screen
混合模式,然后是第二个线性渐变,其具有 difference
混合模式,以及第一个背景图像,其应用了 lighten
混合模式。
演示
这是一个工作示例,说明这些值根据 background-color
的解释方式。
浏览器支持
这些浏览器支持数据来自 Caniuse,其中包含更多详细信息。 数字表示浏览器从该版本开始支持该功能。
桌面
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
35 | 30 | 否 | 79 | 10.1 |
移动/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 127 | 10.3 |
有没有办法在 IE 中实现这一点?
有没有办法在 IE 中实现这一点?
或者一个适用于所有 IE 版本的解决方案?到目前为止,我还没有找到解决方案,微软不想支持 blend-mode。这样一来,我们就无法使用 blend-mode。我找到了使用 JavaScript 的解决方案,大多数解决方案在 IE 11 和 Edge 中都存在问题,并且颜色在浏览器中不同。
Rene
我找到了 Matt Slack 给出的唯一且最好的解决方案
http://collectiveidea.com/blog/archives/2016/06/02/fun-with-svg-css-background-blend-mode-fallback
我没有使用 JavaScript 部分(除了功能检测之外),因为我能够通过我的 CMS 模板将图像路径直接包含到 SVG 中
唯一需要花一些时间才能弄清楚的是
<base href="">
的用法,它会干扰filter="url(#myFilter)"
属性。在这种情况下,我必须将路径添加到当前页面filter="url(/mypage.html#myFilter)"
。这是 Matt 的 js 版本 +
<base>
标签 (http://codepen.io/localhorst/pen/QGEMmE)