4. 组件与实例体系:创建组件、实例替换、覆盖属性、组件库管理

4.1 用户场景与业务问题

在多页面、多端产品设计中,按钮、表单、导航栏等重复元素频繁出现。设计师最痛苦的场景是:一个按钮样式(如圆角、颜色)在 30 个页面中被直接复制粘贴,当视觉规范更新时,需要逐一修改,极易遗漏且效率极低。

核心业务问题:如何实现“一处修改,全局更新”?如何允许局部定制又不破坏整体一致性?Figma 的组件与实例体系正是为解决此问题而设计。

产品概念:组件是设计系统中的“原子”,实例是组件的副本。修改主组件,所有实例自动同步;实例可独立覆盖部分属性,满足差异化需求。

4.2 组件与实例的核心概念

维度主组件(Main Component)实例(Instance)
定义组件的“模板原件”基于主组件生成的副本
修改影响修改后所有实例自动更新仅影响自身,可覆盖单属性的值
独立性可被识别、重命名、发布依赖主组件,无法脱离存在
典型用途定义按钮、图标、卡片等原子放置于具体页面,做局部调整
组件库归属可发布至团队库不可单独发布

4.3 创建组件:从零到主组件

Figma 操作步骤:
  1. 选中一个或一组图层(例如一个带文字的圆角矩形)。
  2. 按快捷键 Ctrl + Alt + K(Win)或 Cmd + Option + K(Mac),或右键 → Create Component。
  3. Figma 会将选中元素转换为组件,左侧图层面板中出现 主组件图标(菱形+实心)。
  4. 建议立即进入组件命名规范,如 Button / Primary / Default。

设计决策权衡:组件粒度过细(如将文字、背景拆成独立组件)会导致实例数量爆炸;粒度过粗(如整个表单作为一个组件)则难以定制。推荐以“可独立复用的最小视觉单元”为标准,例如按钮、输入框、标签、卡片。

4.4 实例替换与覆盖属性

实例替换:选中页面中的实例,在右侧属性面板中点击 Swap Instance(或按快捷键 Ctrl + ] 打开快速切换面板),可快速更换为同一组件库中的其他变体。例如将“主按钮”替换为“次按钮”或“文本按钮”。

覆盖属性(Overrides):实例允许修改以下属性而不影响主组件:

  • 文本内容、字体、字号、颜色
  • 填充、描边、边框
  • 圆角、透明、效果
  • 图层可见性(可用于多状态切换)
注意:实例的覆盖属性在 主组件更新 时会保持优先。例如主组件将圆角从 8px 改为 12px,之前实例单独覆盖为 4px 则不受影响。这种“继承与覆盖”机制保障了全局更新与局部定制的平衡。

4.5 组件库管理:发布与版本

当组件在单个文档中足够稳定后,可将其发布为团队库,供所有项目使用。

阶段操作作用
本地组件在设计文件中创建组件当前文档可用
发布库在 Figma 中点击 团队库 → Publish将组件同步到团队库,其他文档可启用
启用库在其他文档中:Assets → Team Library → 开启可拖拽使用库中的组件
版本管理每次发布时可写版本说明(如 v1.2.0)便于回溯和团队协作

业务建议:组件库应当作为“设计系统的单一事实来源”,所有画板中的按钮、图标都应该来自库中的组件,而非本地复制。定期组织组件审查会,淘汰过期样式。

4.6 原型说明与交互流程

在交互原型中,组件实例的覆盖属性可以触发不同的组件状态。例如:

  • 一个“提交按钮”实例在未填写表单时为灰色禁用状态,点击后显示加载图标。
  • 使用组件状态(Figma 的 Variants + Conditional 交互)可实现:主组件定义四个状态(Default、Hover、Pressed、Disabled),实例通过交互事件(On Tap → Change To)在不同状态间切换。

以下组件树展示了主组件、变体、实例与覆盖的关系:

组件与实例关系图 主组件 Button / Primary 变体1 Button / Secondary 变体2 Button / Ghost 实例 A (未覆盖属性) 实例 B (覆盖文本颜色) 实例 C (覆盖圆角+文本) 覆盖属性包括:文本、颜色、圆角、描边、可见性等实例的覆盖在主组件更新时保持不变(继承优先)

4.7 验收标准

  • 一致性:修改主组件(如按钮主色),所有页面中的该按钮实例颜色同步变更,无遗漏。
  • 覆盖灵活性:实例可单独修改文本内容,而其他实例保持不变;覆盖的属性在下次主组件更新时不丢失。
  • 组件库可用:其他设计师启用团队库后,可正常拖拽组件、替换实例。
  • 版本可追溯:库的每次发布均有版本说明,更新日志清晰。
实操核查表:检查文档中是否存在非组件化的重复元素(重复比例 > 30% 则需重构);检查实例覆盖是否过度(如果实例所有属性都被覆盖,本质已脱离组件,应考虑创建新组件)。