Figma Variants + Auto Layout:做一套可复用按钮组件(从0到可交付)

你将得到什么

一套可复用、可扩展、可交付给团队的按钮组件:支持尺寸(S/M/L)、层级(Primary/Secondary/Ghost)、状态(Default/Hover/Pressed/Disabled/Loading)等组合,并且能在面板里用属性快速切换。

准备:先用 Auto Layout 搭出“按钮骨架”

  1. 新建一个 Frame,放入文字层(例如“Button”)。

  2. 选中 Frame,按 Shift + A 开启 Auto Layout,方向设为水平(Horizontal)。

  3. 设置 Padding:左右 16,上下 10;Spacing 8(后续支持图标时会用到)。

  4. 宽度建议先用 Hug contents,高度用 Fixed(更容易做统一尺寸)。

小技巧:把文字的 Line height 固定(例如 20),这样不同文本长度时按钮高度更稳定。

做尺寸:S/M/L 三种高度与左右内边距

复制 3 份按钮骨架,分别调整:

  • S:高度 32,左右 padding 12,上下 8

  • M:高度 40,左右 padding 16,上下 10

  • L:高度 48,左右 padding 20,上下 12

保持文字样式一致(例如 14/20),尺寸差异主要来自高度与 padding。

做层级:Primary / Secondary / Ghost 三种外观

  • Primary:实心背景(例如 #1F6FEB),文字白色;圆角 10(或与你的品牌一致)。

  • Secondary:浅色背景(例如 #F2F4F7),文字深色;可加 1px 内描边。

  • Ghost:无背景,文字深色;Hover 时给一个浅色背景或下划线提示。

建议把颜色都绑定到 Color Style(如 Button/Primary/BG),后面维护会非常省心。

做状态:Default / Hover / Pressed / Disabled / Loading

每个层级都需要对应状态,常见做法:

  • Hover:背景加深 6%~10%,或描边更明显;不要只改阴影,容易看不出来。

  • Pressed:背景再加深一点,同时减少阴影或让按钮“下沉”。

  • Disabled:整体降对比(降低填充透明度、文字变浅),并且禁用光标提示。

  • Loading:用一个小圆形 spinner + 文案(或仅 spinner),并固定宽度避免布局跳动。

Loading 的关键:把按钮容器宽度设为 Fixed(基于最长文案),避免从“提交”切到 spinner 时尺寸抖动。

把它变成 Variants:一个组件 + 多个属性

  1. 选中所有按钮实例(建议先只做 M 尺寸的 Primary),点击 Combine as variants

  2. 在右侧为变体命名属性:Size、Type、State。

  3. 把每个变体按规则命名,例如:Size=M, Type=Primary, State=Default。

  4. 补齐其它组合:先按一个维度复制(例如 State),再逐层扩展(Type、Size)。

实操建议:先把 “最常用组合” 做完整(M + Primary/Secondary + Default/Hover/Disabled),再补齐剩余;这样即使中途停下也能交付。

可选升级:支持左/右图标与文本对齐

  • 在 Auto Layout 内加入 Icon 层(16x16),并设置可见/不可见。

  • 用一个属性控制:Icon=None/Left/Right。

  • 注意图标与文字的基线:一般让图标垂直居中,文字保持原 line-height。

交付清单:命名、样式、发布

  1. 组件命名:Button(主组件),属性名用英文且短(Size/Type/State/Icon)。

  2. 样式抽离:颜色、字号、圆角尽量用 Styles/Tokens,减少“散落在各处的硬编码”。

  3. 在组件页加一个用法说明(几行即可):默认用 M、表单提交用 Loading、禁用用 Disabled。

  4. 发布到 Library,给版本号(例如 v1.0),写变更说明(新增 State=Loading)。

常见坑排查(做完这一步基本不会翻车)

  • 按钮高度不一致:检查文字 line-height 是否一致,容器是否用了 Hug 而不是 Fixed。

  • Hover 看不出来:不要只改阴影;优先改背景/描边/文字色。

  • Variants 属性太多:先做核心三件套(Size/Type/State),Icon 放到下一版。

  • Loading 布局抖动:把容器宽度固定到最长文案的宽度。

你可以直接复用的推荐组合

默认按钮:Size=M, Type=Primary, State=Default;次要操作:Type=Secondary;破坏性操作可额外加 Type=Danger(下一篇可扩展)。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

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

操作成功