hextorgb 函数必须手动实现,因 css 无运行时转换能力,getcomputedstyle 返回值格式不固定且不保留原始 hex;需支持 #fff 和 #ffffff 两种写法,校验输入合法性,正确扩展 3 位简写,用 parseint(x, 16) 转换,并推荐返回含 r/g/b 数值及 rgb 字符串的对象。

hexToRgb 函数最可控,CSS 本身不提供运行时转换能力,getComputedStyle 返回的 rgb 值不可靠,也不能反向推导原始 hex。
为什么不能靠 CSS 自带功能或 getComputedStyle?
浏览器解析完颜色后,getComputedStyle(el).color 可能返回 rgb(255, 87, 51)、hsl(14, 92%, 60%) 或甚至 currentcolor,完全取决于内部实现和是否被重写。它不保留输入格式,也无法保证每次返回 rgb —— 所以不能用来“提取”原始 hex 对应的 rgb 值。
hexToRgb 必须处理 #fff 和 #ffffff 两种写法
3 位简写(如 #f33)不是语法糖,而是独立格式,必须先扩展成 6 位再解析:
-
#f33→ 先转为ff3333,再拆成ff/33/33 - 忽略大小写和可选的
#前缀是基础,但不能跳过校验:比如#ggg或#1234应该拒绝而非静默错误 - 正则建议用
/^#?([a-f\d]{6}|[a-f\d]{3})$/i,比模糊匹配更安全
parseInt(x, 16) 是核心,别手写进制转换
十六进制字符串转十进制,parseInt 已经足够健壮,无需手动位运算或查表:
-
parseInt('ff', 16)→255,parseInt('00', 16)→0 - 对 3 位简写,重复字符即可:
'f' + 'f'得'ff',再parseInt - 不要用
Number('0x' + str),它对'0xgg'这类非法输入返回NaN却不报错,不如parseInt的容错明确
返回值格式要兼顾调试和后续使用
返回 rgb(r,g,b) 字符串最常用,但如果后续要算亮度、混合色或转 HSL,直接返回对象更灵活:
- 推荐返回
{ r: 255, g: 87, b: 51, rgb: 'rgb(255, 87, 51)' } - 如果只用于 CSS 设置,字符串够用;如果要做计算,避免反复
split(',')解析 - 透明度(RGBA)需额外参数,
hexToRgb('#f33', 0.8)→rgba(255, 51, 51, 0.8),注意 alpha 不参与 hex 解析
#abc 错扩成 aabbcc 是对的,但有人会误写成 ababcc 或漏掉某一位。校验输入长度 + 统一转小写 + 明确分组,比追求代码行数更重要。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











