CSS颜色名称查找器
查找任意HEX或RGB值最接近的CSS命名颜色
颜色(HEX)
最接近的CSS命名颜色
Δ = 颜色距离(越小越接近)
什么是CSS颜色名称?
CSS定义了148个命名颜色,浏览器通过关键字而非数字代码来识别它们。你可以在样式表中写Tomato,而不是#ff6347;写SlateBlue,而不是#6a5acd。这些名称在CSS Color Level 3(2011年)和Level 4(2022年)中得到标准化,建立在CSS 2.1原始17种颜色以及从早期Unix窗口系统继承的140个X11颜色名称的基础之上。
颜色名称查找器接受任意hex或RGB值,并找到与之最接近的CSS命名颜色。匹配算法计算RGB空间中两种颜色之间的距离,通常采用欧几里得距离:sqrt((r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2)。与输入距离最小的命名颜色即为结果。若距离为零,则输入与该颜色名称完全匹配。
当你希望CSS具有可读性和自说明性时,这一点尤为重要。background-color: Tomato比background-color: #ff6347更能传达意图。在设计评审、无障碍审计或文档编写中,用颜色名称来引用颜色也更加便利——与其说“那个偏橙的红色”,不如直接说“Tomato”。
为什么使用这个颜色名称查找器?
手动查找最近的命名颜色意味着在148条参考表中逐一浏览并对比hex值。本工具自动完成距离计算,并返回5个最接近的匹配结果,附带精确的hex代码和距离分数。
颜色名称查找器的使用场景
按分组的CSS命名颜色参考
CSS Color Level 4规范定义了148个命名颜色关键字。下表按色相分组整理,包含每组的数量和部分示例名称。表中所有名称均为有效的CSS颜色关键字,在所有现代浏览器中均可使用。
| 颜色分组 | 数量 | 示例名称 |
|---|---|---|
| Red / Pink | 14 | IndianRed, LightCoral, Salmon, DarkSalmon, Crimson, Red, +8 more |
| Orange | 5 | Coral, Tomato, OrangeRed, DarkOrange, Orange |
| Yellow | 10 | Gold, Yellow, LightYellow, LemonChiffon, PapayaWhip, Moccasin, +4 more |
| Green | 19 | GreenYellow, Chartreuse, LawnGreen, Lime, LimeGreen, SpringGreen, +13 more |
| Blue / Cyan | 24 | Aqua, Cyan, LightCyan, PaleTurquoise, Aquamarine, Turquoise, +18 more |
| Purple | 19 | Lavender, Thistle, Plum, Violet, Orchid, Fuchsia, +13 more |
| Brown | 17 | Cornsilk, BlanchedAlmond, Bisque, NavajoWhite, Wheat, BurlyWood, +11 more |
| Gray / White | 27 | White, Snow, HoneyDew, MintCream, Azure, AliceBlue, +21 more |
颜色距离:RGB欧几里得距离与感知距离
衡量颜色距离的方法会影响哪个命名颜色被报告为最近匹配。目前有两种方式,对同一输入可能给出不同结果。
代码示例
通过编程方式,使用RGB空间中的欧几里得距离查找最近的CSS命名颜色。以下每个示例接受一个hex字符串,并从CSS规范中返回最接近的颜色名称。
// Euclidean distance in RGB space
function nearestCssColor(hex) {
const r = parseInt(hex.slice(1, 3), 16)
const g = parseInt(hex.slice(3, 5), 16)
const b = parseInt(hex.slice(5, 7), 16)
let bestName = ''
let bestDist = Infinity
for (const [name, value] of Object.entries(cssColors)) {
const r2 = parseInt(value.slice(1, 3), 16)
const g2 = parseInt(value.slice(3, 5), 16)
const b2 = parseInt(value.slice(5, 7), 16)
const dist = Math.sqrt((r - r2) ** 2 + (g - g2) ** 2 + (b - b2) ** 2)
if (dist < bestDist) { bestDist = dist; bestName = name }
}
return bestName
}
nearestCssColor('#6366f1') // → "SlateBlue"
nearestCssColor('#1e293b') // → "DarkSlateGray"import math
CSS_COLORS = {
"Crimson": (220, 20, 60), "SlateBlue": (106, 90, 205),
"Tomato": (255, 99, 71), "Teal": (0, 128, 128),
# ... full list of 148 entries
}
def hex_to_rgb(hex_str: str) -> tuple[int, int, int]:
h = hex_str.lstrip("#")
return (int(h[0:2], 16), int(h[2:4], 16), int(h[4:6], 16))
def nearest_css_color(hex_str: str) -> str:
r, g, b = hex_to_rgb(hex_str)
best = min(
CSS_COLORS.items(),
key=lambda item: math.dist((r, g, b), item[1])
)
return best[0]
print(nearest_css_color("#6366f1")) # → SlateBlue
print(nearest_css_color("#ff6347")) # → Tomato (exact match, distance 0)package main
import (
"fmt"
"math"
"strconv"
)
type CSSColor struct {
Name string
R, G, B int
}
var colors = []CSSColor{
{"Crimson", 220, 20, 60},
{"SlateBlue", 106, 90, 205},
{"Tomato", 255, 99, 71},
// ... full list
}
func hexToRGB(hex string) (int, int, int) {
r, _ := strconv.ParseInt(hex[1:3], 16, 64)
g, _ := strconv.ParseInt(hex[3:5], 16, 64)
b, _ := strconv.ParseInt(hex[5:7], 16, 64)
return int(r), int(g), int(b)
}
func nearest(hex string) string {
r, g, b := hexToRGB(hex)
best := ""
bestDist := math.MaxFloat64
for _, c := range colors {
d := math.Sqrt(float64((r-c.R)*(r-c.R) + (g-c.G)*(g-c.G) + (b-c.B)*(b-c.B)))
if d < bestDist {
bestDist = d
best = c.Name
}
}
return best
}
func main() {
fmt.Println(nearest("#6366f1")) // → SlateBlue
}