纯 CSS 不支持 lighten()/darken() 等函数,需用 color-mix()、hsl()、oklch() 等原生能力替代:color-mix(in oklch, #3498db 70%, white 30%) 模拟 mix(),oklch() 提供感知均匀明度调节,CSS 变量配合 calc() 仅支持固定值加减,且须注意浏览器兼容性与色彩空间支持差异。

纯 CSS 本身不支持 lighten()、darken() 这类颜色函数,所以“在 CSS 中用颜色函数”本质上是指用现代 CSS 原生能力替代预处理器逻辑——不是真把 Sass 函数搬进 CSS,而是用 color-mix()、hsl()、oklch() 等原生函数达成类似效果,从而减少对 Sass 编译的依赖。
用 color-mix() 替代 mix() 和 lighten()/darken()
color-mix() 是目前最接近 Sass mix() 的原生方案,支持按比例混合两种颜色,且可指定色彩空间(推荐 lch 或 oklch,视觉更均匀)。
- 写法:
color-mix(in oklch, #3498db 70%, white 30%)→ 比 Sass 的mix(#3498db, white, 30%)更可控,且无需编译 - 注意:
color-mix()尚未在所有浏览器中默认启用(Chrome 111+、Safari 16.4+、Firefox 117+ 支持),需检查目标环境 - 不能直接替代
lighten($color, 20%),但可用color-mix(in oklch, $color, white 20%)模拟,效果比 HSL 的lighten()更自然
用 hsl() 或 oklch() 手动调光,绕过 lighten()/darken() 编译
Sass 的 lighten() 操作的是 HSL 的 L 通道,但它是非线性的;而原生 hsl() 允许你显式控制亮度值,oklch() 更进一步提供感知均匀的明度调节。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 例如:把
lighten(#3498db, 20%)改成hsl(208, 65%, 60%)(先用工具查出原色 HSL,再手动调高 L 值) - 更优写法:
oklch(0.65 0.22 250),其中第二项是色度(chroma),第三项是色相(hue),第一项是明度(lightness)——调整第一个数即可线性变亮/变暗 - 缺点:无法动态计算,必须提前算好值;若需运行时调整(如主题切换),得靠 JS 注入或 CSS 变量 +
calc()配合
用 CSS 自定义属性 + calc() 模拟简单颜色运算
当只需要微调饱和度、明度或透明度,且变化幅度固定时,CSS 变量配合 hsl() 参数可实现轻量级“运算”,无需预处理器介入。
- 定义:
:root { --primary-h: 208; --primary-s: 65%; --primary-l: 50%; } - 使用:
background-color: hsl(var(--primary-h), var(--primary-s), calc(var(--primary-l) + 10%)); - 限制明显:只支持加减固定数值,不支持百分比乘除、颜色混合、单位转换等复杂逻辑
- 别指望用
rgba(var(--color), 0.8)——var(--color)不能直接传入rgba(),会解析失败;必须拆成--r、--g、--b三变量再组合
真正能减少编译依赖的,不是“把 Sass 函数抄进 CSS”,而是明确哪些颜色操作必须编译(比如基于变量的动态混合)、哪些可以前置计算或用原生函数兜底。最容易被忽略的是:浏览器支持断层和色彩空间选择——oklch() 在 Safari 上支持但部分安卓 WebView 不认,color-mix() 在 Firefox 需开启 flag。别只测 Chrome,上线前务必跑真实设备验证。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










