十六进制颜色仅当r、g、b各通道两位完全相同时(如#ff6699→#f69)才可安全简写为#rgb格式;#ff5a28因g、b不满足条件不可简,#001非法,#999展开为#999999而非#909090。

能压缩,但只对特定格式有效;乱简会改色、埋坑、让同事抓狂。
哪些十六进制颜色能安全简写为#RGB?
必须满足:R通道两位相同(如#FF→#F)、G通道两位相同(#66→#6)、B通道两位相同(#99→#9)。三者缺一不可。
-
#FF6699→ 可简为#F69(FF、66、99 各自成对) -
#333333→ 可简为#333 -
#FF5A28→ 不可简(FF 可,5A ≠ 55 或 AA,28 ≠ 22 或 88) -
#001是非法写法,浏览器会解析为#000111,不是你想要的#000011
简写后体积真变小了吗?
是的,字符数直接减少。但别只看字节数——得算上维护成本和出错概率。
-
#FF0000(7 字符)→#F00(4 字符),省 3 字符 - 单位省略、空格压缩等收益远大于颜色简写本身
- 工具如
cssnano默认只对合法值做转换,不会帮你纠错;你手抖写个#f0a,它就原样留着 -
#f0a在代码里一眼看不出是#ff00aa还是#f000aa,Code Review 时容易漏
为什么#999不等于#909090?
因为三位简写不是“高位补零”,而是“单字复制”:#999 展开为 #999999(R=G=B=153),而 #909090 是 R=G=B=144 的灰阶色,数值和视觉都不同。
-
#abc→ 实际是#aabbcc(R=170, G=187, B=204),不是 R=10/G=11/B=12 - 设计稿给的
#8b4513,绝不能手抖缩成#8b4——b≠4,4≠1,直接失效 - 用 CSS 变量(如
--primary: #333333)替代硬编码,比依赖简写更可控
最隐蔽的问题不在语法对错,而在语义流失:当你把 #000000 写成 #000,再交给 JS 读取 getComputedStyle(el).color,返回的是 rgb(0, 0, 0),原始写法信息彻底丢失。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











