深入理解CSS mix-blend-mode滤色screen混合模式

这篇文章发布于 2019年05月28日,星期二,00:04,归类于 CSS相关。 阅读 35316 次, 今日 3 次 12 条评论

 
建议在非IE浏览器下浏览本文,否则很多实时渲染效果看不到,影响阅读。

一、滤色screen混合模式速览

screen混合模式,国内称为“滤色”,其计算公式是:滤色模式的计算公式

公式中的C表示最终混合的RGB色值(范围是0-255),A和B表示用来混合的两个颜色的RGB色值(范围也是0-255)。

从公式的内容可以看出,滤色混合模式的颜色,是将两个颜色的互补色的像素值相乘,然后除以255的互补色值。

例如有一个红色,其RGB值是(255,0,0),还有一个蓝色,其RGB值是(0,0,255),则这两个颜色使用滤色混合模式之后的颜色色值是:

  • R = 255 – (255 – 255) * (255 – 0) / 255 = 255
  • G = 255 – (255 – 0) * (255 – 0) / 255 = 0
  • B = 255 – (255 – 0) * (255 – 255) / 255 = 255

于是最终的色值是 RGB(255,0,255) ,也就是下面这个色块的颜色

然后下面这个是应用mix-blend-mode:screen代码的实时混合色值效果:

可以看到,两个色块呈现的颜色是一模一样的,既验证了公式的正确性,也对滤色模式有了第一次的认识。

二、滤色模式的特性与web应用

以下是一些直观的特性:

  1. 任何颜色和黑色执行滤色,还是呈现原来的颜色;
  2. 任何颜色和白色执行滤色得到的是白色;
  3. 任何颜色和其他颜色执行滤色模式混合后的颜色会更浅,有点类似漂白的效果。

滤色模式模式对于在图像中创建霓虹辉光效果是非常有用的,这一特性对于Web开发也同样受用。

我们经常需要对一些图像素材添加一些场景特效,比如说各种天气,或者霓虹辉光效果等。

传统做法是使用一张透明的PNG图像覆盖在上面,但是使用PNG透明前景图有下面2个缺点:

  1. 效果不自然,缺少那种跟底图完全融为一体的感觉;
  2. 图片的尺寸实在是太大了,动不动就上百K;

现在,有了滤色模式模式,我们只要准备一张黑色底色的jpg图片就可以了,应用screen混合模式,不仅可以跟底图完全融为一体,且使用的前景图片的文件尺寸只有PNG图片的1/10。

例如我们有下面一张底图,森林和小鹿:

森林和小鹿

然后,有以下一些特效前景图:

明亮辉光 水汽迷雾 大雨而至 水汽迷雾

分别和提供的底图进行混合,可以看到如下图所示的实时效果:

可以看到效果很棒很自然。而这里使用的前景素材尺寸300*400,尺寸仅20K左右,开销非常小。

还能应用于HTML video视频

滤色混合模式不仅可以作用于图像,还可以用于视频,同样的,只要我们把视频的底色做成黑色,就能很好得和网页背景融为一体。

例如这里有个网页截图,还有一个二次元风格的场景图:

网页首页截图 景物素材图

然后还有两个黑色背景的视频特效素材,分别是礼花绽放和瓢泼大雨(视频不动请点击):

通过设置video元素混合模式为screen,可以得到下面所示的精彩效果(视频不动请点击):

为网页动效的实现增加了新的思路。

三、滤色混合模式的兼容性

滤色混合模式的兼容性还是很溜的,2014年底就开始支持,目前已经快5年了,按照手机的更新速度,只要你的产品不是国民级的,移动端是可以放心使用的。

由于Edge拥抱Chrome浏览器,因此,Edge75也是支持了,可以预见,10年后,等window7系统没有人使用的时候,PC端也可以绽放光彩了。

混合模式兼容性截图

无论在哪个语言中,无论是什么设计工具,滤色混合模式都是非常基础,非常常见的一种混合模式,如果你致力于在图形表现领域有所作为,一定要把这种模式的混合算法、特效以及应用场景记得滚瓜烂熟。

好了,本文内容就这些,感谢阅读!

(本篇完)

分享到:


发表评论(目前12 条评论)

  1. 木木也是程序媛说道:

    rgb 不是有三个值吗? c 取的哪一个?a b 又是怎么取的? a b 代表的是这个点叠加了什么颜色吗?

  2. lvanboy说道:

    有没有demo代码。这是两个元素发生重叠时,上层设置mix-blend-mode:screen属性,发生的效果嘛。

  3. chang说道:

    想问一下老师有类似的代码学习一下嘛

  4. cnavascat说道:

    CSS Ps化?

  5. 柳柳说道:

    可想给你点个赞,但是没得点赞按钮

  6. 少林功夫好耶说道:

    张老师,为什么即使给video标签加了autoplay属性,有时候还是会出现视频不自动播放的情况呢

  7. fortnight说道:

    太神奇了,居然还有这种玩法,神奇的css世界

  8. silence说道:

    赞,以前用canvas做烟花特效效果很卡还不好看,还有展示区域的限制,现在这个好棒

  9. wingmeng说道:

    深度好文!拉出 PhotoShop 一阵操作,不但学会了 mix-blend-mode,还加深了对 PS 图层混合模式的理解