RGB无法直接调节色调和饱和度,因其是立方体坐标系;HSL则通过色相(0–360°)、饱和度(0%–100%)、亮度(0%–100%)实现直观可控的色彩调整与平滑渐变。
rgb 是基于红绿蓝三原色叠加的立方体模型,rgb(255, 0, 0) 是红色,rgb(0, 255, 0) 是绿色——但“把红色调得更饱和一点”没有对应操作。你只能手动增减数值,没有统一方向可循。hsl 则不同:h(色相)是 0–360 的角度值,s(饱和度)是 0%–100%,l(亮度)同理。想让一个蓝色更鲜艳?只改 s;想从蓝变紫?只调 h。
线性渐变中若用 rgb,rgb(0, 0, 255) → rgb(128, 0, 255) → rgb(255, 0, 255) 看似从蓝到品红,实际中间会经过灰紫、粉紫等不可预测的过渡。而 hsl 下,hsl(240, 100%, 50%)(纯蓝)→ hsl(300, 100%, 50%)(纯品红)→ hsl(360, 100%, 50%)(即 hsl(0, 100%, 50%),纯红),色相值均匀变化,视觉过渡平滑且可预期。
hsl(120, 80%, 60%) → hsl(180, 80%, 60%))hsl(0, 80%, 60%) → hsl(120, 80%, 60%))hsl(350, ...) → hsl(10, ...),浏览器能识别,但手工计算易错;建议统一用 0–360 范围并显式处理环绕仅靠改变 h 做渐变,容易显得“过亮”或“发灰”。真实设计中常需同步微调 s 和 l:
s(如 hsl(200, 90%, 50%) → hsl(260, 60%, 40%))h 不变,提高 s 和略提 l(hsl(180, 70%, 55%) → hsl(180, 90%, 65%))hsl() 值;可用 PostCSS 
hsl() 自 IE9 起就已支持,现代项目无需降级。但以下问题高频出现:
hsl(240 100% 50%)(空格分隔):这是 CSS Color Level 4 语法,Chrome/Firefox 支持,但 Safari 15.4 及更早版本**不支持**;必须用逗号分隔:hsl(240, 100%, 50%)
hsl(240, 1, 0.5)):无效,s 和 l 必须带 %
to right, hsl(0,100%,50%) 0%, hsl(120,100%,50%) 50%, hsl(240,100%,50%) 100%
background: linear-gradient( to right, hsl(200, 90%, 50%) 0%, hsl(230, 85%, 55%) 50%, hsl(260, 80%, 60%) 100% );hsl 的色相是环状的,但 CSS 渐变是线性的;想做环形渐变(比如饼图色环),得用 conic-gradient,而不是靠 hsl 模拟。