HEX 转 HSL 转换器

在线把 HEX 颜色值转成 HSL:边输边出结果,附换算示例和常用颜色对照表,免费即用。

换算示例

HEX #ff5733 = HSL 11, 100%, 60%

换算原理

  • HEX 颜色码就是 RGB 三个通道的十六进制写法:每个通道两位,00 表示 0,ff 表示 255。
  • HSL 用色相(0–360° 色环)、饱和度和亮度来描述同一个颜色,想把颜色调暗或降饱和,直接改对应分量就行。

常用颜色 HEX / HSL 对照表

颜色HEXHSL
红色#ff00000, 100%, 50%
橙色#ffa50039, 100%, 50%
黄色#ffff0060, 100%, 50%
绿色#008000120, 100%, 25%
青色#00ffff180, 100%, 50%
蓝色#0000ff240, 100%, 50%
紫色#800080300, 100%, 25%
粉色#ffc0cb350, 100%, 88%
棕色#a52a2a0, 59%, 41%
白色#ffffff0, 0%, 100%
灰色#8080800, 0%, 50%
黑色#0000000, 0%, 0%

所有换算都在你的浏览器里完成,输入内容不会上传到 BroBroGo。

常见问题

HEX 怎么转成 HSL?

在上方输入或粘贴 HEX 值,HSL 值会边输边更新;也可以点色块直接选色。

换算结果精确吗?

数值会四舍五入到整数,这也是 CSS 和设计工具的常用写法,误差远低于肉眼可辨的程度。

什么是HEX色码与HSL色值

HEX色码(十六进制颜色码)是RGB颜色模型在Web中的紧凑表示。标准六位格式如#1E90FF,每位十六进制数代表一个0–255的RGB分量:前两位红、中间两位绿、后两位蓝。三位缩写#abc等价于#aabbcc,适用于重复数字对。HEX不携带透明度信息(标准用法),且是人眼不易直接理解的原始RGB记法——改变任意一位数字,红、绿、蓝分量同时变化,难以预测最终视觉效果。

HSL(色相、饱和度、明度)是专为人类感知设计的颜色模型。色相(H)以0–360°表示色轮上的位置:0°红、120°绿、240°蓝。饱和度(S)0–100%表示灰到纯色的程度。明度(L)0–100%表示黑到白。调整明度或饱和度时,色相保持不变,这是设计师快速生成同色系变体的基础。HSL同样不包含alpha通道,始终对应完全不透明颜色。

转换方法:从十六进制到HSL的数学原理

HSL值无法直接从HEX得到,需要先转换为RGB,再应用RGB→HSL算法。

步骤1:HEX转RGB
将每两位十六进制数转换为十进制。例如#4f46e5

  • 红:4f = 4×16 + 15 = 79
  • 绿:46 = 4×16 + 6 = 70
  • 蓝:e5 = 14×16 + 5 = 229
    结果RGB (79, 70, 229)。

步骤2:RGB归一化
将每个分量除以255得到0–1范围小数:R'=79/255≈0.310, G'=70/255≈0.275, B'=229/255≈0.898。

步骤3:计算HSL

  • 最大分量=max(R',G',B'),最小分量=min(R',G',B'),差值Δ=最大-最小。
  • 明度L=(最大+最小)/2。
  • 若Δ=0,饱和度为0,色相未定义(通常设为0)。
  • 否则,饱和度S=Δ/(1-|2L-1|)。
  • 色相H:若最大值是R',H=60°×( (G'-B')/Δ mod 6 );若最大值是G',H=60°×( (B'-R')/Δ + 2 );若最大值是B',H=60°×( (R'-G')/Δ + 4 )。
    本例中最大值B'≈0.898,最小值G'≈0.275,Δ≈0.623,L≈(0.898+0.275)/2≈0.586,S≈0.623/(1-|2×0.586-1|)=0.623/(1-0.172)=0.752→75.2%,H=60°×( (0.310-0.275)/0.623 +4 )=60°×(0.056+4)=243.4°。最终HSL(243°, 75%, 59%)。

本页自动执行此转换,即时显示结果。

为什么HSL比HEX更适合人工作业

前端开发者和UI设计师频繁使用HSL的场景包括:

  • 主题系统与变量:用HSL定义CSS自定义属性(如 --primary: hsl(243°, 75%, 59%)),只需修改明度值即可生成hover态、禁用态,无需计算十六进制变体。
  • 调色板生成:在色相轮上旋转固定度数(如30°、60°)获得互补、类比配色,始终保持饱和度与明度一致。
  • 可访问性调整:WCAG对比度要求下,增加或减小明度值(保持色相不变)可快速获得符合AA/AAA标准的颜色,而HEX直接改数值很难控制亮度变化。
  • 暗色模式:将同一色相的明度降低到20%–30%即可得到深色版本,避免手动对比HEX深浅。

HEX的原始RGB表示在这些任务中效率极低:每改变一个数字都会影响三个分量,且十六进制加减并不直观反映亮度高低。

边缘情况与注意事项

无效输入
本页只接受标准六位或三位十六进制码(可带或不带#)。若输入#GGG12345red,页面显示错误提示:“Enter a hex color like #4f46e5 or #abc.” 不进行模糊匹配。

三位缩写
#abc自动展开为#aabbcc,例如#fff#ffffff→白。注意三位缩写不能表示任意颜色,仅当每对分量重复时才等价。

超出可见色域
用户在HSL或LAB、CMYK输入框中填入不可显示的数值时,页面会调整到最接近的可显示颜色。例如HSL色相360°以外的值(如400°)会先取模到0–360再转换;饱和度或明度超过100%被钳位。调整后HEX可能与原始意图略有偏差,这是色域限制的必然结果。

CMYK的局限
页面同时显示CMYK值,但强调这是屏幕估算,基于标准转换公式(RGB→CMY→加上黑色分量),未针对特定印刷机或墨水曲线校正。专业印刷仍需使用ICC配置文件。

无alpha通道
所有转换均假设完全透明(alpha=1)。如果输入包含八位十六进制(如#4f46e5ff),本页会忽略最后两位(无此功能介绍,但应认为未支持)。HSL本身也不支持alpha,如需要透明度应使用HSLA(需单独工具)。

其他颜色空间的一并展示

输入HEX后,页面不仅给出HSL,还同步显示HEX(重新规范化)、RGB(0–255整数)、HSV(色相0–360,饱和度0–100%,明度0–100%)、CMYK(0–100%)、LAB(L0–100,a、b*范围约-128–127)。这些输出可一键复制。其中HSV与HSL的S、V/L维度不同:HSV的明度V定义为最大RGB分量,而HSL的明度L为平均值。相同HEX在HSV中可能有不同视觉表现,设计师需知晓差异。

常见问题(FAQ)

问:六位HEX和三位HEX本质有什么区别?
答:三位缩写是六位的压缩形式,每个通道的数值每两位数相同。例如#a1b2c3不能简写,而#aabbcc可写为#abc。转换结果完全一致。

问:HSL的色相0°和360°是相同颜色吗?
答:是。色相环是循环的,0°和360°都对应红色。本页输出时色相取模360,范围0–359。

问:我输入了#000,HSL输出是什么?
答:#000为纯黑,RGB(0,0,0)。HSL计算中Δ=0,饱和度为0%,明度为0%。色相无意义,工具通常显示0°。

问:页面转换会消耗网络流量吗?
答:不会。所有数学计算在浏览器JavaScript中完成,输入不会上传到任何服务器,可离线使用。

问:为什么CMYK值与专业软件不同?
答:本页采用通用RGB→CMYK算法(不考虑色彩管理),而专业软件会针对特定印刷纸材和油墨配置文件进行转换。此处CMYK仅供屏幕参考,不能直接用于印刷作业。

问:我想从HSL反向得到HEX,这个页面支持吗?
答:本页专门设计为HEX→HSL方向。若需要反向转换,请使用本站的HSL→HEX页面。输入HSL值后自动显示对应HEX及所有其他格式。