color-mix是CSS中用于混合两种颜色并生成单一新颜色的函数,需结合渐变函数实现过渡效果。其语法为color-mix(in <colorspace>, <color1> <percentage1>, <color2> <percentage2>),关键在于选择颜色空间如srgb、lch、oklch等,不同空间影响混合后的亮度、饱和度和色相表现。srgb基于RGB通道线性插值,易产生灰暗混合色;而lch和oklch为感知均匀空间,能生成更鲜艳自然的过渡色。color-mix本身不创建渐变,但可与linear-gradient配合,通过计算中间色提升渐变质量。结合CSS自定义属性,可动态生成复杂渐变和响应式主题色,例如在深色模式下调整混合基准色以优化视觉效果。它与传统渐变函数互补,前者解决颜色“计算”,后者处理颜色“分布”。合理选用颜色空间并搭配变量,能使颜色系统更智能、一致且易于维护。

color-mix
color-mix
color-mix(in <colorspace>, <color1> <percentage1>, <color2> <percentage2>)
in <colorspace>
srgb
lch
oklch
hsl
hwb
lab
oklab
<color1> <percentage1>
<color2> <percentage2>
如果只为其中一种颜色指定了百分比,那么另一种颜色将自动占据剩余的百分比(例如,
color-mix(in srgb, red 20%, blue)
基本用法示例:
立即学习“前端免费学习笔记(深入)”;
假设你想混合红色和蓝色,得到一种紫色:
.mixed-color-srgb {
background-color: color-mix(in srgb, red 50%, blue); /* 结果可能偏暗或偏灰 */
}
.mixed-color-lch {
background-color: color-mix(in lch, red 50%, blue); /* 结果通常更鲜艳、更符合感知 */
}如何实现渐变混合效果:
color-mix
linear-gradient()
radial-gradient()
示例:使用color-mix
:root {
--start-color: #ff0000; /* 红色 */
--end-color: #0000ff; /* 蓝色 */
/* 使用 color-mix 在 LCH 颜色空间中混合出中间色 */
--mid-color-perceptual: color-mix(in lch, var(--start-color) 50%, var(--end-color));
/* 使用 color-mix 在 sRGB 颜色空间中混合出中间色 */
--mid-color-srgb: color-mix(in srgb, var(--start-color) 50%, var(--end-color));
}
.gradient-with-perceptual-mix {
background: linear-gradient(to right, var(--start-color), var(--mid-color-perceptual), var(--end-color));
height: 50px;
margin-bottom: 10px;
}
.gradient-with-srgb-mix {
background: linear-gradient(to right, var(--start-color), var(--mid-color-srgb), var(--end-color));
height: 50px;
}在这个例子中,
color-mix
linear-gradient
--mid-color-perceptual
--mid-color-srgb
color-mix
在我看来,
color-mix
linear-gradient()
radial-gradient()
传统渐变函数(如
linear-gradient
而
color-mix
所以,
color-mix
例如,如果你需要一个从红色到蓝色的渐变,并且希望中间的紫色过渡是感知上均匀且鲜艳的,那么你可以用
color-mix(in lch, red 50%, blue)
linear-gradient
我的经验是,
color-mix
srgb
lch
oklab
这绝对是使用
color-mix
srgb
#RRGGBB
rgb()
srgb
/* 红色 (255,0,0) 和 蓝色 (0,0,255) 在 sRGB 混合 */ background-color: color-mix(in srgb, red 50%, blue); /* 结果可能类似 #7f007f (偏暗的紫色) */
lch
oklch
lch
oklch
lch
oklch
srgb
oklch
lch
/* 红色和蓝色在 LCH 或 Oklch 混合 */ background-color: color-mix(in lch, red 50%, blue); /* 结果通常是更鲜艳、更纯净的紫色 */ background-color: color-mix(in oklch, red 50%, blue); /* 类似 LCH,但可能在某些边缘情况表现更好 */
hsl
hwb
/* 红色和蓝色在 HSL 混合 */ background-color: color-mix(in hsl, red 50%, blue); /* 结果取决于色相插值,可能非常鲜艳 */
总结来说,我的建议是:
如果你追求的是感知上更自然、更鲜艳、更符合人眼直觉的颜色混合效果,那么优先考虑使用
lch
oklch
如果你需要精确复制某些设计工具(如Photoshop在RGB模式下)的混合行为,或者只是进行简单的亮度/饱和度调整,那么
srgb
理解这些颜色空间的差异,并根据实际需求进行选择,是掌握
color-mix
color-mix
color-mix
创建更复杂的渐变效果:
与其硬编码渐变中的每一个颜色停止点,不如定义几个基础色,然后利用
color-mix
示例:基于两个主色生成多级渐变
:root {
--primary-color: #3498db; /* 亮蓝色 */
--secondary-color: #e74c3c; /* 红色 */
/* 使用 color-mix 计算渐变中的中间色 */
--gradient-start-light: color-mix(in oklch, var(--primary-color) 20%, white);
--gradient-mid: color-mix(in oklch, var(--primary-color) 50%, var(--secondary-color));
--gradient-end-dark: color-mix(in oklch, var(--secondary-color) 20%, black);
}
.complex-dynamic-gradient {
background: linear-gradient(
to right,
var(--gradient-start-light),
var(--primary-color),
var(--gradient-mid),
var(--secondary-color),
var(--gradient-end-dark)
);
height: 80px;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
}在这个例子中,我们只定义了
--primary-color
--secondary-color
color-mix
实现动态主题色:
color-mix
@media (prefers-color-scheme: dark)
示例:深色模式下的主题色调整
:root {
--base-theme-color: #2ecc71; /* 绿色 */
--text-color: #333;
--background-color: #f8f8f8;
--button-hover-color: color-mix(in srgb, var(--base-theme-color) 80%, black);
--accent-light: color-mix(in lch, var(--base-theme-color) 20%, white);
}
.theme-button {
background-color: var(--base-theme-color);
color: white;
padding: 10px 15px;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.theme-button:hover {
background-color: var(--button-hover-color);
}
.accent-box {
background-color: var(--accent-light);
padding: 20px;
margin-top: 20px;
border-radius: 8px;
color: var(--text-color);
}
/* 深色模式 */
@media (prefers-color-scheme: dark) {
:root {
--text-color: #eee;
--background-color: #1a1a1a;
/* 在深色模式下,按钮的 hover 效果可以与白色混合,使其变亮 */
--button-hover-color: color-mix(in srgb, var(--base-theme-color) 80%, white);
/* 重置 accent-light,使其在深色背景下依然可见 */
--accent-light: color-mix(in lch, var(--base-theme-color) 30%, #333);
}
}
body {
background-color: var(--background-color);
color: var(--text-color);
font-family: sans-serif;
}在这个例子中,深色模式下,我们不仅改变了文本和背景色,还通过
color-mix
hover
--button-hover-color
通过这种方式,
color-mix
以上就是如何使用csscolor-mix实现颜色渐变混合的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号