深入了解CSS颜色混合函数Color-mix

深入了解CSS颜色混合函数Color-mix,今天来介绍一下 Chrome 111+正式推出的 CSS颜色混合函数:color-mix()[1]。,所谓颜色混合,顾名思义,就是将两种颜色按照一定的比例混合起来,和调色板比较像。到目前为止,可以说是最强大、最实用的 CSS 颜色处理函数了,有了它,再也不需要用LESS、SASS等预处理工具了,还可以实现颜色动态更新,一起了解一下吧。,首先来看语法,比较简单。,通用语法写作。,主要由 3 部分组成,分别是插值颜色法(method,这里只介绍颜色空间)、基础颜色(color1)和混合颜色(color2),示意如下:,图片,颜色空间是一个很复杂的概念,这里不做介绍,只需要知道用法就行。,以红色和白色混合为例。,下面是实际混合效果:,图片,可以看到,混合后的颜色介于红色和白色的中间,相当于把之前的颜色减淡了。,再比如,红色和黄色混合,可以得到橙色。,效果如下:,图片,这是如何混合的呢,很简单,以rgb为例,其实就是将对应的值取平均数。,比如红色是rgb(255,0,0),黄色是rgb(255,255,0),计算如下:,所以混合的颜色就是rgb(255,127.5,0),也就是橙色。,你也可以在下面的 demo 中自行调整颜色体验。,图片,这应该就是颜色混合最直观的认识了。,当然,这只是最简单的情况。在上面的语法中,还可以给颜色设置混合比例,也就是前面语法中的p1和p2。,由于 CSS 强大的“包容”性,对各种情况都做了兼容,主要分为以下几种情况。,前面 4 种情况都比较好理解,就是互相补全,另外注意,这两个值都位于0%~100%,超出范围者直接不合法。,图片,下面来看最后一种情况,也就是两者相加不等于100%的情况。,这里其实也要分两种,首先是p1+p2>100%的情况,比如。,这种混合应该怎么计算呢?,首先还是按照上面的计算规则,算出两者的比例关系,也就是两者是1:1混合的,在超过100%的情况下,仍然按照100%进行分配,也就是等同于。,效果如下:,图片,同理,这种情况下也是等同的,因为都是 4:1。,效果如下:,图片,所以,在两者相加大于100%的情况下,可以先计算两者的比例,然后再用100%按比例分配即可。,然后是p1+p2<100%的情况。,起初,我以为也是相同的处理方式,其实不然。以下面这个为例。,混合比例其实都是1:1,最后这两者结果会相同吗?可以先看结果。,图片,可以明显看到,下面的混合结果颜色跟淡一些。为什么呢,其实可以从最终的混合颜色看出原因,这里直接通过控制台来得到计算颜色,如下:,图片,两个实色混合出来居然有了透明度!,这个透明度怎么来的呢?其实就是由于两者混合相加不足100%,刚才这个例子,两者相加20%+20%=40%,所以最终的混合出现了0.4的透明度。,我们再换个例子。,效果如下:,图片,从控制台可以看到,刚好就是50%的透明度。,图片,因此,在两者相加小于100%的情况下,可以先计算两者的比例,然后再按比例分配,最后再叠加上透明度。这样看来,其实大于100%的情况也可以理解为叠加了一个大于1的透明度,只不过最后解析成了1。,使用color-mix可以很方便的根据主题色生成与之相对应的邻近色,例如:,效果如下:,图片,这样在实现一些跟随主题色变化的按钮就非常方便了。,效果如下:,图片,这些技巧在之前这些文章中都有介绍,还提供了其他解决方案,如果不考虑兼容性,color-mix无疑是最方便的。,兼容性文章开头就有提到,完整兼容性如下:,图片,现在主流浏览器已经全部兼容了,放心学习吧。,不过实际工作中,还需要做好回退措施,如果浏览器不兼容怎么办?有些同学可能会想到用 CSS 变量来做回退处理,如下:,很可惜,这种方式并不可取。原因在于,CSS 变量只有在未定义时,才会走后面的回退值。这种情况下,仍然取前面的值,从而导致颜色失效。,正确的做法是使用CSS supports进行判断。,这样,在不支持的浏览器中也能使用一个还能接受的回退值,只是不能动态去混合了。,以上就是本文的全部内容了,相信你会对颜色混合有更深刻的理解,下面总结一下。,CSS 颜色处理函数真的是越来越强大了,后面还会介绍其他比较实用的颜色函数。,[1]color-mix(): https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix。,[2]CSS color-mix (codepen.io): https://codepen.io/xboxyan/pen/KKrzyBz。,[3]CSS color-mix (juejin.cn): https://code.juejin.cn/pen/7245647917632094263。,[4]CSS color-mix (runjs.work): https://runjs.work/projects/d8b793ca495346b2。,[5]妙用 CSS 动画来实现颜色加深、减淡等混合操作: https://juejin.cn/post/7184252342882009125。,[6]CSS 颜色混合的N种方式: https://juejin.cn/post/7207228091989557306。

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/27258.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日