rgb 是 #rrggbb 的简写形式,浏览器自动将其每位字符复制一次展开为六位,如 #f30→#ff3300、#123→#112233;非法格式如 #1234 被忽略;简写仅支持等比色值,精确颜色必须用六位;漏写 # 会导致声明被静默丢弃。

#RGB 是简写,#RRGGBB 是完整形式
两者本质是同一套编码规则的不同书写方式,#RGB 会被浏览器自动展开为 #RRGGBB。比如 #f30 等价于 #ff3300,不是 #f03000 或 #f30300——每位字符复制一次,顺序严格对应红、绿、蓝。
常见错误是误以为 #123 展开成 #112233,其实它是 #112233?不对,#123 → #112233 是错的;正确展开是 #112233?再核对:第一位 1 → 11(红),第二位 2 → 22(绿),第三位 3 → 33(蓝),所以 #123 确实等于 #112233。但注意:#1234 或 #12345 是非法格式,CSS 解析器直接忽略,不会报错也不会 fallback。
#RGB 只能表示“等比缩放”的颜色
简写形式天然限制了表达能力:#abc 只能表示那些 R/G/B 分量各自是“xx”型的值(即 00、11、22…ff),无法表示像 #1a2b3c 这种精细控制的颜色。如果你需要精确指定 #1a2b3c,就必须写六位形式,不能偷懒用简写。
-
#09c→#0099cc(青蓝色) -
#000→#000000(纯黑) -
#fff→#ffffff(纯白) -
#3a8→#33aa88,不是#3a86ff(后者必须写全六位)
解析性能和兼容性几乎无差别
V8 和 Blink 引擎对两种格式都做了深度优化,#RGB 和 #RRGGBB 的解析耗时差异在纳秒级,实际项目中测不出来。但要注意:所有浏览器对 #RGB 的支持从 CSS1 就已完备,不存在兼容问题;而八位写法 #RRGGBBAA 在 IE11 及更早版本完全不识别,这点和简写无关。
真正影响选择的不是性能或兼容,而是可维护性:
- 团队统一用六位形式,方便颜色值排序、diff 对比、自动化校验
- 设计系统输出色值时若含
#3a86ff这类非等比值,前端硬转成#3a8会失真 - 工具链(如 PostCSS、Stylelint)默认警告或自动转换简写,需提前约定规则
别把#漏掉,也别当成变量名用
# 不是装饰符,是 CSS 语法强制要求的标识符。写成 color: 3a86ff 或 background: #3a86ff; 里漏了 #,整条声明会被浏览器静默丢弃,控制台也不报错——这是最常被忽略的低级但致命问题。
另一个坑是把十六进制当 JS 变量名用,比如 const #3a86ff = 'primary';,这在 JS 中非法,# 开头不能作标识符。如果要用,得包成字符串:const colors = { primary: '#3a86ff' };
简写和完整形式选哪个,取决于你是否需要精确控制每通道、团队规范是否允许、以及有没有自动化工具兜底。没有银弹,但漏掉 # 是唯一一定会翻车的操作。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











