树欲静而风不止
叙述前端的戎码生涯

设计师看懵,程序员却上头:CSS 函数有多强?~(颜色篇)

CSS,不再只是“样式表”

大多数人第一次接触 CSS 的时候,都会觉得它是“被动的”:给元素设定颜色、大小、位置—就像在调一张图

但随着它的发展,现在的 CSS,早已变得可计算、可逻辑、可表达动态关系;函数正是这种变化的核心之一

从最早的calc()var(),到今天的color-mix()sin()path()CSS 正在突破「静态」的定义,进入「可编程」的时代

CSS的函数世界观

CSS 的函数并非传统意义上的编程函数(可执行逻辑),而是一种可用于计算、配色、路径控制和动态值表达的语法形式,或者说是一种值函数,即会根据输入参数返回值,可用于CSS属性值中

Tips:CSS提供了许多有意思、功能强大的函数,为了避免篇幅过于冗长,可能会分为几篇文章、按作用分类介绍,感兴趣可以持续关注,觉得有意思的话也可以点个赞鼓励一下哦(*・ω-q)

颜色值相关

颜色函数让我们能够在CSS中更灵活地使用各个色彩空间的颜色,甚至对颜色进行计算,让配色具备了数学连续性

rgb()

rgb()*这个函数相信写过CSS的都不陌生,它让我们能够使用*RGB色彩空间的规则来表达颜色

大多数人对它的使用通常是使用3个变量分别表示R、G、B通道的值,以逗号分隔来表达颜色,如下

cover1

但其实,这只是rgb()最简单的用法,逗号分隔参数的方式也是旧版的语法,其存在一定限制,如参数必须同类型,无法混合(需全部数字或全部百分比)

Tips:rgba()实际上是rgb()的别名,两者接收同样的参数

在新版的语法中,无需逗号,可以仅使用空格分隔,参数语法如下

cover2

从语法中可看出,有两种使用方式

绝对值:与常用方法类似,只是少了逗号而已;如果需要指定不透明度(Alpha),则用/分隔

cover3

相对值:这是比较陌生的用法,大部分时候也用不上,但它体现了CSS强大的能力,该用法可以对颜色进行计算以得到新的目标颜色

首先看语法,from是关键字,是原始颜色(可以是CSS任意合法的颜色表示),R、G、B、A表示输出的对应通道值,后半部分其实与绝对值语法差不多,但其可以根据原始颜色进行计算,在函数内可通过小写的r、g、b、alpha分别代表原始颜色的各个通道值,通过CSS提供的计算方法(如calc)进行计算

如下:

cover4

如果需要不透明度,也可以进行对应计算

cover5

通过相对值的写法,可以对颜色进行计算,如果某个通道不需要计算,也可以直接使用绝对值

通过这种可计算能力,我们可以更灵活地使用颜色,如快速提取一个颜色(可为其它颜色空间值,如hsl等)的各通道值展示

cover6

除了RGB颜色空间的函数外,CSS还提供了许多其它颜色空间的函数,以支持更丰富、更广色域的颜色设计

color()

这个函数的语法与rgb()的语法及使用类似,不同的是,它可以指定特定色彩空间;语法如下:

cover7

rgb()的语法对比,它多了一个colorspace参数,其可用于指定特定的色彩空间,可选值如:srgbsrgb-lineardisplay-p3a98-rgbprophoto-rgbrec2020xyzxyz-d50xyz-d65

c1、c2、c3表示对应色彩空间的组件值(分量),范围为0-1;A表示不透明度

绝对值用法如下:

cover8

可以根据自己的需要选择合适的色彩空间

相对值用法也与rgb()用法类似,只不过多了个色彩空间的参数;此外用于表示原始颜色的关键字也有细微差别

◆对于基于RGB色彩空间的,如:srgbsrgb-lineardisplay-p3a98-rgbprophoto-rgbrec2020,依旧采用r、g、b表示原始颜色

◆对于基于XYZ色彩空间的,如:xyzxyz-d50xyz-d65,则采用x、y、z表示原始颜色

◆alpha关键字则不变

cover9

其它色彩空间函数

除了以上函数,CSS还根据不同色彩空间提供了对应的颜色值函数

hsl():根据色调、饱和度、亮度和alpha来定义一个给定的颜色

coverq1

hwb():根据色调、白度和黑度来定义一个给定的颜色

coverq2

lch():根据亮度、色度和色调来定义一个给定的颜色

coverq3

oklch():根据亮度、色度、色调和alpha来定义一个给定的颜色

coverq4

lab():根据Lab色彩空间(基于人类视觉感知的模型)中的亮度、a 轴距离和 b 轴距离来定义一个给定的颜色

coverq5

oklab():根据Lab色彩空间中的亮度、a 轴距离、b 轴距离和alpha来定义一个给定的颜色

coverq6

device-cmyk():以独立于设备的方式定义C**MYK**颜色,目前暂无浏览器支持

用法上基本与rgb()的绝对值用法类似,只不过值需根据各色彩空间的定义选择

cover10

需注意的是,虽然CSS支持众多不同色彩空间的值表达,但具体使用时需要查看对应函数的兼容性,有些色彩空间的值函数在低版本浏览器环境可能不支持

color-mix()

有玩过颜料的应该都知道,当我们把两个颜色混合在一起,就可以(叮的一声)获得一个新的颜色,这(铛铛铛铛~)就是颜色混合

在以往,我们如果想在样式内实现混合颜色,需要借助如LESSSASS这样的预处理器,但现在不用咯;CSS提供了一个color-mix()函数,它的主要作用就是混合两个颜色,返回一个新颜色

Tips:由于是原生CSS支持的,即我们可以实现动态的颜色混合~

大致语法如下

cover11

method

用于指定返回的结果颜色的色彩空间,颜色混合将在该色彩空间内进行;其值为in+空格+色彩空间关键字

可选的色彩空间如:srgbsrgb-lineardisplay-p3a98-rgbprophoto-rgbrec2020laboklabxyzxyz-d50xyz-d65hslhwblchoklch

color1color2:表示需要混合的两个颜色,可以是CSS合法的颜色表示

p1p2:可选值,可以是0%100%之间的百分比数值,表示对应颜色在混合时的比例;按如下规则进行:

  • • 如p1p2都省略,那p1 = p2 = 50%
  • • 如p1省略,那p1 = 100% - p2
  • • 如p2省略,那p2 = 100% - p1
  • • 如p1 = p2 = 0%,那么函数无效
  • • 如p1 + p2 ≠ 100%,那p1' = p1 / (p1 + p2)p2' = p2 / (p1 + p2)

总结就是p1 + p2要为100%,实际使用时只需要写其中一个即可,另一个由CSS自动计算即可

cover12

CSS 的颜色函数,早已不只是“描述颜色”的语法糖,其还具备了可计算、可逻辑化的能力

在现代视觉系统中,我们不再只是“挑颜色”,而是在编排色彩逻辑—亮与暗、冷与暖、主与辅,都能用公式精准描述

赞(0)
未经允许不得转载:OveUI » 设计师看懵,程序员却上头:CSS 函数有多强?~(颜色篇)
分享到