工具大全
开发者工具2026年4月21日709 次阅读约 5 分钟阅读

颜色转换完全指南:HEX、RGB、HSL 与现代 CSS 配色(2026)

颜色转换:前端工程师每天都在做的事

打开浏览器 DevTools 看任意一个网站的样式,颜色值通常是这样混搭的:

.button {
  background: #3b82f6;             /* HEX */
  color: rgb(255 255 255);         /* RGB */
  border-color: hsl(217 91% 60%);  /* HSL */
  box-shadow: 0 4px 12px oklch(0.7 0.15 230 / 0.4);  /* OKLCH */
}

每种颜色表示法都有适用场景:HEX 用于设计稿对接、RGB 用于程序计算、HSL 适合做主题色调整、OKLCH 是 2026 年现代设计系统的首选。本指南帮你彻底搞懂这些格式之间的关系,并掌握高效的转换方法。


主流颜色格式对比

HEX:设计师的母语

最古老也最普及的格式:#RRGGBB,每两位是一个十六进制数(00-FF),分别代表红绿蓝。

#3b82f6  /* 蓝色 */
#3B82F6  /* 同上,大小写不影响 */
#3b82f6cc  /* 8 位 = RGB + Alpha 透明度 */
#3bf  /* 简写,等价于 #33bbff */

优点:紧凑、可复制、Photoshop/Figma 直接用 缺点:无法直观看出颜色关系,调浅/调深需要重新计算

RGB / RGBA:浏览器的内部表示

rgb(59 130 246)         /* 现代语法(推荐) */
rgb(59, 130, 246)       /* 老语法,逗号分隔 */
rgba(59 130 246 / 0.8)  /* 带透明度,用斜杠分隔 */

优点:直接对应像素值、可程序化生成、易做线性混色 缺点:人类很难凭数字判断颜色

HSL:调色板的瑞士军刀

hsl(217 91% 60%)  /* 色相 / 饱和度 / 亮度 */
  • H(Hue 色相):0-360 度,红橙黄绿青蓝紫绕一圈
  • S(Saturation 饱和度):0%(灰)到 100%(最艳)
  • L(Lightness 亮度):0%(黑)到 100%(白),50% 是最饱和的纯色

杀手锏:固定 H/S,只调 L 就能批量生成主题色阶(这就是 Tailwind blue-50 → blue-900 的原理)。

OKLCH:2026 年的新标准

CSS Color Module Level 4 引入的现代格式,感知均匀——参数变化和视觉变化成正比:

oklch(0.7 0.15 230)  /* 亮度 / 色度 / 色相 */
  • L:感知亮度,0(黑)到 1(白)
  • C:色度(接近饱和度),0 到 0.4 左右
  • H:色相,0-360 度

为什么值得切换? HSL 的「亮度」其实是数学定义,不符合人眼感知。HSL lightness: 50% 的黄色看起来亮、紫色看起来暗。OKLCH 真正做到「数值相同,视觉一样亮」,是设计系统的福音。


在线一键转换:3 步完成

不用记复杂公式,打开 MagicTools 颜色转换工具:

  1. 输入任意格式:粘贴 HEX、RGB、HSL、颜色名(red/blue/...)都可以
  2. 自动转换:所有格式同时显示,复制即可
  3. 可视化预览:右侧实时显示色块,肉眼校对

工具支持 8 种主流格式互转,包括 HEX、RGB、HSL、HSV、OKLCH、LAB、CMYK 和颜色名。


常用转换规则速查

HEX ↔ RGB

每两位 HEX 转十进制即可:

#3b82f6
3b = 59
82 = 130
f6 = 246
→ rgb(59, 130, 246)

JavaScript 一行实现:

const hexToRgb = hex => hex.match(/\w\w/g).map(x => parseInt(x, 16));
hexToRgb('3b82f6');  // [59, 130, 246]

const rgbToHex = (r, g, b) =>
  '#' + [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('');
rgbToHex(59, 130, 246);  // '#3b82f6'

RGB ↔ HSL

公式较复杂,建议直接用工具或库(chroma.js、color、culori)。理解原理即可:

  • 找到 R/G/B 中的最大值和最小值
  • 平均值 → L(亮度)
  • 最大-最小差值 → S(饱和度)
  • 哪个通道是最大值决定 H(色相)

CSS 颜色名 → HEX

CSS 标准定义了 147 个具名颜色:

颜色名 HEX 用途
tomato #FF6347 警示/番茄红
slategray #708090 中性背景
forestgreen #228B22 自然主题
dodgerblue #1E90FF 链接色

完整列表在 MDN Named Colors 可查。


实战场景

场景 1:从 Figma 设计稿落地代码

设计师给的色值通常是 HEX,但你的设计系统用 OKLCH:

Figma: #3b82f6
↓ 转换
oklch(0.624 0.198 259.81)

把 OKLCH 写进 CSS 变量,后续调色就能用感知友好的方式:

:root {
  --primary: oklch(0.624 0.198 259.81);
  --primary-light: oklch(0.75 0.15 259.81);  /* 只调亮度 */
  --primary-dark: oklch(0.45 0.2 259.81);
}

场景 2:动态调整透明度

需要一个颜色的 30% 透明版本:

/* HEX 8 位写法 */
background: #3b82f64d;  /* 4d = 77/255 ≈ 30% */

/* RGB 写法(更易读) */
background: rgb(59 130 246 / 30%);

/* HSL/OKLCH 同理 */
background: oklch(0.624 0.198 259.81 / 0.3);

场景 3:生成主题色阶

Tailwind 那种 50/100/200/.../900 的色阶,本质是固定色相+饱和度,调亮度。用 HSL 一行公式生成:

const generateScale = (hue, sat) => {
  const lightnesses = [97, 92, 85, 75, 60, 47, 38, 30, 22];  // 9 档
  return lightnesses.map(l => `hsl(${hue} ${sat}% ${l}%)`);
};

generateScale(217, 91);  // tailwind blue 同款

场景 4:暗色模式取色

暗色模式不能简单反转颜色。用 OKLCH 镜像亮度更自然:

/* 浅色模式 */
:root {
  --bg: oklch(0.98 0.01 240);
  --text: oklch(0.2 0.02 240);
}

/* 暗色模式:L 值取反 */
[data-theme="dark"] {
  --bg: oklch(0.18 0.01 240);
  --text: oklch(0.92 0.02 240);
}

颜色无障碍:必须满足的对比度

WCAG 2.1 规定:

内容类型 AA 等级 AAA 等级
正文(< 18pt) 4.5:1 7:1
大字体(≥ 18pt) 3:1 4.5:1
图形/UI 控件 3:1 -

实用工具:

  • 浏览器 DevTools 内置对比度检查(鼠标悬停元素时自动显示)
  • WebAIM Contrast Checker(在线计算)
  • VS Code 的 Color Highlight 插件

踩坑提示:紫色按钮配白字、灰底配淡灰字是最常见的低对比度错误。设计稿好看不代表能上线,必须用工具校验。


颜色管理的工程化建议

1. 全部用 CSS 变量,禁止硬编码

/* ❌ 反例 */
.button { background: #3b82f6; }
.link { color: #3b82f6; }

/* ✅ 正例 */
:root { --primary: #3b82f6; }
.button { background: var(--primary); }
.link { color: var(--primary); }

2. 命名按用途,不按外观

/* ❌ 不可维护 */
--blue-500: #3b82f6;
.cta-button { background: var(--blue-500); }

/* ✅ 可维护 */
--color-primary: #3b82f6;
--color-cta-bg: var(--color-primary);
.cta-button { background: var(--color-cta-bg); }

未来换主色只改一行,不用全局搜索替换。

3. 在 Figma 中同步 Variables

Figma 2025 的 Variables 功能可以和代码 token 双向同步。设计师改色 → 自动生成 PR,避免人工对色环节的损耗。

4. 集中管理在 design tokens 文件

{
  "color": {
    "primary": { "value": "#3b82f6" },
    "primary-hover": { "value": "{color.primary}" }
  }
}

用 Style Dictionary 等工具,一份 token 同时输出 CSS、SCSS、iOS、Android 多端。


常见问题 FAQ

Q: HEX 8 位(带透明度)兼容性如何? A: 现代浏览器(Chrome 62+、Firefox 49+、Safari 9.1+)全面支持。IE 11 不支持,但 2026 年 IE 11 已彻底退役。

Q: OKLCH 现在能放心用吗? A: Chrome/Edge/Firefox/Safari 全部支持(Safari 15.4+、其他浏览器 2023 年后)。如果不需要兼容老旧设备,直接上。降级方案:用 PostCSS 的 oklab 插件自动转 RGB 回退。

Q: 为什么 HSL 50% 亮度的不同色相,看起来亮度不一样? A: 因为 HSL 的「亮度」是数学平均,不是人眼感知。黄色 hsl(60 100% 50%) 比蓝色 hsl(240 100% 50%) 看起来明显亮很多。这就是为什么需要 OKLCH。

Q: CMYK 和 RGB 怎么转换? A: CMYK 用于印刷,RGB 用于屏幕,两者色域不同,没有完美互转公式。屏幕设计稿如果要印刷,必须在 Photoshop 里做色彩管理(ICC profile),不能直接转换。

Q: 颜色名(red、blue)和 HEX 哪个性能更好? A: 完全相同。CSS 解析阶段都会转成 RGB 内部表示。可读性优先用颜色名,可控性优先用 HEX/HSL/OKLCH。


小结

颜色转换看似简单,背后是色彩科学、设计系统、无障碍工程的交集。2026 年的最佳实践:

  • 设计稿对接:HEX
  • 程序运算:RGB
  • 主题色阶:HSL(旧)或 OKLCH(新)
  • 设计系统:OKLCH,利用感知均匀性
  • 永远用 CSS 变量集中管理

下次需要快速转换格式?打开 MagicTools 颜色转换工具 一键搞定,所有主流格式实时同步。

相关文章

URL 编码与解码完全指南:开发者必读(2026)

URL 编码(百分号编码)是 Web 基础设施的隐形骨架。本文详解 URL 编码原理、保留字符分类、encodeURI 与 encodeURIComponent 区别、5 大常见踩坑,以及在 OAuth、表单提交等典型场景下的实战技巧。

url-编码web-开发+2
developer2026年4月21日5 min
338

私有仓库的文章如何自动同步到公开镜像站:GitHub Actions 跨仓库推送方案

如果你有一个私有 GitHub 仓库存放代码和文章,但又希望文章内容公开可访问,可以通过公开镜像仓库 + GitHub Actions 自动同步来实现。本文记录了一次完整的实施过程,包括跨仓库 Token 配置、同步工作流设计和常见注意事项。

cicdgithub-actions+4
developer2026年7月23日4 min
153

Docker 镜像从 arm64+amd64 砍到单平台:一次 CI 磁盘爆炸的踩坑复盘

GitHub Actions 构建 Docker 镜像频繁报 No space left on device,排查发现 arm64 镜像从来没用过、基础镜像用了完整的 Debian、CJK 字体装了全套 150MB。砍掉 arm64 后构建从 28 分钟降到 10 分钟,镜像瘦身 120MB+。这篇复盘整个排查和优化过程。

dockercicd+5
developer2026年7月22日4 min
152

CN2 GIA 是什么?从 Linode 搬到 DMIT 之后,我才明白线路比配置重要

Linode 用了 14 年的老用户,为什么把主力迁到了 DMIT?关键不在 CPU 内存,在线路。这篇讲清 CN2 GIA 到底是什么、怎么用一条 traceroute 鉴别真假 GIA、测速图上哪个数字才值得看,附国内晚间 200Mbps 实测图。

cn2-giavps+4
developer2026年7月20日7 min
166