十六进制转HSL转换器

把 #RRGGBB(可带或不带井号)粘进来,本页换算成 HSL 三元组并显示色块,帮你在需要 hsl() 写法时快速得到同一颜色。

口径:按 W3C CSS Color 定义换算,支持 3 位缩写与 6 位写法;演示 #0080FF 对应 hsl(210, 100%, 50%)。

使用方法

十六进制转HSL转换器三步:

  1. 在「十六进制色值」里填 #RRGGBB,演示 #0080FF;3 位缩写如 #08F 也支持。
  2. 点「换算」,结果区给出 hsl(210, 100%, 50%) 与色块。
  3. 点「复制 HSL」拿走,或「导出对照表 CSV」保存常见颜色的换算表。

十六进制转HSL转换器能解决什么

它适合需要 HSL 写法的场景:

  • 调色更直观:HSL 里改一个 S 就变灰、改 L 就变亮,比手改十六进制方便。
  • 生成色阶:拿到主色 HSL 后,固定 H、S 微调 L 即可做出一组同色系。
  • 对齐设计:设计给 #HEX,代码要 hsl(),一步换好。

还有一个常被忽略的用途是校验设计稿:当设计师标的是 hsl()、而接口或素材返回的是 #HEX 时,用本页把 #HEX 换算一遍,就能确认两边指的是同一个颜色,避免主题色对不上却发现不了。

本页不做的事:不做 HSL 转 HEX 的反向换算(请用站内 HSL 转 RGB 工具),也不生成配色方案。

原理和变量

① 用了哪个具体函数:先把 6 位十六进制拆成 R、G、B 三个 0~255 整数并归一化到 0~1,再按标准公式求最大最小值 max、min,用 L=(max+min)/2、S=(max-min)/(1-|2L-1|)、并按 max 落在哪个通道求 H。

② 关键参数为什么这样取:H 用 60° 分段再乘 6,是因为色相环共 360°、每 60° 一段;S 公式带绝对值,是为了让 L 在 0.5 两侧都能正确归一。

③ 遵循哪个标准:换算与 W3C CSS Color 的 hsl() 定义一致,结果与浏览器渲染应吻合。

④ 输入怎么变成输出:#0080FF → R=0、G=128、B=255;max=255、min=0,L=50%;S=(255-0)/(255)=100%;max 在 B 通道得 H=210°。

⑤ 边界与阈值:仅接受 3 位或 6 位十六进制;含非法字符或长度不对会提示;灰度色(R=G=B)的 S 为 0,H 视为 0。

⑥ 常见误用的正确解释:HSL 的 L 不是感知亮度,同一 L 下不同 H 观感明暗不同;H 为 0 不代表「没有颜色」,S 才决定是否灰。

完整示例

演示输入 #0080FF,展开为 R=0、G=128、B=255。推导:

  • max = 255、min = 0;亮度 L = (255+0)/2 ÷ 255 = 50%。
  • 饱和度 S = (255−0)/(255−|2×127.5−255|) → 归一后 = 100%。
  • max 落在 B 通道,H = 60×(4 + (R−G)/(max−min)) = 60×(4 + (0−128)/255) ≈ 210°。
  • 结果:hsl(210, 100%, 50%)。

再试 #FF0000 得 hsl(0, 100%, 50%),纯灰 #808080 得 hsl(0, 0%, 50%)。演示仅作说明。

输入范围与对照表

12 组常见 #HEX 的 HSL 对照(H=色相,S=饱和度,L=亮度):

#HEXHSL
#FF00000100%50%
#FF800030100%50%
#FFFF0060100%50%
#00FF00120100%50%
#00FFFF180100%50%
#0080FF210100%50%
#0000FF240100%50%
#FF00FF300100%50%
#80808000%50%
#00000000%0%
#FFFFFF00%100%
#4080BF21050%50%

结果边界和舍入

H 取整到度,S、L 四舍五入取整数百分比,因此相邻颜色可能落到同一个 HSL。灰度色的 S 为 0、H 记为 0;纯黑与纯白的 S 与 H 都视为 0,只有 L 分别为 0% 与 100%。

当 max 与 min 相等(即灰色)时色度为 0,色相在数学上没有定义,本页统一记为 H=0;这不影响颜色还原,因为 S=0 时无论 H 取多少,结果都是同一个灰阶。

另一个细节:本页把 R、G、B 归一化后直接代入公式,未做伽马校正,因此与 sRGB 线性空间的定义略有不同。对日常取色而言这点差别肉眼难辨,但做精确色彩管理时请注意。

本页输出 6 位等价色的 HSL,不含 alpha;如需透明度请另行指定。

常见问题

支持 3 位缩写吗?

支持。例如 #08F 会被展开为 #0088FF 再换算。

可以不带井号吗?

可以,输入 0080FF 也能识别;带井号更规范。

为什么 HSL 转回 HEX 会有细微差别?

因为 H 取整到度、S/L 取整到百分比,反向换算可能出现 ±1 的色值差,属正常舍入。

纯黑的 HSL 是多少?

#000000 对应 hsl(0, 0%, 0%),此时饱和度与色相都不影响结果。

转换会上传颜色吗?

不会,全部在浏览器本地计算。

L 一样为什么看起来明暗不同?

因为 HSL 的 L 是几何中点而非感知亮度,不同色相在相同 L 下观感会有差异。

能批量转换一串颜色吗?

本页一次转一个,批量可参考导出的对照表 CSV。

支持 8 位带透明度写法吗?

不支持,本页只处理 3 位与 6 位不含 alpha 的写法。

相关工具