尧图精选

前端开发必备:颜色代码对照表与HEX/RGB/HSL转换实战指南

🕒 发布时间:2026/9/19 7:31:40 📁 来源:尧图网络
1. 颜色代码对照表到底在解决什么问题做前端或者UI设计的人几乎都遇到过这样的场景设计师给了一张效果图上面标注了主色是某个色值你打开代码编辑器准备写样式却突然发现这个色值在CSS里到底该写十六进制还是RGB心里没底。又或者你在做数据可视化需要给一组分类数据配一套视觉上协调的颜色但手头只有几个零散的颜色代码不知道怎么系统化地组织。这些问题的本质都是颜色代码在不同表示体系之间的映射关系没有理清楚。颜色代码对照表的核心价值就是建立一套“查得到、对得上、用得准”的参考体系。它把同一个颜色在不同编码格式下的表示方式并列呈现让你在HEX、RGB、HSL、CMYK甚至颜色名称之间快速切换不用每次都去打开取色器重新取一遍。对于前端开发者来说这意味着写CSS时可以直接查表确认色值对于设计师来说这意味着在Sketch、Figma、Photoshop之间传递颜色时不会出现偏差对于数据分析师来说这意味着给图表配色时有一套可靠的参考基准。这篇文章适合几类人看一是刚入门前端、对颜色表示方式还不太熟悉的开发者二是需要频繁在设计和开发之间做颜色沟通的UI从业者三是做数据可视化、需要系统化配色的分析师。我会从颜色代码的底层表示原理讲起然后给出几套实用的对照表和使用方法再分享一些在实际项目中积累的配色和转换经验。整个内容不依赖任何特定工具你拿着一张对照表就能上手。2. 颜色代码的几套表示体系及其底层逻辑2.1 HEX十六进制为什么是六位而不是八位HEX颜色代码最常见的格式是#RRGGBB六位十六进制数每两位分别代表红、绿、蓝三个通道的强度。比如#FF0000就是纯红色#00FF00是纯绿色#0000FF是纯蓝色。每一位十六进制数的取值范围是0到F对应十进制的0到15两位组合起来就是0到255正好覆盖一个字节的表示范围。为什么是六位因为红绿蓝三个通道各需要一个字节来存储一个字节用两位十六进制表示最紧凑。你可能会看到八位的HEX格式比如#FF0000FF后两位表示透明度Alpha通道FF是完全不透明00是完全透明。在CSS中八位HEX是后来才支持的早期只能用rgba()函数来表达透明度。这里有一个实际开发中容易踩的坑三位简写格式。#F00等价于#FF0000#ABC等价于#AABBCC。但简写有个前提就是每一位必须重复。#A1B2C3不能简写成#A1B2C3的某种三位形式因为每一位都不重复。我见过有新手把#123456写成#123结果颜色完全不对排查了半天才发现是简写规则理解错了。2.2 RGB与RGBA更直观但更冗长RGB表示法用三个十进制数来表示红绿蓝通道格式是rgb(255, 0, 0)。相比HEXRGB的优点是直观——你能直接看出每个通道的强度255就是满值0就是没有。缺点是写起来更长而且在CSS中需要函数包裹。RGBA在RGB基础上增加了Alpha通道格式是rgba(255, 0, 0, 0.5)最后一个参数是0到1之间的小数表示透明度。0.5就是半透明。这里有个细节Alpha通道的值在CSS中可以是小数但在某些图形软件中可能是0到255的整数。如果你从Photoshop里取色透明度显示的是百分比转到CSS时需要除以100。实际项目中我通常这样选择静态颜色用HEX需要动态调整透明度的用RGBA。比如一个按钮的悬停效果如果只是颜色变深用HEX就够了但如果要做遮罩层、毛玻璃效果就必须用RGBA来控制透明度。2.3 HSL与HSLA设计师更友好的色彩模型HSL代表色相Hue、饱和度Saturation、亮度Lightness。色相是一个0到360的角度值0是红色120是绿色240是蓝色360又回到红色。饱和度是0%到100%0%是灰色100%是最鲜艳。亮度也是0%到100%0%是黑色100%是白色50%是正常亮度。HSL最大的优势是符合人类对颜色的直觉认知。你想让一个颜色变亮一点只需要调高L值想让它变灰一点调低S值想换一个色系旋转H值就行。而在HEX或RGB模式下调整亮度需要同时改三个通道的值很难预测结果。我做过一个对比实验让两组开发者分别用RGB和HSL来生成一组同色系的按钮颜色。用HSL的那组只需要固定H和S把L从30%逐步调到70%就能得到一套从深到浅的渐变。用RGB的那组需要反复试错因为三个通道的变化不是线性的。这就是HSL在实际配色工作中的价值。2.4 CMYK印刷领域的另一套逻辑CMYK代表青Cyan、品红Magenta、黄Yellow、黑Key。它是减色模型和RGB的加色模型正好相反。RGB是屏幕发光叠加CMYK是油墨反射吸收。这就是为什么你在屏幕上看到的鲜艳蓝色印刷出来往往会偏暗——因为屏幕能发出的色域比油墨能反射的色域要广。做Web开发的人通常不需要关心CMYK但如果你涉及打印物料、品牌手册、包装设计就必须在CMYK和RGB之间做转换。这里有一个经验不要直接在软件里用默认转换。不同软件、不同色彩配置文件的转换结果差异很大。正确做法是拿到印刷厂的色彩配置文件在Photoshop或Illustrator里指定配置文件后再转换这样出来的色差最小。3. 从零搭建一张实用的颜色代码对照表3.1 确定对照表的字段结构一张好用的颜色代码对照表至少应该包含以下字段颜色名称中文和英文、HEX值、RGB值、HSL值、以及一个可视化的色块预览。如果涉及印刷再加一列CMYK值。如果涉及透明度可以单独加一列常用Alpha值对应的RGBA表示。我自己的对照表还额外加了两列色系分类和适用场景。色系分类把颜色归入红、橙、黄、绿、青、蓝、紫、中性色等大类方便按色系查找。适用场景标注这个颜色适合做背景、文字、边框还是强调色。这个标注看起来简单但在实际项目中能省很多决策时间。颜色名称HEXRGBHSL色系适用场景纯红#FF0000rgb(255,0,0)hsl(0,100%,50%)红色系强调、警告深红#8B0000rgb(139,0,0)hsl(0,100%,27%)红色系背景、标题珊瑚红#FF7F50rgb(255,127,80)hsl(16,100%,66%)橙红色系按钮、图标金色#FFD700rgb(255,215,0)hsl(51,100%,50%)黄色系高亮、星级森林绿#228B22rgb(34,139,34)hsl(120,61%,34%)绿色系成功、确认天蓝#87CEEBrgb(135,206,235)hsl(197,71%,73%)蓝色系背景、链接深蓝#00008Brgb(0,0,139)hsl(240,100%,27%)蓝色系标题、导航紫色#800080rgb(128,0,128)hsl(300,100%,25%)紫色系装饰、创意灰色#808080rgb(128,128,128)hsl(0,0%,50%)中性色文字、边框白色#FFFFFFrgb(255,255,255)hsl(0,0%,100%)中性色背景、留白这张表只是示例实际使用时你可以根据自己的项目需求扩展。比如做电商的可以加一列“促销色”做后台系统的可以加一列“状态色”。3.2 用脚本批量生成对照表手动整理颜色代码效率很低而且容易出错。我通常用一段简单的Python脚本来自动生成对照表。核心思路是定义一组基础色相然后通过调整饱和度和亮度生成同色系的多个变体最后输出成Markdown表格或CSV文件。import colorsys def hsl_to_hex(h, s, l): r, g, b colorsys.hls_to_rgb(h/360, l/100, s/100) return #{:02X}{:02X}{:02X}.format(int(r*255), int(g*255), int(b*255)) def hsl_to_rgb(h, s, l): r, g, b colorsys.hls_to_rgb(h/360, l/100, s/100) return rgb({},{},{}).format(int(r*255), int(g*255), int(b*255)) # 生成蓝色系的五个变体 hue 210 for lightness in [20, 35, 50, 65, 80]: hex_val hsl_to_hex(hue, 80, lightness) rgb_val hsl_to_rgb(hue, 80, lightness) print(f| 蓝色L{lightness} | {hex_val} | {rgb_val} | hsl({hue},80%,{lightness}%) |)这段脚本的输出可以直接粘贴到Markdown表格里。如果你需要生成整套色板把hue值从0到360按30度步进循环一遍就能得到12个色系的基础色。再对每个色系生成5个亮度变体总共就是60个颜色足够覆盖大多数项目的配色需求。注意Python的colorsys模块使用的是HLS顺序不是HSL。调用hls_to_rgb时参数顺序是(h, l, s)不是(h, s, l)。这个顺序很容易搞混我第一次用的时候就被坑过生成的颜色完全不对。3.3 对照表的存储与检索方案生成好的对照表怎么存如果只是个人使用一个Markdown文件或者Excel表格就够了。但如果是团队协作建议用JSON格式存储方便程序读取和检索。{ colors: [ { name: 主色蓝, hex: #1E90FF, rgb: rgb(30,144,255), hsl: hsl(210,100%,56%), category: 蓝色系, usage: 主按钮、链接 }, { name: 成功绿, hex: #32CD32, rgb: rgb(50,205,50), hsl: hsl(120,61%,50%), category: 绿色系, usage: 成功提示、确认按钮 } ] }用JSON存储的好处是你可以写一个简单的查询函数按名称、按色系、按用途来检索颜色。比如输入“蓝色系”返回所有蓝色系的颜色输入“按钮”返回所有适合做按钮的颜色。这在大型项目中特别有用因为颜色一多光靠肉眼找很容易漏掉或重复。4. 实际项目中颜色代码转换的常见坑与排查4.1 为什么取色器取到的值和代码里写的不一样这是最常见的问题。你在设计稿上取色得到#3A7BD5写到代码里运行后发现颜色偏了。原因通常有三个色彩配置文件不一致、透明度叠加、显示器色差。色彩配置文件的问题最隐蔽。设计稿可能是在sRGB模式下做的但你的显示器或者浏览器使用了不同的色彩配置。解决办法是统一使用sRGB作为工作空间在设计工具和代码中都明确指定sRGB。透明度叠加的问题也很常见设计稿上某个颜色看起来是#3A7BD5但实际上它可能是#000000加上50%透明度的蓝色叠加出来的。取色器取到的是叠加后的结果但你在代码里直接写这个值就没有了叠加效果。正确做法是问设计师要原始色值或者自己在代码里用RGBA模拟叠加。显示器色差是硬件问题无法完全消除但可以通过校准显示器来减小。如果你对颜色要求很高建议至少用一台经过校色的显示器来做设计稿的最终确认。4.2 HEX转RGB时的精度丢失问题HEX的每个通道是0到255的整数RGB也是0到255的整数两者之间的转换是无损的。但如果你从HSL转到HEX就可能出现精度丢失。因为HSL的亮度是百分比转成0到255时会有四舍五入。比如hsl(210, 100%, 50%)转成RGB是rgb(0, 128, 255)转成HEX是#0080FF。但如果你把#0080FF再转回HSL得到的是hsl(210, 100%, 50%)看起来没问题。但如果亮度是33%这种不能整除的值来回转换几次就可能出现偏差。我的经验是确定最终使用的格式后就不要反复转换。如果项目用HEX就统一用HEX存储和传递如果需要透明度就用八位HEX或RGBA不要先转成HSL再转回来。4.3 颜色名称的兼容性问题CSS支持140多个颜色名称比如red、blue、coral、tomato。用颜色名称的好处是代码可读性高坏处是不同浏览器对某些名称的解析可能略有差异而且颜色名称的色值和你预期的可能不一样。比如green在CSS中是#008000不是#00FF00。#00FF00对应的名称是lime。这个坑我踩过写了一个成功提示的样式用了color: green结果出来的绿色比设计稿暗了一大截。后来查了对照表才发现设计稿用的是#00FF00对应的是lime而不是green。所以我的建议是生产环境中尽量用HEX或RGB不要用颜色名称。颜色名称只适合在快速原型或调试时使用。如果非要用一定要查对照表确认色值。4.4 深色模式下的颜色反转陷阱做深色模式时很多人第一反应是把所有颜色反转——白色变黑色黑色变白色。但这样做的效果通常很差。因为颜色反转后饱和度会发生变化原本柔和的浅蓝色可能变成刺眼的深橙色。正确的做法是为深色模式单独定义一套颜色变量而不是简单反转。比如浅色模式下背景是#FFFFFF文字是#333333深色模式下背景是#1A1A1A文字是#E0E0E0。强调色也需要调整浅色模式下的#1E90FF在深色模式下可能需要调亮到#4DA6FF才能在深色背景上保持足够的对比度。这里有一个实用的检查方法用WCAG对比度公式算一下文字和背景的对比度确保达到4.5:1以上。很多在线工具可以帮你算但自己写个脚本也不难。def luminance(r, g, b): def adjust(c): c c / 255 return c / 12.92 if c 0.03928 else ((c 0.055) / 1.055) ** 2.4 return 0.2126 * adjust(r) 0.7152 * adjust(g) 0.0722 * adjust(b) def contrast_ratio(hex1, hex2): def hex_to_rgb(h): h h.lstrip(#) return tuple(int(h[i:i2], 16) for i in (0, 2, 4)) l1 luminance(*hex_to_rgb(hex1)) l2 luminance(*hex_to_rgb(hex2)) lighter max(l1, l2) darker min(l1, l2) return (lighter 0.05) / (darker 0.05) # 检查白色背景上的深灰色文字 print(contrast_ratio(#FFFFFF, #333333)) # 输出约12.6远高于4.5 # 检查深色背景上的浅蓝色文字 print(contrast_ratio(#1A1A1A, #4DA6FF)) # 输出约7.2合格这个脚本可以直接用在你的项目里作为颜色方案的自动化检查工具。5. 颜色代码对照表在数据可视化中的实战应用5.1 分类数据的配色策略做数据可视化时最头疼的就是给分类数据配色。如果分类太多颜色容易混淆如果分类太少又显得单调。我的经验是分类数在5个以内用定性色板5到10个用扩展定性色板超过10个考虑用连续色板或者分组。定性色板的特点是颜色之间差异明显没有明显的顺序关系。比如D3.js的category10色板包含10个区分度很高的颜色。扩展定性色板是在定性色板基础上增加更多颜色但区分度会下降。连续色板适合表示数值大小比如从浅蓝到深蓝表示从低到高。我常用的做法是先从对照表里挑出5到7个基础色相然后对每个色相生成2到3个亮度变体。这样既能保证区分度又能保持视觉上的协调。比如做销售数据的地域分布图可以用蓝色系表示华东、绿色系表示华南、橙色系表示华北每个区域内再用亮度区分具体省份。5.2 连续色板的生成与插值连续色板需要在一个色相范围内做插值。最简单的方法是在HSL空间里线性插值H值同时调整L值。比如从hsl(210, 80%, 30%)到hsl(210, 80%, 80%)中间取5个点就得到一套从深蓝到浅蓝的连续色板。但HSL插值有个问题在色相环上从红色到蓝色的最短路径可能经过紫色也可能经过绿色取决于你走哪个方向。如果你想要从红到蓝经过紫色的渐变就需要控制插值方向。在代码里这意味着要处理色相值的环绕问题。def interpolate_hsl(h1, s1, l1, h2, s2, l2, steps): # 处理色相环绕选择最短路径 if abs(h2 - h1) 180: if h2 h1: h1 360 else: h2 360 result [] for i in range(steps): t i / (steps - 1) h (h1 (h2 - h1) * t) % 360 s s1 (s2 - s1) * t l l1 (l2 - l1) * t result.append((h, s, l)) return result这段代码生成的色板可以直接用于热力图、等高线图等需要连续颜色的场景。5.3 色盲友好配色的检查方法大约8%的男性有某种程度的色盲最常见的是红绿色盲。如果你的数据可视化产品面向大众配色必须考虑色盲友好。检查方法很简单把颜色转成灰度看看是否还能区分。红绿色盲的人看红色和绿色都是偏黄的灰色如果两个颜色在灰度模式下亮度接近他们就无法区分。解决办法是确保相邻颜色的亮度差异足够大或者使用色盲友好的色板比如蓝色和橙色搭配而不是红色和绿色搭配。我通常用这个规则任意两个相邻分类的颜色在灰度模式下的亮度差至少要有20%。你可以用前面的luminance函数来算也可以直接用在线工具模拟色盲视角来检查。6. 我整理颜色对照表时踩过的坑和总结的技巧6.1 不要迷信“标准色板”网上有很多所谓的“标准色板”比如Material Design色板、Ant Design色板、Tailwind色板。这些色板确实经过精心设计但直接拿来用往往不合适。因为每个项目的品牌调性、目标用户、使用场景都不一样。Material Design的色板适合Google风格的产品但如果你做的是一个儿童教育应用用那套色板就会显得太冷峻。我的做法是把标准色板作为参考而不是直接复制。从里面挑几个基础色相然后根据项目需求调整饱和度和亮度。比如Material Design的蓝色是#2196F3如果你的品牌色偏暖可以把色相往青色方向偏一点变成#00BCD4。6.2 颜色命名要有业务含义给颜色命名时不要用“蓝色1”“蓝色2”这种无意义的编号。要用业务含义来命名比如“主品牌色”“成功状态色”“警告状态色”“禁用状态色”。这样在代码里引用时一眼就能看出这个颜色的用途。我见过一个项目颜色变量叫color1到color20结果维护的时候没人知道color7到底是干什么用的改一个颜色要全局搜索半天。后来我帮他们重构成--color-primary、--color-success、--color-warning、--color-danger维护效率立刻上来了。6.3 建立颜色变更的记录机制颜色方案不是一成不变的。品牌升级、设计改版、用户反馈都可能导致颜色调整。如果没有记录改着改着就乱了。我的做法是维护一个CHANGELOG文件每次调整颜色都记录改了哪个颜色、从什么值改成什么值、为什么改、影响哪些页面。这个习惯看起来麻烦但在出问题的时候能救命。有一次线上事故某个按钮的颜色突然变了排查了半天才发现是有人改了一个基础色值但没有通知下游。如果有变更记录五分钟就能定位到问题。6.4 用工具自动化颜色检查人工检查颜色很容易漏。我现在用一套自动化脚本在构建时检查所有颜色是否符合规范对比度是否达标、是否有重复定义、是否有未使用的颜色变量。这套脚本帮我省了很多review时间。# 示例用grep快速找出项目中所有HEX颜色 grep -rohE #[0-9A-Fa-f]{6} src/ | sort | uniq -c | sort -rn这条命令能列出项目中所有用到的HEX颜色及其出现次数。出现次数特别少的颜色可能是临时加的需要确认是否应该合并到主色板里。出现次数特别多的可能是基础色需要重点维护。颜色代码对照表看起来是个小东西但用好了能大幅提升开发效率和设计一致性。我现在的习惯是每个新项目启动时先花半小时整理一套颜色对照表后面几个月都能省心。这笔时间投资回报率很高。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →