Figma 组件一键换肤:用 Variants + Token 变量做浅色/深色主题(可直接套用)

你将得到什么

把组件库改造成“可一键换肤”的结构:同一套组件,切换浅色/深色(也能扩展到多品牌色)。核心思路是:外观用 Token(变量)驱动,交互状态用 Variants 驱动。

准备:建立 Token(变量)命名

打开 Variables(变量),新建 Collection:Theme,Mode 至少两个:LightDark

建议从最常用的颜色 Token 开始(示例命名可直接照抄):

color/bg, color/surface, color/text, color/text-muted, color/border, color/primary, color/primary-contrast

把 Light/Dark 两套值都填好(Dark 不是反色,按可读性重设对比)。

步骤 1:把组件的颜色从“固定值”替换为“绑定变量”

选中组件里的填充/描边/文字颜色 → 右侧颜色面板 → 选择 Variable 绑定到对应 Token。

常见绑定建议:

页面背景 → color/bg;卡片底 → color/surface;正文文字 → color/text;弱文字 → color/text-muted;分割线 → color/border;主按钮底 → color/primary;主按钮字 → color/primary-contrast。

步骤 2:用 Variants 管状态,不要用两套组件

把按钮/输入框等做成一个 Component Set(组件集),用 Variants 表达状态(示例):

state=default / hover / pressed / disabled;size=sm / md / lg;tone=primary / neutral / danger

注意:不要给“Light/Dark”单独做 Variant。主题属于“全局外观”,应该由变量 Mode 控制。

步骤 3:让主题切换真正“一键”

在使用页面/组件库的顶层 Frame(或设计系统页面)设置变量 Mode:

右侧 Variables → 选择 Collection Theme → 将 Mode 从 Light 切到 Dark。

如果所有颜色都绑定了 Token,界面会整体换肤;如果有元素没变,说明它仍然是固定色值。

排查清单:为什么我切换 Mode 没变化?

1) 有图层没绑定变量:检查 Fill/Stroke/Text 是否显示 Variable 小图标。

2) 用了 Style 但没用变量:旧项目可能是 Color Styles,逐步替换成 Variables 或把 Style 内部改为变量。

3) 组件内部覆盖:实例上手动改色会覆盖绑定,重置实例属性或回到主组件修正。

进阶:把 Token 拆成“语义层”更好维护

当组件变多时,建议加一层语义 Token:比如 color/button-primary-bg、color/input-border 等,然后再映射到基础 Token。这样改品牌色/改对比,只需要改映射,不需要改组件。

最终检查(发布前 30 秒)

切换 Light/Dark 各浏览一遍:标题/正文/按钮/输入框/分割线的对比是否清晰;禁用态是否仍可读;主按钮文字是否足够亮。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

暂无评论,快来抢沙发吧~

操作成功