CSS 颜色函数:用代码调配色彩的魔法
很多人刚开始学 css 时,觉得它只是用来设定颜色、大小和位置的工具。你告诉它怎么做,它就怎么做,像是一本被动的样式手册。
但现在的 CSS 已经不一样了。它不再只是静态的样式表,而是可以计算、可以表达逻辑、可以动态变化的语言。函数,就是这种变化中最重要的一部分。
从最早的 calc() 和 var(),到现在的 color-mix()、sin() 等,CSS 正在变成一个可以“编程”的工具。这篇文章,我们先来聊聊 CSS 中那些和颜色有关的函数。
CSS 函数是什么?
CSS 函数不是传统编程中的函数,不会执行复杂的逻辑判断。它更像是一个“值的生成器”:你输入一些参数,它返回一个结果,这个结果可以直接用在 CSS 属性里。
比如,你可以用它来计算颜色、调整透明度,甚至混合两种颜色。这让配色不再是固定的,而是可以灵活变化的。
常用的颜色函数
1. rgb():不只是红绿蓝
rgb() 大家应该不陌生,它用红、绿、蓝三个通道的值来表示颜色。过去我们习惯用逗号分隔:
color: rgb(255, 0, 0); /* 红色 */这是旧版的写法。新语法中,你可以不用逗号,直接用空格分隔:
color: rgb(255 0 0); /* 红色 */如果你要设置透明度,可以加上 / 和 alpha 值:
color: rgb(255 0 0 / 0.5); /* 半透明红色 */更强大的是,rgb() 还支持“相对计算”。你可以基于某个颜色,调整它的某个通道:
color: rgb(from #336699 r g calc(b + 50));这句代码的意思是:从 #336699 这个颜色开始,保持红和绿通道不变,把蓝色通道的值加 50。
这种写法特别适合在主题色基础上微调,比如 hover 时让颜色变亮一点。
2. color():指定色彩空间
color() 函数可以让你使用不同的色彩空间来定义颜色,比如 P3 广色域:
color: color(display-p3 1 0 0); /* P3 色域下的红色 */它的语法和 rgb() 类似,但多了一个色彩空间参数。常用的色彩空间有 display-p3、rec2020 等,能显示更鲜艳的颜色。
3. hsl():更直观的调色方式
hsl() 用色相、饱和度、亮度来定义颜色,对设计师更友好:
color: hsl(120 100% 50%); /* 纯绿色 */色相(H):0-360,代表颜色种类
饱和度(S):0%-100%,颜色鲜艳程度
亮度(L):0%-100%,明暗程度
调整亮度就能轻松得到同色系的深浅变化,非常适合制作配色系统。
4. 其他颜色空间函数
CSS 还支持很多专业的色彩空间:
hwb():色相、白度、黑度
lab()、oklab():基于人眼感知的色彩空间
lch()、oklch():亮度、色度、色调
这些函数让颜色显示更准确,特别是在不同设备上。不过要注意浏览器兼容性,有些新函数在老浏览器中可能不支持。
5. color-mix():颜色混合器
这是最让人兴奋的函数之一。color-mix() 可以把两种颜色混合在一起,得到新的颜色:
color: color-mix(in srgb, red, blue); /* 红色和蓝色混合 */默认情况下,两种颜色各占 50%。你也可以指定比例:
color: color-mix(in srgb, red 30%, blue 70%); /* 30%红 + 70%蓝 */第一个参数 in srgb 指定混合使用的色彩空间。你还可以用 in hsl、in oklch 等,在不同空间混合会得到不同的结果。
这个功能以前需要借助 Sass 或 Less 才能实现,现在 CSS 原生就支持了。
实际应用场景
主题色系管理
你可以用一个主色,通过计算得到一系列辅助色:
:root {
--primary: #2e86ab;
--primary-light: rgb(from var(--primary) r g calc(b + 30));
--primary-dark: rgb(from var(--primary) calc(r - 30) g b);
}交互状态颜色
鼠标悬停时的颜色变化,现在可以自动计算:
button {
background: var(--primary);
&:hover {
background: rgb(from var(--primary) calc(r + 20) calc(g + 20) calc(b + 20));
}
}颜色混合实战
制作一个从红到蓝的渐变背景:
.hero {
background: color-mix(in oklch, var(--accent), transparent 40%);
}注意事项
浏览器兼容性:新函数在旧浏览器中可能不支持,使用时最好准备回退方案:
color: #2e86ab; /* 回退色 */
color: color(display-p3 0.3 0.5 0.8);性能考虑:复杂的颜色计算会增加渲染负担,但现代浏览器优化得很好,影响很小。
色彩空间选择:srgb 最安全,display-p3 显示范围更广,oklch 和 oklab 感知上更均匀。
结语
CSS 的颜色函数,让我们从“挑选颜色”进入了“设计颜色系统”的时代。你可以用数学关系来定义颜色之间的逻辑,让配色变得更有条理、更灵活。
亮与暗、主与次、冷与暖,现在都可以用代码精确控制。这不仅是语法的进步,更是设计思维的升级。
试着在你的下一个项目中用上这些颜色函数,你会发现,CSS 比你想象的更强大。
注:本文涉及的 CSS 函数均基于最新标准,部分功能可能需要较新的浏览器版本支持。实际开发时建议查看 Can I Use 网站了解具体兼容情况。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!