Figma 组件属性+变量:做一套可切换状态的按钮组件(可直接照做)

你将完成什么

这篇教程的目标很明确:在 Figma 里从 0 做一套可复用的按钮组件,并能通过组件属性/变量快速切换「类型、大小、状态、图标」等配置。做完后,你可以把它直接丢进任意项目当作最小可用的设计系统基座。

准备:建立变量(颜色/圆角/间距)

1) 打开右侧面板的 Variables(变量)。新建一个 Collection,例如命名为 DS

2) 在 DS 里创建颜色变量(Color)。建议至少准备:

color/primary:主色(按钮背景)

color/onPrimary:主色上的文字颜色

color/primaryHover:悬停背景色

color/primaryPressed:按下背景色

color/disabledBg:禁用背景色

color/disabledText:禁用文字色

3) 再创建数字变量(Number),例如:

radius/md(如 8)

space/xs(如 8)

space/sm(如 12)

height/sm(如 32)

height/md(如 40)

提示:变量的意义不是“为了高级”,而是让你以后改一处就全局生效。哪怕只有 6-10 个变量,也能明显减少返工。

步骤 1:画一个基础按钮(Auto Layout)

1) 新建一个 Frame,当作按钮容器(建议命名为 Button)。

2) 开启 Auto Layout(Shift + A)。设置:

• 方向:Horizontal

• Padding:左右用 space/sm,上下用 space/xs

• Item spacing:8(或绑定 space/xs)

• 对齐:居中

3) 给容器设置圆角:绑定 radius/md

4) 放入文字 Text(命名为 Label),文字内容先写 “Button”。

5) 给容器填充背景色:绑定 color/primary;文字颜色绑定 color/onPrimary

步骤 2:做出尺寸(Size)变体

1) 选中按钮 Frame,点击 Create component(创建组件)。

2) 复制一份,做两种尺寸:smmd

3) 关键点:用“固定高度 + 自适应宽度”。在 Auto Layout 中将高度设置为变量 height/sm / height/md,宽度保持 Hug contents。

4) 将两份组件合并为 Component set(组件集)。在右侧属性里把变体属性命名为 Size,值为 sm / md。

步骤 3:做出状态(State)变体

1) 在组件集中再添加状态变体:Default / Hover / Pressed / Disabled。

2) 为每个状态绑定不同的背景变量:

• Default:color/primary

• Hover:color/primaryHover

• Pressed:color/primaryPressed

• Disabled:color/disabledBg

3) Disabled 状态的文字颜色改绑到 color/disabledText,并降低整体对比度(可选:把不透明度降到 60%-80%)。

4) 把变体属性命名为 State,值为 Default / Hover / Pressed / Disabled。

步骤 4:加入图标开关(Boolean 属性)

很多按钮需要“可选图标”。做法是:先放一个图标占位,再用组件属性控制显示/隐藏。

1) 在按钮 Auto Layout 内,文字左侧放一个 Icon(可以是简单的 16x16 向量)。命名为 Icon

2) 选中 Icon 图层,在右侧选择 Create component property → Boolean

3) 命名为 Has icon,默认 true。把 Icon 的 Visible 绑定到该属性。

4) 当 Has icon = false 时,Icon 隐藏,Auto Layout 会自动收缩间距,不需要做额外的“无图标变体”。

步骤 5:支持更换图标(Instance swap 属性)

如果你希望“同一个按钮上能换不同图标”,可以用 Instance swap:

1) 把 Icon 做成一个独立组件(例如 Icon/Arrow、Icon/Search 等)。

2) 在按钮里使用某一个 Icon 的实例。

3) 选中该实例,Create component property → Instance swap,命名为 Icon

4) 使用按钮时,你就能在属性面板直接替换图标组件。

步骤 6:支持文案修改(Text 属性)

1) 选中 Label 文本图层,Create component property → Text

2) 命名为 Label。以后使用按钮时,直接在右侧改文案,不需要进入组件内部。

常见坑与检查清单

• 组件命名:建议用 Button,变体属性用 Size/State,值尽量短且一致。

• 状态不要靠手动改色:尽量都绑定到变量,避免后期改主题时漏改。

• Disabled 不要只降透明度:最好有明确的 disabledBg/disabledText,确保可读性。

• 交付给开发:把变量命名对齐 token(例如 color/primary → --color-primary)。

下一步扩展(可选)

你可以基于同一套路继续扩展:

• Button type:Primary / Secondary / Ghost(用 Type 变体 + 不同变量)

• Loading:加一个 Spinner,并用 Boolean 属性控制显示

• Icon-only:把 Label 隐藏,用最小宽高规则做“纯图标按钮”

做到这里,你已经拥有一套可复用、可维护、可扩展的按钮组件。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

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

操作成功