Skip to main content
Bun.color(input, outputFormat?) 使用 Bun 的 CSS 解析器来解析、规范化和转换用户输入的颜色,支持以下输出格式: 你可以用它来:
  • 验证并规范化颜色以持久化到数据库(number 是最适合数据库的格式)
  • 将颜色转换为不同格式
  • 为终端输出上色,超越基本的 16 色(使用 ansi 自动检测终端颜色支持,或使用 ansi-16ansi-256ansi-16m 指定特定色深)
  • 格式化颜色以用于注入到 HTML 中的 CSS
  • 从 CSS 颜色字符串中获取 rgba 颜色分量作为 JavaScript 对象或数字
它是 npm 包 colortinycolor2 的内置替代方案,完全支持解析 CSS 颜色字符串,且零依赖。

灵活的输入

Bun.color 接受以下任意输入:
  • 标准 CSS 颜色名称,如 "red"
  • 数字,如 0xff0000
  • 十六进制字符串,如 "#f00"
  • RGB 字符串,如 "rgb(255, 0, 0)"
  • RGBA 字符串,如 "rgba(255, 0, 0, 1)"
  • HSL 字符串,如 "hsl(0, 100%, 50%)"
  • HSLA 字符串,如 "hsla(0, 100%, 50%, 1)"
  • RGB 对象,如 { r: 255, g: 0, b: 0 }
  • RGBA 对象,如 { r: 255, g: 0, b: 0, a: 1 }
  • RGB 数组,如 [255, 0, 0]
  • RGBA 数组,如 [255, 0, 0, 255]
  • LAB 字符串,如 "lab(50% 50 50)"
  • ……以及 CSS 可以解析为单个颜色值的任何其他内容

格式化为 CSS 颜色

"css" 格式输出有效的 CSS,可用于样式表、内联样式、CSS 变量或 CSS-in-JS。它返回颜色最紧凑的字符串表示。
如果输入未知或解析失败,Bun.color 返回 null

格式化为 ANSI(用于终端)

"ansi" 格式输出用于在终端中为文本着色的 ANSI 转义码。
"ansi" 格式会根据环境变量检测标准输出的色深,并相应选择 "ansi-16m""ansi-256""ansi-16"。如果标准输出不支持任何形式的 ANSI 颜色,则返回空字符串。与 Bun 的其他颜色 API 一样,如果输入未知或解析失败,返回 null

24 位 ANSI 颜色(ansi-16m

"ansi-16m" 格式输出 24 位 ANSI 颜色,可以显示 1600 万种颜色,但需要支持它们的现代终端。 它将输入颜色转换为 RGBA,然后输出为 ANSI 颜色。

256 ANSI 颜色(ansi-256

"ansi-256" 格式将输入颜色近似为最近的 256 种 ANSI 颜色(某些终端支持)。
为了将 RGBA 转换为 256 种 ANSI 颜色之一,我们移植了 tmux 使用的算法

16 ANSI 颜色(ansi-16

"ansi-16" 格式将输入颜色近似为最近的 16 种 ANSI 颜色(大多数终端支持)。
Bun 先将输入转换为 24 位 RGB 颜色空间,然后转换到 ansi-256,再转换到最近的 16 种 ANSI 颜色。

格式化为数字

"number" 格式将颜色输出为 24 位数字,是适合数据库和配置的紧凑表示。

获取红色、绿色、蓝色和 Alpha 通道

"{rgba}""{rgb}""[rgba]""[rgb]" 格式将红色、绿色、蓝色和 Alpha 通道作为对象或数组返回。

{rgba} 对象

"{rgba}" 格式输出包含红色、绿色、蓝色和 Alpha 通道的对象。
示例:
与 CSS 一样,a 通道是介于 01 之间的小数。 "{rgb}" 格式类似,但不包含 Alpha 通道。

[rgba] 数组

"[rgba]" 格式输出包含红色、绿色、蓝色和 Alpha 通道的数组。
示例:
"{rgba}" 格式不同,Alpha 通道是介于 0255 之间的整数。这对于每个通道必须使用相同底层类型的类型化数组很有用。 "[rgb]" 格式类似,但不包含 Alpha 通道。

格式化为十六进制字符串

"hex" 格式输出小写十六进制字符串。
"HEX" 格式相同,但使用大写字母。

打包时的客户端颜色格式化

与许多 Bun API 一样,你可以在打包时使用调用 Bun.color,用于客户端 JavaScript 构建:
client-side.ts
然后,构建客户端代码:
bun build 将以下内容写入 client-side.js