当前位置: 首页 > Web前端 > HTML

使用CSScross-fade()函数混合颜色

时间:2023-03-28 16:10:33 HTML

以下内容不兼容浏览器,生产环境请谨慎使用!在一个项目中,我想将组件的背景颜色设置为canvas.subtle的颜色,透明度为30%。但是为了支持各种主题,我不能直接将canvas.subtle的颜色#f6f8fa(毕竟这只是Light主题的颜色,还有其他8个主题的颜色)转成rgb带透明度使用。这时候我就求助于搜索引擎的方法,一搜就找到了这篇文章。不过这篇文章讲的都是混合两张图片,而不是如何混合颜色。好在当时出于好奇,打开了CSScross-fade()函数的MDN页面,查看了cross-fade()的语法1:=cross-fade(#)=<百分比[0,100]>?&&[<图像>|<颜色>]<图片>=<网址>|=url(*)|src(*)看,可以是类型,不是可以指定颜色吗?但是浏览器兼容性表里还是有这么一句话:Supportstheoriginaldual-imagewithpercentageimplementationonly。也就是说,不管Firefox是否不支持cross-fade()(幸好我不需要适配FireFox),在中,Chrome/Edge浏览器只支持类型,不支持类型,那我该怎么办?别担心,让我们继续讨论cross-fade()的语法。一行往下看,类型支持两种参数类型,一种是,一种是类型没什么好说的。值得注意的是类型,它可以设置颜色过渡。通常我们给它几种颜色来生成漂亮的渐变。那么,是否可以将两种相同的颜色传递给gradient()函数,以便它生成单独的颜色而不是渐变?经过测试,这是可以的:https://codepen.io/zhoushengd...这样,只要将两个类型的值传给cross-fade()函数,就可以得到两种颜色混合。此外,只要其中一种颜色是透明的,就可以为某种颜色设置透明度,而无需使用rgba()等函数。代码如下:background-image:-webkit-cross-fade(linear-gradient(#ef475d,#ef475d),linear-gradient(transparent,transparent),30%);在上面的代码中,第2-3行已经解释过了,有两种颜色需要混合。至于第四行,就是透明色的比例,也就是透明度。改变它的值,可以看到如下效果:https://codepen.io/zhoushengd...目前,浏览器支持较老的语法:cross-fade(,,),但是仍然支持类型作为参数。因此,在我的MicrosoftEdge109.0.1518.78、GoogleChromeCanary112.0.5577.0、Opera95.0.4635.25和AndroidSystemWebView106.0.5249.126上,上述代码工作正常。?