Figma 组件变体从零到可复用:用属性与自动布局做一套按钮系统

你将做出什么

目标:用一套按钮(Primary / Secondary / Ghost)做一个可复用的 Figma 组件系统,包含尺寸(S/M/L)、状态(Default / Hover / Pressed / Disabled)以及图标开关。最终你会得到:

1)一个按钮主组件(Button)+ 变体(Variants);2)清晰的属性命名;3)可扩展的样式结构;4)交付时不容易“乱套”的使用方式。

准备:先把按钮拆成可维护的结构

在开始做变体前,先把按钮的内部结构固定下来。推荐层级:

Button(Auto Layout) → Icon(可选) + Label(文本)

关键点:

- Button 容器必须是 Auto Layout,方向水平(Horizontal),垂直居中;

- 统一使用 Padding 控制内边距,不用手动拖宽;

- Label 用文本样式(Text Style),不要每个按钮单独改字号;

- Icon 建议使用 16/20/24 的规范网格,避免图标大小漂移。

第 1 步:把“样式”做成 Variants 的第一维

创建组件后,新增 Variants,并把第一个属性命名为:

Type:Primary / Secondary / Ghost

建议命名规则:用英文、首字母大写、无空格(或用短横线),避免团队里出现多个近义词(比如 Style、Theme、Kind 混用)。

然后分别设置三种按钮的填充、描边与文字颜色。提醒:Ghost 通常只有描边或透明底,Primary 通常有实心底。

第 2 步:把“尺寸”做成第二维(Size)

新增第二个属性:

Size:S / M / L

尺寸控制建议只动这三件事:

- Padding(上下/左右);

- 字号(或 Text Style);

- 圆角(可选:跟随高度比例)。

尽量不要让同一 Size 的高度在不同 Type 里不一致,否则产品界面会出现“按钮对不齐”的常见问题。

第 3 步:把“状态”做成第三维(State)

新增第三个属性:

State:Default / Hover / Pressed / Disabled

状态设计的简单公式:

- Hover:背景/描边轻微加深或提升对比;

- Pressed:再加深一点,并可降低阴影;

- Disabled:整体降低对比(透明度、灰阶),同时保证文字仍可读。

注意:不要用“整体 40% 透明度”粗暴处理 Disabled,会让文字可读性和对比度不可控;更稳的做法是分别设定背景/描边/文字的禁用色。

第 4 步:用组件属性(Component Properties)替代“复制一份带图标的变体”

图标是按钮组件里最常见的扩展需求。如果你为“带图标”和“不带图标”分别做变体,很快会爆炸(Type×Size×State×IconOn/Off)。

更推荐:

- 保留一个 Icon 图层,但默认隐藏;

- 将 Icon 的可见性绑定为布尔属性:Icon(True/False);

- 或者直接把 Icon 作为可替换实例(Instance Swap),命名为 Leading icon

这样你不会新增任何变体数量,但使用者仍能一键开关或替换图标。

第 5 步:把命名做“给未来的你看的”

最终属性建议:

Type / Size / State / Icon

示例:

Type=Primary, Size=M, State=Default, Icon=False

如果团队还有“危险操作”按钮,可以再加一维 Tone(Normal/Danger),但不要在早期就过度抽象。

交付检查:用 3 分钟避免 80% 的返工

发布给团队/客户前,快速自检:

1)把按钮拖到不同背景(白/浅灰/深色图)上,是否仍清晰可读;

2)把文本改成更长的文案(比如“立即提交申请”),Auto Layout 是否自动撑开;

3)把字号切换为英文或数字(如“PAY NOW”“100%”),是否会偏移;

4)确认 Disabled 仍有足够对比,不会“看不见”。

可选进阶:给开发更友好的规范

如果你需要更标准化的交付:

- 把颜色抽成 Color Styles(Primary/Primary-Pressed 等);

- 在组件描述里写清楚按钮高度与 padding;

- 为每个 Type 定义对应的 CSS Token 名称(例如 btn.primary.bg)。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

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

操作成功