一、 变体(Variant)的定义与核心价值 #
1. 变体的存在意义 #
- UI 设计的控件和组件不是纯平面化的静态物体,它们会因交互而发生变化。
- 在 UI 世界中,这种交互反馈主要依靠视觉形式,这意味着一个组件或控件需要有多个状态(如默认、悬浮、点击、禁用等)。
- 变体功能旨在将一个组件或控件分裂出的这些不同状态合并成一个 Component,从而便于管理和使用。
2. 变体解决了传统方法的混乱问题 #
- 在没有变体功能或传统设计软件中(如 Sketch),设计师通常通过命名(在组件名称前增加前缀,如“小按钮”)来对不同状态进行分类和管理。
- 这种命名分组虽然可以在资源库(Assets)中实现分类展示,但随着组件数量的膨胀和不同状态(如白天/夜晚模式、不同尺寸)的增加,列表会变得极其复杂和混乱,难以维护。
- 变体功能提供了更清晰、多维度的属性切换,解决了这一混乱问题。
二、 变体(Variant)的创建与属性设置 #
1. 变体的创建方法 #
- 前提: 必须选择父级组件(不能是子组件),然后点击右上角的
Add Variant(添加变体)。 - 结构: 变体创建后,整个结构被视为一个组件,但里面包含了不同的状态(子变体)。
- 高效创建流程(重要): 不建议先创建变体,再在变体内部编辑样式。正确的流程是:先在外部将所有状态和模式(如默认、悬浮、点击、深色模式等)的组件都设计并制作出来,然后再将它们一起选中并编辑成变体,最后在变体中定义属性和值。
2. 属性(Property)与多维度切换 #
- 属性定义: 属性(Property)指的是不同子变体之间的区别,例如“状态”、“主题”或“尺寸”。
- 命名与赋值: 用户需要为每个属性命名(如“状态”),并为每个子变体赋予对应的值(如
Default、Hover、Clicked)。 - 多属性应用: 变体支持多个属性。例如,一个按钮可以同时拥有“状态”属性(Default/Clicked)和“主题”属性(Light/Dark),构成多维度的切换矩阵。
- 在多属性环境下,如果需要新增一个属性(如“尺寸”),则所有原有的状态(如 Light/Dark、四种状态)都需要为这个新尺寸重新制作一套。
- 应用结果: 将变体组件拖出后,在右侧属性面板上,用户可以通过下拉菜单或开关清晰地进行状态和模式的快速切换。
3. 交互开关(Boolean Switch)的应用 #
- 通过将属性值命名为
Yes和No,可以将右侧的属性选择列表转化为一个交互式的开关(Toggle Switch)。 - 价值: 这可以减少用户的交互步骤,提升使用体验,例如将“主题”属性改为“深色模式”开关。
三、 组件进阶属性(非变体) #
在创建组件时,除了变体(Variant)外,Figma 还提供了三种其他属性,用于对子组件内部元素进行精细化控制。
这些属性需要在父级组件的右侧属性面板中,通过 Add property 按钮进行创建。
1. Text(文本属性) #
- 作用: 允许用户在子组件上直接修改特定的文本内容,而无需进入组件内部编辑。
- 创建流程:
- 在父级组件上创建
Text属性,并定义属性名(如“按钮文本”)和默认值(Value)。 - 设计师必须进入组件内部的文本图层,并将其与刚才创建的文本属性进行关联(Apply property)。
- 在父级组件上创建
- 特点: 父级组件定义了一种规则,子组件则进行实际的操作和赋值。
2. Boolean(布尔值/可见性) #
- 作用: 控制子组件内部元素的可见性和隐藏。
- 命名批评: 来源认为 Figma 使用
Boolean来表示图标可见性的用词不佳。 - 关联方式: 必须在组件内部选中目标图层(如图标),然后在右侧的
Appearance(外观)面板中,将该元素的可见性(眼睛图标)与布尔属性进行关联。 - 结果: 在子组件的右侧面板上,会出现一个开关,用于控制该图层是否显示。
3. Instance Swap(实例切换) #
- 作用: 允许用户在子组件上快速替换组件内部的另一个组件实例(如图标)。
- 创建前提: 目标元素(如图标)必须在外部先被创建为组件,并置入到父级组件中。
- 创建流程:
- 在父级组件上创建
Instance Swap属性,并指定默认实例(Default instance)。 - 在组件内部选中目标组件实例(如内部的图标组件),并将其与实例切换属性进行关联。
- 在父级组件上创建
- 应用结果: 子组件右侧面板会多出一个下拉菜单,用于快速切换组件内部的图标或组件类型。来源指出,这个功能在实际项目中使用频率不高。
四、 变体应用的建议与警告 #
- 操作顺序至关重要: 必须先完成所有子状态的设计和编辑,再用变体功能将它们聚合,而不是先创建变体再进入编辑。
- 功能局限性: 变体下方的三种进阶属性(文本、布尔值、实例切换)在某些方面可能不够完善,应用时应理解其背后的逻辑和操作方式。
- 避免过度设计: 不建议将组件做得过于细致(像 Apple 的文件一样),因为层级过多会导致组件库难以维护和反琐。
最后一次修改于 2025-11-21