CSS 渐变:为何你的颜色过渡显得浑浊以及如何修复

发布: (2026年3月25日 GMT+8 10:02)
4 分钟阅读
原文: Dev.to

Source: Dev.to

为什么渐变会显得浑浊

当你在两个鲜艳的颜色之间创建渐变时,可能会在中间看到意外的灰色条带。这是因为浏览器在默认的 sRGB 颜色空间中进行颜色插值,该空间在 RGB 立方体中沿直线进行插值。

例如,蓝色 (#0000FF) 与 黄色 (#FFFF00) 之间的直线经过大约 #808080 的中点——一个真正的灰色。RGB 模型并不符合人类的颜色感知,所以在感知上不同的颜色在 RGB 空间中可能很接近,反之亦然。

颜色插值与感知颜色空间

为了避免浑浊的过渡,应在感知颜色空间中进行颜色插值。现代 CSS 允许使用 in 关键字指定插值空间。

/* sRGB 中的浑浊过渡 */
.gradient-srgb {
  background: linear-gradient(to right, blue, yellow);
}

/* OKLCH 中的鲜艳过渡 */
.gradient-oklch {
  background: linear-gradient(in oklch to right, blue, yellow);
}

in oklch 语法告诉浏览器在 OKLCH 颜色空间中进行插值,该空间的路径经过更丰富的色相而不是灰色,从而产生自然的渐变效果。

CSS 渐变函数

线性渐变

沿直线创建过渡。

background: linear-gradient(135deg, #667eea, #764ba2);
  • 角度 定义方向:0deg(从下到上),90deg(从左到右),135deg(左上到右下)。
  • 也可以使用关键字,如 to rightto bottom left 等。

径向渐变

从中心点向外扩展过渡。

background: radial-gradient(circle at 30% 50%, #667eea, #764ba2);
  • 形状:circleellipse
  • 位置(at 30% 50%)设置中心;默认是元素中心的椭圆。

锥形渐变

围绕中心点进行过渡,类似色轮。

background: conic-gradient(from 0deg at 50% 50%, #667eea, #764ba2, #667eea);

锥形渐变非常适合饼图、颜色选择器和径向进度指示器。

控制颜色停靠点

默认情况下,颜色停靠点均匀分布,但你可以显式定位它们。

/* 蓝色占据大部分渐变 */
background: linear-gradient(
  to right,
  #667eea 0%,
  #667eea 60%,
  #764ba2 100%
);

硬边缘

在同一位置放置两个停靠点会产生锐利的边界。

/* 50% 处的锐利颜色边界 */
background: linear-gradient(
  to right,
  #667eea 50%,
  #764ba2 50%
);

中点提示

使用颜色提示可以移动过渡的中点位置。

background: linear-gradient(
  to right,
  #667eea,
  30%,               /* 中点在 30% 而不是 50% */
  #764ba2
);

添加中间停靠点以增加层次感

仅使用两种颜色的渐变可能显得平淡。加入中间停靠点可以提升感知深度。

/* 平淡 */
background: linear-gradient(135deg, #667eea, #764ba2);

/* 丰富且有层次感 */
background: linear-gradient(
  135deg,
  #667eea 0%,
  #5a67d8 30%,
  #764ba2 100%
);

中间颜色应是保持鲜艳度的混合色。在感知颜色空间(例如 OKLCH)中选择它,比简单的算术平均效果更好。

0 浏览
Back to Blog

相关文章

阅读更多 »