Figma Dev Mode导出的CSS变量为什么和设计稿颜色不一致?
刚在用Figma的Dev Mode导出组件CSS属性,发现背景色变量--bg-color显示的是rgba(255, 255, 255, 0.9),但设计稿明明是纯白色#FFFFFF。检查了图层属性确实没透明度,为啥导出会带alpha值?
尝试过在Paint Settings里关掉”Include Opacity”,但导出的JSON还是有透明度字段。直接复制颜色码到代码里背景反而变灰了,是不是哪里配置错了?
/* 导出的CSS变量 */
:root {
--card-bg: rgba(255, 255, 255, 0.9);
}
先去检查有没有父级Frame开了Effects里的"Blend"模式,特别是Overlay、Soft Light这类混合模式,会改变子元素最终颜色表现。另外Auto Layout的Fill属性有时候默认继承了透明度,就算你自己没设。
最直接的验证方式:把那个组件单独拖到一个新的Page里,啥Frame都不包,再导出看看变量。大概率这时候就是#FFFFFF了。
至于为啥复制rgba(255,255,255,0.9)到代码里变灰——因为你在非白色背景上用了半透明白,叠加出来当然发灰。CSS里半透明颜色永远依赖宿主背景,线上环境如果是body浅灰底,视觉偏差就出来了。
建议别直接用导出的变量,要么改成hsla或hex if alpha === 1,要么在Figma里确保颜色输出干净。如果要用透明度,记得文档标注清楚使用场景,防止注入错误上下文导致UI错乱。
你遇到的情况很典型:看起来背景是 #FFFFFF,但可能这个组件被放在一个半透蒙层里,或者父级 Frame 开了模糊/透明效果,Figma 导出时会“继承”这种视觉表现,自动加上 0.9 的透明度。
解决办法有两个:
第一,别直接用 Dev Mode 面板里的 CSS 变量,回到设计文件,选中那个图层的颜色块,手动点开 color picker,复制真正的 HEX 值。你会发现其实是 #FFFFFF,只是导出被污染了。
第二,如果你一定要用变量导出,去 Styles 面板创建一个 Local Color Style,明确命名比如 "White / 100%",设置为 #FFFFFF 且 opacity=1,然后在图层上应用这个 style。这样 Dev Mode 导出的时候就会正确输出 rgba(255,255,255,1) 或能识别到是纯白。
还有个坑提醒你:Figma 的 "Include Opacity" 开关只影响个别属性导出,不影响颜色本身的解析逻辑。所以就算关了,颜色还是可能带 alpha。
最后建议前端对这种变量加个处理脚本,检测 alpha=1 的 rgba 自动转成 hex,避免视觉偏差。我当时就是因为这个线上灰了一小块边框,差点背 P0 故障……