很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方法可以实现,又或者不仅仅局限于 PNG 图片。

mix-blend-mode 与 background-blend-mode

mix-blend-mode 在我之前的一篇文章初略介绍过 -- 不可思议的混合模式 mix-blend-mode,与本文的主角 background-blend-mode 一样,都是实现混合模式的。

混合模式最常见于 photoshop 中,是 PS 中十分强大的功能之一。当然,瞎用乱用混合模式谁都会,利用混合模式将多个图层混合得到一个新的效果,只是要用到恰到好处,或者说在 CSS 中利用混合模式制作出一些效果则需要对混合模式很深的理解及不断的尝试。

简单区分一下这两个属性:

  • mix-blend-mode 用于多个不同标签间的混合模式
  • background-blend-mode 用于单个标签间内背景图与渐变背景间的混合模式。

background-blend-mode 的可用取值与 mix-blend-mode一样,不重复介绍,下面直接进入应用阶段。

使用 background-blend-mode: lighten 实现任意图片颜色赋色技术

OK,下面进入正文。如何通过纯 CSS 技术实现任意图片的任意颜色赋色技术呢?

假设我们有这样一张图片,JPG、PNG、GIF 都可以,但是有一个前提要求,就是黑色纯色,背景白色

利用 background-blend-mode ,我们可以在图片下叠加多一层其他颜色,通过 background-blend-mode: lighten 这个混合模式实现改变图片主体颜色黑色为其它颜色的目的。

简单的 CSS 代码示意如下:

.pic {width: 200px;height: 200px;background-image: url($img);background-size: cover;
}.pic1 {background-image: url($img), linear-gradient(#f00, #f00);background-blend-mode: lighten;background-size: cover;
}

效果如下:

注意,上面 CSS 这一句是关键 background-image: url($img), linear-gradient(#f00, #f00); ,这里我叠加了一层渐变层 linear-gradient(#f00, #f00) ,实现了一个纯红色背景,而不是直接使用 #f00 实现红色背景。

使用 background-blend-mode: lighten 实现主色改为渐变色

这个方法更厉害的地方在于,不单单可以将纯色图片由一种颜色改为另一种颜色,而且可以将图片内的黑色部分由单色,改为渐变颜色!

简单的 CSS 代码如下:

.pic {background-image: url($img), linear-gradient(#f00, #00f);background-blend-mode: lighten;background-size: cover;
}

可以得到这样的效果:

OK,看到这里,大家伙肯定会有疑问了,这是怎么实现的呢?

这里就有必要解释一下 lighten 这个混合模式了。变亮,变亮模式与变暗模式产生的效果相反:

  1. 用黑色合成图像时无作用,用白色时则仍为白色
  2. 黑色比任何颜色都要暗,所以黑色会被任何色替换掉。反之,如果素材的底色是黑色,主色是白色。那就应该用变暗(darken)的混合模式

CodePen Demo -- 纯色图片赋色技术尝试

局限性尝试 -- 使用透明底色图片

上述方法要求了图片本身内容为纯色黑色,底色为白色。那么如果像 PNG 图片一样,只存在主色,而底色是透明的,是否能够同样实现效果呢?

假设我们有一张这样的 PNG 图片(灰色主色,透明底色):

按照上面的方式实现一遍,结果如下:

任意颜色赋色技术尝试 -- PNG图片

很遗憾,当底色是透明的时候,会被混合模式混合上叠加层的颜色,无法使用。所有,这个技术也就存在了一个使用前提:

  • 图片的底色为白色,主色为黑色

当然主色也可以是其他颜色,只是这个时候叠加需要考虑颜色的融合,没有使用黑色直观。

background-blend-mode 实现图片任意颜色赋色技术总结

综上,我们确实只需要两行代码就可以实现白色底色黑色主色图片的任意颜色赋色技术。

{background-image: url($img), linear-gradient(#f00, #00f);background-blend-mode: lighten;
}

其中,background-image 的第二值就是你希望赋值给的渐变色(当然,渐变色可以生成纯色)。

我们同时给一个标签设置了背景图片和渐变色,然后利用了 background-blend-mode:lighten 这个关键属性,达到了类似 PS 里的混合模式效果。

看起来 background-blend-mode 名为混合模式,但似乎表现上更像是 PS 当中的一种的剪切蒙板,混合模式是修改图片本身,蒙版跟遮罩都是在图片上一层通过叠加其他层对图像进行调整。

那么由此方法本身可以想到,一些能对图形进行色彩调整的 CSS 属性是否也能达到同样的功能呢?诸如:

  • filter 滤镜
  • mask-image
  • mask-clip

感兴趣的读者可以自行尝试,在接下来的文章我也会继续进行探讨。

黑色纯色,背景白色可能局限了这个技巧的使用场景,但是在很多白色底色的页面中,这个方法还是可以很好的发挥作用,许多 ICON 图片不再需要两个或者更多个颜色的版本!

background-blend-mode 兼容性

相较于 mix-blend-modebackground-blend-mode 的兼容性会更好一点。所以本文所介绍的技术在移动端是存在用武之地的:

最后

当然,background-blend-mode 本身还可以实现其他更多酷炫的效果,将在下一篇文章 不可思议的混合模式 mix-blend-mode(二) 分享给大家,敬请期待。

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。

好了,本文到此结束,希望对你有帮助 :)

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

两行 CSS 代码实现图片任意颜色赋色技术相关推荐

  1. html 图片怎么改颜色代码,两行 CSS 代码实现图片任意颜色赋色技术

    原标题:两行 CSS 代码实现图片任意颜色赋色技术 || 很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方 ...

  2. html图标点击转换颜色,PNG格式小图标的CSS任意颜色赋色技术_html/css_WEB-ITnose

    这篇文章发布于 2016年06月8日,星期三,01:17,归类于css相关. 阅读 3 次, 今日 2 次 byzhangxinxu from http://www.zhangxinxu.com 本文 ...

  3. 图片瀑布流Html,真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点...

    两行css如下: .waterfall-container { /*分几列*/ column-count: 2; } .waterfall-item { /*不留白,不知道什么意思可以取消这个样式试试 ...

  4. html简单弹窗代码_真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!...

    两行css如下: <style scoped> .waterfall-container {/*分几列*/column-count: 2;}.waterfall-item {/*不留白,不 ...

  5. 真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!...

    作者:coder94 https://segmentfault.com/a/1190000017866549 两行css如下: <style scoped> .waterfall-cont ...

  6. css filter改变图片的颜色,神奇的操作~

    最近get了一个神奇的知识~ 视觉设计的小姐姐某天有一个想法,她只设计一版图标,需要前端在不同的场景展示不同颜色的图标,确实是高效的办法哈!但是对我的CSS知识来说超纲了[捂脸]-于是开始搜搜搜,发现 ...

  7. 两行CSS代码实现瀑布流

    /*分几列*/ column-count: 3; /*不留白*/ break-inside: avoid; /*列间距,可有可无,默认30px*/ column-gap: 20px; 其他CSS属性自 ...

  8. 让 UI 早点下班,高阶切图技巧!基于单张图片的任意颜色转换!

    今天,要介绍一种基于 CSS mask-composite 的高级技巧. 通过掌握它,我们可以通过一张 图片,得到关于它的各种变换,甚至乎,得到各种不同颜色的变换. 通过单张 PNG/SVG 得到它的 ...

  9. 修改svg图片的颜色html,通过CSS改变svg image引入的图片颜色?

    在html元素中通过background设置图片icon,然后通过css3的filter滤镜的drop-shadow 设置阴影来呈现这种改变图片颜色的效果.很不错的方法. 但是我现在的元素是在svg中 ...

最新文章

  1. 【zabbix学习笔记之二】部署zabbix-server端
  2. modelsim读取文件中的数据_modelsim中的文件操作—— 大数据测试
  3. 圈复杂度本质上就是——分支覆盖率达到100%需要的测试用例数
  4. NYOJ 625 笨蛋的难题(二)
  5. 什么叫光端机?视频光端机的分类具体有哪些?
  6. webgl 着色器_如何使用AI,AR和WebGL着色器来帮助视障人士
  7. matlab中怎么查看变量,Matlab 查看内存中的变量,清空屏幕等命令
  8. 090723 T Code Generate 的思考
  9. c盘哪些文件可以删除_原来C盘可以删除这5个文件,难怪你的电脑越来越卡
  10. 微信小程序测试自学文档
  11. html编辑器有哪些
  12. 视频、图形图像处理之Opencv技术记录(四)、OpenCV教程概述
  13. html报告致谢,论文致谢优秀范文(精选10篇)
  14. 几种RS485隔离通讯的方案介绍
  15. PTA 6-10 二分查找
  16. 完全用Linux工作,作者王垠
  17. 网络电视经常出现服务器无响应,为什么pps总是显示服务器未能响应停止播放
  18. 编码器的分类、作用、线制及其接线方法—基础补充
  19. 使用html仿支付宝首页,jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
  20. PubSub订阅与发布

热门文章

  1. word2vec_文本相似度
  2. 55:Mysql用户管理|常用sql语句|mysql数据库备份恢复
  3. Linux中history历史命令使用方法详解
  4. w3m - 命令行下的浏览器
  5. 进程注入的研究与实现
  6. 手动配置Hibernate的方法
  7. nyoj116 士兵杀敌(二)树状数组 插点问线
  8. 架构师之路 — 部署架构 — 超大规模负载均衡架构演进
  9. SD-WAN — 云专线(企业入云)
  10. 5G NGC — PCC 策略与计费控制框架