1. 从一份“再也不用百度”的色表说起
先交代个背景:前段时间我接手一个拖了好几年的老站点,页面配色乱得让人头疼。头部导航用一种偏蓝的灰,按钮又是另一种蓝,侧边栏忽绿忽紫,表格边框甚至出现三种深浅不同的灰。翻遍项目文件,没有设计规范,没有主题变量,所有颜色都是当年写页面的人临时从在线色值网站里抄的,有些直接裸写在行内样式里,有些用的是含义不明的十六进制缩写。为了把这些颜色理清楚,我第一次认认真真做了一件事:把HTML里能用到的颜色代码整理成表,分类、标注用途、补齐RGB和HSL换算。做完之后我发现,这东西比想象中有用得多——不光是给新页面写样式用,日常改需求、调bug、跟设计对视觉稿,效率都翻倍。
这篇文章就是把那份整理过程、整理结果和使用心得一起端出来。你可以把它当成一份随手可查的HTML颜色代码速查手册,也可以当成一篇“如何系统化处理网页配色”的实操笔记。无论你是刚接触前端的小白、做后台界面的全栈工程师,还是经常要跟设计稿较劲的网页重构师,这份内容应该都能直接用到你的日常项目里。
我尽量不堆术语,把颜色代码的写法规则、常用色系分布、真实项目里的选色经验和容易踩的坑讲透。看完之后,再遇到“这个蓝色到底怎么写的”这种问题,就不用翻书、也就不用搜网页了。
2. 三种主流写法:Hex、RGB、HSL到底有什么区别
HTML颜色代码,很多人第一反应就是“井号加六位字母数字”,也就是十六进制表示法,比如#FF5733。这确实是用的最多的方式,但要真正用好颜色代码表,最好先把三种主流格式都搞清楚,因为不同场景下它们各有各的顺手之处。
2.1 十六进制写法(Hex):最常用,但别忽略三位缩写和带透明度格式
十六进制颜色代码的本质,本质上是把红、绿、蓝三个通道分别用两位十六进制数来表示,从00到FF对应十进制的 0 到 255。比如#FF5733,拆开就是红通道 FF(255)、绿通道 57(87)、蓝通道 33(51),整体是一个偏橙的珊瑚红。
实际项目里有三类写法值得留意。
第一类是简写形式。CSS里允许把类似#FF5733这种六位代码中成对重复的字符压缩成三位,也就是#F53。谁会在意这种写法?主要是为了省那三个字节的CSS文件大小。不过我从某前端团队那边学到一句话:三位缩写虽然在老浏览器和各种CSS预处理器里都能正常解析,但可读性不如六位,团队协作时真没必要为了省三个字符给后续维护埋雷。除非写的是那种非常压缩的单行CSS库,否则我建议一律写六位。
第二类是带透明度的写法。CSS Color Module Level 4 引入了一种八位十六进制格式,如#FF573380,最后两位表示 Alpha 透明度,取值范围同样是00到FF。其中80近似于 50% 透明度。这个功能非常实用,以前要实现“半透明红色”只能通过rgba(255,87,51,0.5)或者先定义一个透明度样式,现在一个字符串就搞定。唯一的坑是,老版本浏览器(特别是IE系列)不支持这种写法,如果你负责的项目还要兼容老内核,这条路就走不通,老老实实退回rgb()或rgba()。
第三类是整数写法,也就是#AABBCC中每个通道对应一个大写或小写字母,大小写不敏感。实践中大家习惯统一写大写,因为大写数字字母在代码里辨识度更高。一个小建议:写代码时尽量统一一种写法,别一会儿大写一会儿小写,颜色代码表也要统一,否则自动化扫描工具和同事的肉眼都会很难受。
2.2 RGB写法:带透明度的典型场景,和设计稿换算最直观
RGB格式就是rgb(255, 87, 51)这种,三参数分别对应红绿蓝通道的十进制值。它与Hex是等价的,只是表达形式不同。什么时候用RGB比用Hex方便?
- 当你从设计工具(比如设计稿标注)里直接拿到的是十进制 RGB 值的时候,不用做 Hex 换算,直接复制进CSS就行;
- 需要调透明度时,
rgba(255,87,51,0.6)比在Hex末尾加两位十六进制要直观得多; - 如果要做颜色之间的动态计算(比如根据数值变颜色),在 JavaScript 里操作 RGB 数的加减乘除也比去解析字符串简单。
很多人在RGB的格式细节上翻过车,主要是两个地方:
一是现代CSS里空格和逗号的写法。官方规范是rgb(255 87 51 / 0.6),也就是空格分隔、滑动透明度的斜杠写法,不过传统逗号写法rgba(255,87,51,0.6)在所有现代浏览器里依旧兼容。考虑到兼容性和团队既有写法,用逗号版通常最稳妥。
二是rgb()和rgba()已经是同义词了,新规范里rgb(255,87,51,0.5)这种带第四参数的写法也合法。不过,为了不被老浏览器坑,还是建议在意兼容性的项目沿用老式的rgba()。
2.3 HSL写法:按色相、饱和度、亮度思考,微调颜色时最舒服
HSL是这三个格式里最容易理解的颜色模型,也是我推荐给新手的“思考工具”。hsl(9, 100%, 60%)中,第一个参数是色相角度,0到360度分布整个色轮;第二个是饱和度百分比;第三个是亮度百分比。
举个例子,之前要调一个“看起来像番茄红”的颜色,我习惯直接用 Hex 慢慢试,试半天可能还是不对。现在先想:番茄红是暖色,色相大概在 10 度到 20 度之间,饱和度高一点,亮度中等。直接设hsl(12, 82%, 58%),然后微调两个百分点,很快就能得到视觉上想要的颜色。这就体现出HSL的价值:调整颜色时,不需要去理解Hex每一位的变化对被感知颜色有多大影响,只需改变一个维度的数值即可。
CSS里HSL同样支持透明度,写法是hsla(12, 82%, 58%, 0.6),或者用空格加斜杠的hsl(12 82% 58% / 0.6)。兼容性方面,hsl()从IE9时代就已经得到了广泛支持,所以放心用。
三种格式的等价关系,我整理成了下面这个表:
| 颜色描述 | Hex | RGB/RGBA | HSL/HSLA |
|---|---|---|---|
| 番茄红 | #FF6347 | rgb(255,99,71) | hsl(9,100%,64%) |
| 钢蓝色 | #4682B4 | rgb(70,130,180) | hsl(207,44%,49%) |
| 金锭色 | #FFD700 | rgb(255,215,0) | hsl(51,100%,50%) |
| 森林绿 | #228B22 | rgb(34,139,34) | hsl(120,61%,34%) |
| 半透明珊瑚红 | #FF7F5080 | rgba(255,127,80,0.5) | hsla(16,100%,66%,0.5) |
曾经有人用一句话总结三种格式的用途,我觉得很精辟:Hex是“写给浏览器看的”,RGB是“写给设计稿看的”,HSL是“写给人看的”。你大可不必纠结只掌握一种,全学会以后按场景随便切换,颜色代码表对你来说才真正算得上是一个好用的工具。
3. 一份按色系拆好的高频颜色代码对照表
网上有很多颜色代码表,但大部分存在两个问题:要么只是颜色名和Hex的一一罗列,没有分类;要么分类是按“网页安全色”来分的,实际项目里并不好用。我这份表按视觉色系来整理,每一项标注了代表场景和用途,直接照着抄就能用在页面里。
3.1 中性色系:灰、黑、白、米色,页面骨架的底色
中性色是所有页面里使用频率最高的色系,文字、边框、背景、阴影全靠它们撑起来。更重要的是,中性色的选取决定了整个页面的“干净程度”。
| 颜色名称 | Hex | RGB | 常见用途 |
|---|---|---|---|
| 纯黑 | #000000 | rgb(0,0,0) | 正文文字、深色主题背景 |
| 炭黑 | #1A1A1A | rgb(26,26,26) | 相比纯黑更柔和,大段阅读不刺眼 |
| 墨灰 | #333333 | rgb(51,51,51) | 次级文字、标题常用 |
| 中灰 | #666666 | rgb(102,102,102) | 辅助说明文字、占位符 |
| 银灰 | #999999 | rgb(153,153,153) | 禁用态文字、图标辅助色 |
| 浅灰 | #CCCCCC | rgb(204,204,204) | 分割线、边框 |
| 淡灰 | #F5F5F5 | rgb(245,245,245) | 页面背景、区块底色 |
| 米白 | #FAFAFA | rgb(250,250,250) | 表单背景、卡片底色 |
| 纯白 | #FFFFFF | rgb(255,255,255) | 卡片、弹窗、内容背景 |
中性色表我给一个实用建议:页面里的文字颜色不要全文一个色值。通常的做法是,正文用#1A1A1A或#333333,标题可以用#000000,辅助文字降级到#666666或#999999,这样页面看起来层级分明,阅读起来不累。网格线、边框和分隔线统一用#E5E5E5这类非常浅的灰色,不要用深灰,深灰边框会显得非常“老派”,像早年用表格布局的页面。
3.2 红色系与橙色系:强调色和警示色,用的好是点睛之笔
红色系在页面里承担的任务非常重:按钮主色、错误提示、未读消息、促销标价。橙色系则常常作为“次强的强调色”,能让页面活泼又不至于像红色那样强烈。
| 颜色名称 | Hex | RGB | 常见用途 |
|---|---|---|---|
| 朱红 | #FF0000 | rgb(255,0,0) | 极强警示、数字标红 |
| 绯红 | #DC143C | rgb(220,20,60) | 电商促销、重要提醒 |
| 番茄红 | #FF6347 | rgb(255,99,71) | 活泼强调色,适合标签 |
| 珊瑚红 | #FF7F50 | rgb(255,127,80) | 温和的强调色,适合按钮 |
| 砖红 | #B22222 | rgb(178,34,34) | 深色背景上的警示文字 |
| 深橙 | #FF4500 | rgb(255,69,0) | 消息提醒、热力提示 |
| 橙色 | #FFA500 | rgb(255,165,0) | 次级强调、价格色 |
| 浅橙 | #FFB347 | rgb(255,179,71) | 柔和视觉、图表配色 |
红色最怕大面积使用。如果页面主色调是红色,按钮悬停的红色会比默认色更深一些,不然纯红色在屏幕上看久了会产生洋红色飘溢感,视觉很躁。一个常见做法是默认态#DC143C,悬停态#A31230,专门用来做警示按钮。橙色方面,主色#FFA500适合做非主操作按钮,前提是旁边有更显眼的主色按钮在“压阵”。
3.3 黄色系与棕色系:暖背景、柔和边框、内容高亮
黄色系的明度很高,通常不适合做大面积文字。它更适合做背景色、高亮标记、图表的辅助色。棕色系则非常适合做“自然的背景色”,比如木质感界面、盘点和日志面板。
| 颜色名称 | Hex | RGB | 常见用途 |
|---|---|---|---|
| 明黄 | #FFD700 | rgb(255,215,0) | 高亮、星标、会员标识 |
| 奶油黄 | #FFF8DC | rgb(255,248,220) | 弹窗背景、温柔提示 |
| 柠檬黄 | #FFFACD | rgb(255,250,205) | 笔记背景、标记底色 |
| 卡其 | #C3B091 | rgb(195,176,145) | 柔和边框、扫描件风格 |
| 棕色 | #A0522D | rgb(160,82,45) | 木色风格装饰 |
| 深棕 | #5C4033 | rgb(92,64,51) | 复古风标题、正文替代 |
| 浅棕 | #D2B48C | rgb(210,180,140) | 侧边栏背景、分隔区域 |
黄颜色做背景的时候,千万不要同时用白字。白色和奶油黄的对比度只有一点点,特别是手机屏幕亮度调低时更明显。黄色系高亮文字至少要保证字号较大、行距较宽,否则会显得像没渲染好一样。
3.4 绿色系与青色系:成功提示、生态感、清新背景
绿色系是“安全、正确、成功”的默认语义色,地图应用、数据报表、后台管理系统里都会频繁使用。青色系(青绿色、湖蓝色区域)则能给界面带来清凉感和通透感,也很适合做渐变背景的起点。
| 颜色名称 | Hex | RGB | 常见用途 |
|---|---|---|---|
| 纯绿 | #008000 | rgb(0,128,0) | 状态正确、通过标识 |
| 翠绿 | #2E8B57 | rgb(46,139,87) | 成功按钮、提交操作 |
| 淡绿 | #98FB98 | rgb(152,251,152) | 成功提示背景、图标 |
| 薄荷绿 | #E0FFF0 | rgb(224,255,240) | 清新面板、操作成功区域 |
| 深青 | #008B8B | rgb(0,139,139) | 高端商务、信息标签 |
| 青色 | #00CED1 | rgb(0,206,209) | 活泼链接、图表系列色 |
| 湖绿 | #00FA9A | rgb(0,250,154) | 渐变装饰色、背景点缀 |
绿色系里的“语义区分”很重要。成功提示的背景色和前景色要拉开对比度,背景用#E0FFF0这样的极浅绿,前景用#0B6E4F这样的深绿,而不是背景深绿前景深绿。很多时候页面看起来“土”,就是语义色没拉开层次,所有绿色都挤在同一亮度区间。
3.5 蓝色系与紫色系:科技感、品牌色、次级信息
蓝色系是国家化页面的“安全色”,绝大多数品牌色和信息型界面都离不开它。紫色系在数据可视化、女性用户为主的界面、创意类页面里出现的频率也很高。
| 颜色名称 | Hex | RGB | 常见用途 |
|---|---|---|---|
| 宝蓝 | #0000FF | rgb(0,0,255) | 强链接、基础引导色 |
| 蔚蓝 | #007BFF | rgb(0,123,255) | 现代按钮默认色 |
| 深天蓝 | #00BFFF | rgb(0,191,255) | 登出链接、辅助操作 |
| 钢蓝 | #4682B4 | rgb(70,130,180) | 静态信息、数据标签 |
| 淡蓝 | #E6F2FF | rgb(230,242,255) | 信息提示背景 |
| 靛蓝 | #4B0082 | rgb(75,0,130) | 创意主色调 |
| 紫罗兰 | #8A2BE2 | rgb(138,43,226) | 会员标识、VIP标签 |
| 薰衣草 | #E6E6FA | rgb(230,230,250) | 柔和卡片背景 |
蓝色页面里最容易犯的错误是“一蓝到底”。所有区域都用同一种蓝色,界面就没有了层次感。更合适的做法是设定一个主蓝、一个深蓝(用于强调和悬停)、一个浅蓝(用于背景),再加上一个中性色进行过渡。我之前做过一个某跨平台系统的后台页面,主色#007BFF、强调色#0056B3、背景切换#F0F7FF,层次一下子就出来了,用户反馈“界面清爽了不少”。
3.6 粉色系与彩色组合:点缀型的角色,不可喧宾夺主
粉色系作为点缀色非常好看,特别是配合浅灰色和白色底。金色、银色和高饱和度彩色通常只出现在特殊场景,比如徽章、VIP标识、图表中的某一根数据柱。
| 颜色名称 | Hex | RGB | 常见用途 |
|---|---|---|---|
| 粉红 | #FFC0CB | rgb(255,192,203) | 促销活动、女性向界面 |
| 玫瑰粉 | #FF69B4 | rgb(255,105,180) | 重点徽标、图标 |
| 深粉 | #E75480 | rgb(231,84,128) | 大促标签、优惠券色 |
| 蜜桃 | #FFE5B4 | rgb(255,229,180) | 暖系背景、提示边框 |
| 金色 | #FFD700 | rgb(255,215,0) | 会员等级、积分奖励 |
| 银色 | #C0C0C0 | rgb(192,192,192) | 次级图标、禁用内容 |
| 铜色 | #B87333 | rgb(184,115,51) | 等级展示、历史记录 |
彩色点缀有个原则:页面里亮色面积占比不要超过10%。我见过最夸张的例子,一个信息面板从上到下用了五种高饱和度颜色,用户根本分不清哪个信息更重要。正确的做法是在主内容保持中性色底的前提下,只把强彩色用在“需要用户注意”的少数元素上。
4. 真正能用起来的颜色代码梳理方法:从零整理一份团队色板
在整理颜色代码表的实际操作中,我发现最大难点不是找到那个色值,而是知道“这个色值应该放在表里的哪一类、命名成什么、用在什么地方”。这里分享一套我实操过的方法论,适合个人学习,也适合小团队维护。
4.1 第一步:按语义而不是按颜色名归档
网上很多色表是按颜色相分档案,比如“红色系”“蓝色系”,这样做只能帮你查到一种颜色的名字,对选色决策帮助有限。我建议再增加一个维度:按“语义”归档,也就是这个颜色在页面里做什么用。
举个例子:
- 语义组“Primary”:品牌主色、按钮主色、链接色;
- 语义组“Success”:成功提示、通过状态、正向数值;
- 语义组“Warning”:警示提示、待处理状态、临界值;
- 语义组“Danger”:错误、删除、失败、阻塞;
- 语义组“Neutral”:背景、边框、文字、禁用态;
- 语义组“Chart”:图表系列色、数据映射色。
每一条记录至少包含四列:语义名、Hex、RGB/HSL、使用场景说明。比如Status--Success,#2E8B57,成功提示图标与文字。这样整理出来的表,在设计评审会上可以直接拿出来对照,比甩出一堆色值让人猜不知道高到哪里去了。
4.2 第二步:给出每个语义色的“深/浅两档变体”
实际做页面时,光有基础色往往不够。按钮需要悬停色,背景需要高亮色,边框需要淡化色。如果每一次都临时去拉一个颜色,很容易导致色调不一致。针对每一个语义色,预先准备深色变体和浅色变体。
具体做法很简单:深色可以在原色基础上把HSL的亮度降低15%到20%,浅色则把亮度提高20%到25%,同时适当降低饱和度。例如基础警示红#DC143C,深色变体#A31230,浅色背景变体#FDE8EC。这样的三件套(基础/深/浅)可以应对绝大多数场景,而且色相没变,视觉上是一家人。
做这一步时最好在HSL思路下进行微调,不要靠肉眼在Hex里硬找。用代码来说,类似这样的换算:
:root { --color-danger: #DC143C; --color-danger-dark: hsl(350, 81%, 35%); --color-danger-light: hsl(350, 86%, 92%); }悬停时用--color-danger-dark,提示背景用--color-danger-light。同一语义色系的各种变体全部成对出现,页面配色立刻整齐了许多。
4.3 第三步:写成CSS变量或设计令牌,避免在页面里裸写色值
颜色代码表整理得再好,如果页面里还是到处style="color:#FF5733",那这份表基本白做。把它固化成一套变量(设计令牌)才是关键。
使用CSS自定义属性(变量)是最快捷的方式:
:root { --brand-primary: #0056B3; --brand-primary-hover: #003C7A; --bg-base: #FAFAFA; --bg-panel: #FFFFFF; --text-primary: #1A1A1A; --text-secondary: #666666; --border-normal: #E5E5E5; --status-success: #2E8B57; --status-warning: #E6A700; --status-error: #D0021B; }页面上统一引用变量,好处显而易见:改主题时只动:root里的几行,而不是全项目全局替换;团队协作时,新来的同事看到var(--text-secondary)就知道这是次要文字色,而不是看到一个裸的#666666还要猜它是不是某个人的特殊偏好。
如果你用的是预处理器或框架(例如在JavaScript代码里做主题切换),原理一致,把颜色定义收敛到一处即可。按我过去的经验,做完这套固化之后,整个项目里裸色值至少能减少九成。
4.4 第四步:定期审查色表,清理“一次性颜色”
颜色代码表不是建好就一劳永逸。项目迭代半年后,重新审一遍所有用到的颜色,会发现在各种临时需求里混入不少“一次性颜色”:某个活动页的渐变紫、某次运营海报的背景橙、某个老模块里的深绿。这些颜色如果不在色表归档里,就会成为后期维护的负担。
我的方法是每季度做一次颜色审计。用脚本扫描样式文件和HTML里的所有颜色值,跟色表里的变量集合比对,把不在变量体系里的裸颜色统计出来。数量较少时直接修掉,数量多时就开一次“字段替换会”,把它们纳入中性色或语义色体系。这项工作耗时不大,但能显著降低配色失控的概率。
5. 高频踩坑现场与解决方案:实战里最麻烦的几个问题
颜色比别的编码问题特殊,浏览器显示效果基本一致,但有几种情况会造成严重的“看起来不对”,这里把我亲自处理过的几个案例拿出来讲一讲。
5.1 深浅对比度不够,按钮文字看不清
某后台系统之前用浅橙色#F6B0A0做按钮底色,配白色文字。当时设计觉得橙色和白色很搭,实际线上后手机端用户一直反馈按钮上的字看不清。原因很简单:白字和浅橙背景的亮度对比度不够。换算一下,浅橙背景的感知亮度大约152,白色文字感知亮度是255,对比度只有1.7比1左右,远低于正常文本所需的4.5比1,颗粒度粗的老年用户眼睛稍一疲劳就几乎看不见按钮上的字。
解决方法是把按钮底色加深,或者改用深色文字。我选了把按钮改深,将背景调整为#D26D45,白字对比度提升到4.3比1,虽然还差一点点到正常标准,但配合大号按钮字体实际可读性已经很不错;如果要严格达标,再用#B7522E,对比度直接到5.2比1。从那以后,所有带文字的背景色我都会先做一次亮度对比度估算。
5.2 十六进制色的“位数陷阱”,让人误以为颜色变了
这种问题几乎每隔一阵就能碰到一次:从设计稿里复制了一个#F5F5F5,代码里不知道怎么被压缩成了#F5F,结果页面背景从浅灰变成了洋红偏灰(#F55F55与#F5F5F5完全是两回事)。因为三位简写和六位完整写法的对应规则,是基于“每两个相同字符压缩为一位”,简写后值和原值并不相等。
这类问题实际上没有太好的自动化防错手段,只能立规矩:项目源码里不允许出现三位简写,统一使用六位格式。代码检查规则里配上强制,简写就再不会溜进来了。
5.3 显示器色差与印刷色差:屏幕上的颜色换台机器就变了
另一个高频问题不在代码本身,而在“色差”。同一份颜色代码,在某个屏上显得沉稳,在另一个屏上却发蓝发紫。这个锅不能完全甩给代码,多半是显示器和色彩配置差异造成的。
常规解决办法是:办公用的显示器尽量统一采购型号;重要的视觉稿和评审会,让大家在同一台经过基础校色的设备上看;如果涉及线下印刷物料,画面里不要只依赖屏幕选色,要与印刷厂确认色号或CMYK值,毕竟CMYK和RGB是两个色域,而HTML颜色代码只能管屏幕端。
5.4 颜色命名引发的语义混淆
团队里曾发生过一个典型事故。色表里有两个蓝色:一个叫$blue,一个叫$primary-blue。某次第三方接手,把原本应该用主按钮蓝的地方换成了$blue,页面按钮立刻显得暗淡。排查半天,发现根因就是颜色变量命名没有体现“语义用途”,颜色名像“blue”这种本质上只是描述色相,没有描述它应该被谁使用。
改进方法就是强调“用语义命名,不入颜色名”。变量取名为--btn-primary-bg、--link-color、--info-text,这样无论谁读到都知道它服务的对象。我后来在代码评审时遇到新的颜色变量,第一句话就问:这个变量名能让人猜出它用在哪个组件上吗?如果不能,就改掉。
6. 进阶一点:扩展名颜色、渐变过渡和无障碍对比度
除了手写Hex、RGB、HSL和CSS变量,HTML本身还支持一类“直接用英文名描述”的预定义颜色,比如tomato、steelblue、rebeccapurple。这里把它们到底怎么用、以及几个更进阶的话题一起讲清楚。
6.1 浏览器内置命名颜色:什么时候用,什么时候不用
现代浏览器内置了大约一百四十多个预定义颜色名称,从black、white、red这种基础色,到coral、seagreen、mediumvioletred这种已经写成名字的扩展色,应有尽有。好处是非常直观,读代码就像读英语句子:background-color: lightcoral;一眼就明白。
但实际项目里我很少直接在生产环境使用命名颜色,主要原因有两个:一是非基础色名称的精确色值在不同浏览器里可能存在细微差异;二是命名颜色没法和团队的语义化变量体系兼容,比如你不能把一个叫lightcoral的颜色轻易归类到“危险”语义里。所以折中方案是:原型验证、临时调试、教学Demo用命名颜色提高效率;正式代码只用颜色表里的变量。
6.2 利用HSL做渐变和主题调色板,不用手动计算一堆相近色
HSL在处理“同一色相的一组颜色”时简直是神器。比如某个页面的图表需要五根同色系但不同深浅的柱子,直接用Hex去逐个微调非常痛苦;如果用HSL,只要保持第一个参数不变,改第二、第三个参数就行。
.chart-bar-1 { background-color: hsl(210, 70%, 55%); } .chart-bar-2 { background-color: hsl(210, 70%, 65%); } .chart-bar-3 { background-color: hsl(210, 70%, 75%); } .chart-bar-4 { background-color: hsl(210, 70%, 85%); } .chart-bar-5 { background-color: hsl(210, 70%, 93%); }肉眼看上去,它们就是同一蓝色的阶梯渐变,不需要费劲地找五个看起来“大概一致”的Hex值。这个方法我用了很多年,做数据可视化页面时效率极高,而且色板统一度远胜手动挑色。
6.3 无障碍视角:文字与背景的对比度不是玄学,有计算公式
很多人不知道, WCAG(Web内容无障碍指南)里对文字与背景的对比度有明确的数值要求:普通文字至少 4.5:1,大号文字(18pt以上或14pt加粗以上)可以放宽到 3:1,图形和UI组件建议 3:1。计算方式是把两个颜色分别转为亮度值,做一次乘除运算。
我平时会先在脑海里粗略估算:深色文字配浅色背景,通常问题不大;浅色文字配浅色背景,必挂;深色文字配深色背景,也要小心。复杂拿不准的颜色,可以借助浏览器的开发工具。比如Chrome DevTools里选中一个元素,如果文字颜色和背景颜色对比度不足,样式面板会直接给出红色警告提示。用久了之后,你会发现“选色不踩对比度坑”是件能训练出来的直觉。
6.4 从一个“看起来还行”的颜色代码表,到真正属于你的主题库
最后分享一下“把色表变成主题库”的心路历程。当初我只是为那个老站点整理了一张速查表,用着用着发现,只靠一张静态表没法根治配色混乱。于是先把它转成团队的CSS变量体系,再按语义分档,给每个语义配好基础、深、浅三件套,最后又套进了一个简单的在线文档,每遇到一个好看又合理的搭配就补充进去,同时标注用途和场景。
真正哪天需要换主题,其实只需替换:root里那几个变量。前端项目里最常见的“从蓝变橙”需求,实际操作就是把品牌色变量改掉,其余位置全部自动跟随。这么一套下来,颜色代码表才真正从“备忘”变成了“工程资产”。
在很多项目里,颜色是最容易“看起来差不多就行”的环节,但往往就是这一个个“差不多”,把页面的质感和可维护性一点点拖垮。别怕麻烦,把色值梳理成体系,花不了几小时,带来的效果却能在之后每次改需求、每次评审、每次团队交接时持续兑现。