HSL 颜色值使用完全指南
理解 HSL 三个参数
HSL 是色调(Hue)、饱和度(Saturation)、亮度(Lightness)的缩写,是一种比 HEX 和 RGB 更符合人类直觉的颜色表示方法。
- **色调(Hue):**0–360 的角度值,代表色轮上的位置。0°/360° = 红色,120° = 绿色,240° = 蓝色。
- **饱和度(Saturation):**0%–100% 的百分比,0% 为灰色,100% 为最鲜艳的纯色。
- **亮度(Lightness):**0%–100% 的百分比,0% 为黑色,100% 为白色,50% 为该色调的标准颜色。
hsl(H, S%, L%)
hsl(220, 80%, 50%) /* Medium blue */
hsl(0, 0%, 50%) /* Middle gray */
hsl(45, 100%, 60%) /* Golden yellow */
CSS 中 HSL 的语法
在 CSS 中使用 hsl() 函数表示颜色,现代 CSS 规范也支持使用空格分隔而不使用逗号:
/* Traditional comma syntax */
color: hsl(220, 80%, 50%);
background: hsla(220, 80%, 50%, 0.5);
/* Modern space syntax (CSS Color Level 4) */
color: hsl(220 80% 50%);
color: hsl(220 80% 50% / 0.5); /* with alpha */
两种语法在现代浏览器中均有效。推荐使用逗号语法以获得更广泛的浏览器兼容性,或使用空格语法以与 CSS Color Level 4 规范保持一致。
HSL 的最大优势:可预测的颜色调整
HSL 最强大的特性是,你可以通过只修改一个参数来可预测地改变颜色外观。这在 HEX 或 RGB 格式中几乎不可能做到:
- 只改变 H(色调):得到不同色相但相同"感觉"的颜色(同样鲜艳、同样明亮)
- 只改变 S(饱和度):在鲜艳色和灰色之间变化
- 只改变 L(亮度):在黑色和白色之间变化,创建深浅变体
在设计系统中使用 HSL 变量
将 HSL 的三个分量拆分为独立的 CSS 自定义属性,是构建灵活设计系统的有力技术:
:root {
--primary-h: 220;
--primary-s: 80%;
--primary-l: 50%;
--primary: hsl(var(--primary-h), var(--primary-s), var(--primary-l));
--primary-light: hsl(var(--primary-h), var(--primary-s), 70%);
--primary-dark: hsl(var(--primary-h), var(--primary-s), 30%);
--primary-muted: hsl(var(--primary-h), 30%, 60%);
}
/* Dark mode override: just change lightness */
@media (prefers-color-scheme: dark) {
:root {
--primary-l: 60%; /* Slightly lighter in dark mode */
}
}
使用 HSL 实现主题切换
HSL 非常适合实现深色/浅色模式切换。由于颜色的"感觉"(色调和饱和度)保持不变,只需调整亮度值即可实现协调的主题切换,而不会产生颜色感觉突变的问题:
:root {
--bg: hsl(220, 20%, 98%);
--text: hsl(220, 20%, 10%);
--surface: hsl(220, 20%, 94%);
}
[data-theme="dark"] {
--bg: hsl(220, 20%, 8%);
--text: hsl(220, 20%, 92%);
--surface: hsl(220, 20%, 14%);
}
HSL 的局限性
尽管 HSL 对人类非常直观,但它并不是感知均匀的颜色空间。这意味着,不同色调的颜色即使 L 值相同,在人眼看来也可能有明显的亮度差异。例如,hsl(60, 100%, 50%)(黄色)看起来比 hsl(240, 100%, 50%)(蓝色)亮得多,即使两者的 L 值都是 50%。
如需感知均匀的颜色调整,可以考虑使用 CSS Color Level 4 中的 oklch() 函数,它在现代浏览器中获得了越来越广泛的支持。
色轮上的关键色调值
- 0° / 360° = 红色
- 30° = 橙色
- 60° = 黄色
- 90° = 黄绿色
- 120° = 绿色
- 180° = 青色
- 210° = 天蓝色
- 240° = 蓝色
- 270° = 紫色
- 300° = 品红色
- 330° = 玫瑰红
立即免费使用相关工具
免费使用 →