随机取色挑选列表

把每一行一个的项目名依次排到色相环上,相邻两项的色相间隔恒等于 360÷n,给出 HEX、RGB、HSL 三种写法,并支持逐项锁定与换色重掷。

首页改版移动端适配搜索优化会员体系支付接入数据看板消息推送客服工单内容审核权限管理日志归档缓存重构接口网关灰度发布监控告警备份恢复
序号项目色相 HHEXRGBHSL状态

提示:在色相起点、饱和度、明度输入框里直接按 Enter 就会按新参数重排;项目列表是多行文本,Enter 留给换行,改完列表后按 Ctrl + Enter(macOS 用 Cmd + Enter)重排。

使用方法

  1. 在文本框里每行写一个项目名,行序即取色顺序。这个随机取色挑选列表默认预置 16 个模块名,可整段替换成你的图表系列、团队成员或活动分区。
  2. 确认右侧三个数字:色相起点 θ = 0、饱和度 S = 72、明度 L = 55。这就是示例里那 16 个色号的来源,改任何一个都会立刻重排全部颜色。
  3. 看结果区第一行的摘要:它会报出色相步长(360÷项数)、当前参数和最小相邻色相间隔。步长小于 6 度时,摘要会直接提醒你相邻两块肉眼已经分不出来。
  4. 某一项的颜色你满意,就点它右边的「锁定」;锁定的项在后续重掷里色相冻结不动。不想要了再点一次变成「解锁」。
  5. 想让某一项换个颜色,点它右边的「重掷」:它会同另一个未锁定项交换色相。因为色相只取色相环上那 n 个等分角度,所谓换色是换位而不是重新随机一个角度,整组仍然是等间隔的。
  6. 点「换一套配色(重掷)」把色相起点 θ 换成 0~359 的随机整数,所有未锁定项整体旋转;点「全部解锁」清掉所有锁定;点「导出 CSV」存成带 BOM 的表格文件。
  7. 结果表默认显示 12 行,点「加载更多」展开全部;点「复制对照表」把整张表按 TSV 复制到剪贴板,直接粘进 Excel 会自己分列。

这个随机取色挑选列表能解决什么问题

一是给图表系列分色。折线图、柱状图、分组条形图最怕两条线颜色接近,靠手感挑色很容易撞色。这里把色相按 360÷n 等分,16 条线每两条相差 22.5 度,是同一饱和度与明度下能做到的最远间隔。

二是给固定名单批量着色。看板上的项目标签、地图上的分区、甘特图上的任务条,只要有一份名单,粘贴进来就能一次拿到一整套色号,不用逐个去配色网站点。

三是把颜色固定下来复用。设计稿评审到一半,某个模块的颜色被认可了,点一下锁定,之后整组怎么重掷它都不变;导出 CSV 后色号进版本库,前端直接读,避免「这版和上版颜色不一样」这种返工。

本页不做这些事:不判断配色是否和谐、不校验前景与背景的对比度、不模拟色盲视觉、不从图片提取颜色。要过无障碍对比度请用页面底部的「颜色对比度检测」,要按明度生成由浅到深的同色系请用「浅色颜色生成器」。

取色原理:HSL 等间隔采样、色相步长与锁定语义

采样公式只有一句话:第 i 项的色相 Hi = (θ + i × 360 ÷ n) mod 360,i 从 0 数到 n−1。θ 是色相起点,默认 0,此时公式退化成 Hi = i × 360 ÷ n,也就是把整个色相环切成 n 份、从红色(0 度)开始顺时针取点。16 项时步长是 22.5 度,第 16 项落在 337.5 度,它与第 1 项之间隔着 360−337.5 = 22.5 度,色相环是闭合的,最后一项到第一项的间隔同样是 22.5 度,这一点经常被漏掉。

为什么在 HSL 里等分而不是直接随机 RGB。HSL 由 CSS Color Module Level 3(W3C 推荐标准)定义:H 是 0~360 度的色相角,S 与 L 是 0~100% 的饱和度与明度。若在 R、G、B 三个通道各自独立取 0~255 的随机整数,绝大多数结果落在灰暗区——三通道都接近 128 时就是灰色,色相无从谈起;即使滤掉灰色,剩下的颜色在色相环上也忽密忽疏。先定色相、再统一 S 与 L,才能把「相邻两项差别尽可能大」变成一条可验证的等式。

色相等分不等于感知均匀。HSL 只是 sRGB 的几何变换,不是感知均匀空间。用默认的 S=72%、L=55% 实测:每一步同样是 22.5 度,相邻两块在 RGB 上的欧氏距离却在 45.62 到 62.00 之间波动,最大是最小的 1.359 倍——最小出现在 112.5 度到 135 度这一段(#4edf3a 对 #3adf63),最大出现在 0 度到 22.5 度这一段(#df3a3a 对 #df783a)。原因是当某个通道被推到 0 或 255 附近后就不再变化,后续色相的位移只能靠剩下的通道承担。要做到真正的感知均匀需要换成 CIELAB 或 OKLCH 并处理色域映射,代价是浏览器兼容与代码复杂度都明显上升;对 16 项以内的分组配色,HSL 等分已经够用,但你要知道它在黄绿区偏挤、在蓝紫区偏疏。

8 位量化是硬上限。屏幕最终显示的是 8 位 sRGB,每个通道只有 256 级,所以色相细分到一定程度就换不出新颜色了。实测在 S=72%、L=55% 的圆上以 0.25 度为步长绕一圈,只有 990 个互不相同的 HEX;S=30%、L=85%(浅色)只剩 138 个;S=50%、L=20%(深色)是 306 个。项数再多,颜色也只是在这几百个值里反复。

锁定改变的是间隔,不是公式。被锁定的项保留冻结那一刻的绝对色相,不跟着 θ 旋转,于是整组不再严格等间隔。摘要里的「最小相邻色相间隔」就是把所有色相排序后求环形间隔的最小值,低于 15 度会给出提示;想恢复严格等间隔,先「全部解锁」再重掷。

随机数来自加密接口。θ 由 crypto.getRandomValues(new Uint32Array(1)) 取 32 位无符号整数后映射到 0~359,并用拒绝采样:接受上限 Math.floor(4294967296 ÷ 360) × 360 = 4294967160,落在 4294967160~4294967295 这 136 个取值上就丢弃重抽,接受率 99.9999968%,换来严格均匀的分布。单项重掷选「跟谁换」也用同一函数。

从 HSL 到 HEX 的换算与舍入。先由 H、S、L 求出 C = (1 − |2L − 1|) × S、X = C × (1 − |(H ÷ 60) mod 2 − 1|)、m = L − C ÷ 2,按 H 所在的 60 度扇区决定 R、G、B 与 C、X 的对应关系,再加上 m 并逐通道四舍五入到 0~255 的整数,最后写成 #RRGGBB。舍入发生在最后一步,中间量保持浮点,所以不会出现「先取整再相加」累积误差。

完整示例(默认 16 项,θ=0 度)

示例条件与页面打开时的默认值完全一致:16 个项目、色相起点 θ = 0、饱和度 S = 72%、明度 L = 55%。代入公式,色相步长 = 360 ÷ 16 = 22.5 度,16 个色相依次是 0、22.5、45、…、337.5 度;16 个色相之和为 2700 度(等于 22.5 × 15 × 16 ÷ 2)。默认参数下的完整结果:

序号项目色相 HHEXRGB
1首页改版0.0 度#df3a3argb(223, 58, 58)
2移动端适配22.5 度#df783argb(223, 120, 58)
3搜索优化45.0 度#dfb63argb(223, 182, 58)
4会员体系67.5 度#cadf3argb(202, 223, 58)
5支付接入90.0 度#8cdf3argb(140, 223, 58)
6数据看板112.5 度#4edf3argb(78, 223, 58)
7消息推送135.0 度#3adf63rgb(58, 223, 99)
8客服工单157.5 度#3adfa1rgb(58, 223, 161)
9内容审核180.0 度#3adfdfrgb(58, 223, 223)
10权限管理202.5 度#3aa1dfrgb(58, 161, 223)
11日志归档225.0 度#3a63dfrgb(58, 99, 223)
12缓存重构247.5 度#4e3adfrgb(78, 58, 223)
13接口网关270.0 度#8c3adfrgb(140, 58, 223)
14灰度发布292.5 度#ca3adfrgb(202, 58, 223)
15监控告警315.0 度#df3ab6rgb(223, 58, 182)
16备份恢复337.5 度#df3a78rgb(223, 58, 120)

这 16 个 HEX 值互不相同,最小相邻色相间隔是 22.5 度——因为每一项都恰好占一个等分角度,不存在两个项目共用同一个色相的情况。作为对照,如果 θ 取 30 度,16 个色相整体右移 30 度,色号会全部换掉,但两两之间的色相差仍然是 22.5 度,最小间隔不变。

再把参数改成 S=100%、L=50%(基准色),色相 0、60、120、180、240、300 度分别落在 #ff0000、#ffff00、#00ff00、#00ffff、#0000ff、#ff00ff,可以拿它验证换算是不是对的。

项数、色相步长与可分辨度对照表

下表按公式 360÷n 算出各档步长。「相邻 HEX 举例」取自默认参数 θ=0、S=72%、L=55% 下的前两项,用来看步长变小时色号还能不能看出差别。

项目数 n色相步长 360÷n相邻 HEX 举例(θ=0,S=72%,L=55%)RGB 欧氏距离适用建议
3120.0 度#df3a3a / #dfb63a—三分类标签,间隔极大
572.0 度#df3a3a / #8cdf3a—五档评级、五个分区
660.0 度#df3a3a / #dfb63a—六边形雷达图六轴
845.0 度#df3a3a / #dfb63a—折线图 8 条线,仍很宽松
1230.0 度#df3a3a / #dfb63a—月份、12 个团队的常用上限
16(默认)22.5 度#df3a3a / #df783a62.00平衡点,色号清晰且数量够用
2018.0 度#df3a3a / #df633a—开始要配合图例使用
3012.0 度#df3a3a / #df4e3a—建议只在色块足够大时使用
409.0 度#df3a3a / #df443a—相邻两块已需要仔细比对
487.5 度#df3a3a / #df413a—接近可分辨下限
606.0 度#df3a3a / #df3f3a≈16.5临界值,摘要开始给出提醒
64(上限)5.625 度#df3a3a / #df3e3a≈15.5本工具允许的最大项数

把「RGB 欧氏距离」一列和色号一列对着看:24 项以后,相邻两个色号已经只差一个通道上的个位数,缩略图尺寸下基本分辨不出。1 度色相在默认参数下平均只换算成 2.75 的 RGB 欧氏距离(最小 2.0,最大 3.0),也就是说色相步长每减少 1 度,屏幕上颜色只挪动不到 3 个色阶。

输入范围、边界与舍入说明

常见问题

为什么相邻两项的色相差是 360÷n,而不是随手取一个随机角度?

因为「随机」和「均匀」是两件事。独立均匀地随机取 n 个 0~360 的角度,n=16 时任意两项最小间隔的期望只有 360÷n² ≈ 1.4 度,实际跑一次常常出现两块几乎同色。等分法则把最小间隔锁死在 360÷n = 22.5 度,这才是分组配色真正需要的性质。本工具的随机性只用在「色相起点 θ」上,它负责整体旋转,不改变间隔。

点了「锁定」以后,为什么摘要里的最小间隔会变小?

锁定项冻结的是它当时那一刻的绝对色相,不参与后续的 θ 旋转;其余项照旧按新 θ 等分。两套角度叠在一起就可能挨得很近。这不是 bug,而是「既要固定已知颜色、又要保持等分」在数学上无法同时成立。工具把「最小相邻色相间隔」明确报出来,低于 15 度就提示你先解锁再重排。

「重掷」到底换的是什么?为什么不直接给我一个随机颜色?

本工具的色相只能落在 θ + i×360÷n 这 n 个角度上。直接给一个随机颜色会立刻破坏等间隔,让某两块挤在一起。所以单项重掷的语义是把该项的色相与随机另一个未锁定项交换——你看到的效果是「这一项换了个颜色」,而整组色号集合一个都没变。想整体换掉,用「换一套配色」改 θ。

16 项时那 16 个色号会不会有重复?

不会,实测 16 个 HEX 全部互异。但要区分「色相不重复」与「HEX 不重复」:色相按 22.5 度递增永远不会撞,可一旦把 S 压得很低,不同色相可能被 8 位量化到同一个 HEX,项目数接近上限 64 时尤其明显。

为什么明度只让填 10~90,不让我填 0 或 100?

L=0% 时 HSL 退化为纯黑,L=100% 时退化为纯白,两种情况色相都失去作用:实测 L=0% 下 H=0 与 H=200 都输出 #000000,L=100% 下都是 #ffffff。放开这两个端点只会让用户拿到一屏一样的颜色,所以把可调区间限制在 10~90,任何色相在这一段里都能保留可辨识的差别。

这套颜色能直接过无障碍对比度检查吗?

不能,本工具只把色相排均匀,不计算任何对比度。同一个色相在白底与深底上的对比度差别很大,正文可读性要求 AA 级 4.5:1、大字号 AA 级 3:1、AAA 级 7:1。要当文字或图标色用,请把 HEX 拿去「颜色对比度检测」逐个验。

什么场景下应该改用 CIELAB 或 OKLCH?

当你需要「不管什么色相,相邻两块看起来都差不多远」的时候。默认参数下同样是 22.5 度,RGB 欧氏距离在 45.62 到 62.00 之间摆动,最大是最小的 1.359 倍,肉眼在黄绿区会觉得两块挨得更近。做连续色阶或热力图分级时值得换到感知均匀空间;做离散分组配色则 HSL 等分更好维护。

导出 CSV 打开是乱码,或者复制对照表粘进 Excel 没分列,怎么办?

CSV 导出带 UTF-8 BOM,Excel 一般能正确识别中文项目名;若仍乱码,用「数据 → 从文本/CSV 导入」并手动选 UTF-8。复制对照表走的是 TSV(制表符分隔)而不是逗号,粘进表格软件会自动分列;若全挤在一列,检查粘贴时是否选了「只保留文本」。

相关工具