Figma 步骤条与分步向导(Stepper & Wizard)组件架构实战:从横纵双拓扑、节点四态流转到 Variables 变量驱动的高保真交互原型与前端代码交付
在企业级 SaaS 平台、金融交易审批、多阶段设置向导(Setup Wizard)以及电商分步结算流程中,步骤条(Stepper / Steps) 与 分步向导(Wizard) 是引导用户完成多阶段复杂任务的核心骨架。通过将庞大繁杂的表单和流程拆解为线性或分阶段的清晰切片,步骤条能够有效减轻用户的瞬时认知过载,明确告知当前任务所处进度与剩余步骤。
然而,在大量团队的设计系统资产与高保真原型中,步骤条往往是架构极其脆弱、维护成本畸高的组件之一:
- 连接线断裂与错位(Connecting Line Glitch):当步骤名称字数变长发生换行,或者外层容器拉伸缩放时,节点之间的连接虚线/实线频繁脱轨、错位或意外折行;
- 变体组合爆炸(Variant Explosion):为覆盖横向/纵向两种拓扑、不同尺寸(Default/Small)、以及节点的四种状态(未开始、进行中、已完成、错误阻断),机械排列出数十个变体,导致维护噩梦;
- 分步向导原型无法真实交互:点击“下一步”或“上一步”无法驱动表单内容区域与顶部步骤状态同频联动,业务评审时只能依赖假画板机械跳转;
- 代码语义交付脱节:设计稿中仅呈现简单的图形拼凑,缺少针对当前激活态(
aria-current="step")、错误状态回溯以及前端组件属性(current、status、percent)的技术定义。
本文将系统拆解企业级步骤条的工程化解耦架构,攻克 Auto Layout 弹性连接线的对齐难题,利用 Figma Variables 变量系统 打造具备双向状态机的高保真向导原型,并打通面向 Ant Design、Element Plus 与 Tailwind CSS 的生产级代码交付规范。
典型步骤条形态选型与应用场景对比 #
在着手搭建组件之前,产品设计团队应根据界面布局纵深、步骤数量及交互复杂度匹配最佳形态:
| 步骤条形态 (Variant) | 典型应用场景 | 推荐步骤数量 | 空间占用特征 | 交互复杂度 |
|---|---|---|---|---|
| 横向水平步骤条 (Horizontal Stepper) | 网页端注册开通、通用多步表单向导、结账流程 | 3 ~ 6 步 | 占据横向全宽,纵向高度紧凑(约 40~64px) | ★★☆☆☆ |
| 纵向垂直步骤条 (Vertical Stepper) | 审批流进度追踪、物流节点详情、侧边向导抽屉 | 3 ~ 10+ 步 | 纵向无限向下延展,可容纳丰富子表单与操作按钮 | ★★★☆☆ |
| 胶囊紧凑分步 (Inline Step Pills) | 移动端顶部轻量分步、弹窗内部微流程 | 2 ~ 4 步 | 极度节省空间,仅保留数字与短标题 | ★☆☆☆☆ |
| 点状/迷你进度条 (Dot / Mini Stepper) | 引导轮播页(Onboarding)、移动端极简向导 | 3 ~ 5 步 | 纯几何图形指示,不展示文字详情 | ★☆☆☆☆ |
| 带子任务的复合步骤 (Nested Sub-steps) | 复杂云资源配置、工业级审批流分支 | 多阶段树形 | 主步骤内嵌次级检查项,支持跳步与校验回溯 | ★★★★★ |
步骤节点(Step Item)原子化封装与属性降维 #
高效的设计系统应避免为每个组合单独建立静态图层,而是遵循“单个 Step Item 原子组件 + Component Properties 动态配置”的模型。
┌────────────────────────────────────────────────────────┐
│ Step Item │
├───────────────┬─────────────────────────┬──────────────┤
│ 1. 图标/数字徽标│ 2. 标题与说明文本内容 │ 3. 弹性连接线│
│ [ (1) / ✔ / ✖ ]│ 【基础信息配置】 │ ───────► │
│ │ 请填写企业真实登记信息 │ │
└───────────────┴─────────────────────────┴──────────────┘
步骤一:封装节点核心指示器(Node Indicator) #
指示器承载步骤状态的视觉重心,支持数字序号与状态图标的灵活切换:
- 创建尺寸为
32 × 32px的圆形 Auto Layout 容器,设置圆角为9999px; - 容器内部居中放置一个文字图层(默认内容为
1,字号14px / SemiBold),以及一个通用 Icon 实例槽位(尺寸16 × 16px); - 利用 组件属性与实例替换规范 设定布尔开关(Boolean Property):
showIcon:当步骤处于Completed时显示对勾图标,处于Error时显示警告图标,处于Pending或Active时显示数字;indicatorText:暴露为文本属性(Text Property),便于在实例中快速修改步骤序号;
- 绑定颜色变量(Color Variables):
- Pending(等待中):边框颜色绑定
border-secondary,背景透明,文字颜色绑定text-tertiary; - Active(进行中):背景颜色绑定
brand-primary,文字颜色绑定text-inverse(纯白),无边框; - Completed(已完成):边框颜色绑定
brand-primary,背景绑定brand-subtle,图标颜色绑定brand-primary; - Error(异常/阻断):背景颜色绑定
status-error,文字/图标绑定text-inverse。
- Pending(等待中):边框颜色绑定
步骤二:文字信息排版与约束 #
在指示器右侧(横向模式)或下方(纵向模式)添加文本排版容器:
- 建立垂直 Auto Layout 容器,间距设为
gap: 4px; - 包含两行文字:
- 主标题(Title):字号
14px / Medium,色值绑定text-primary; - 描述文案(Description):字号
12px / Regular,色值绑定text-secondary;
- 主标题(Title):字号
- 将该文字容器的 Horizontal Resizing 设置为
Hug contents或Fill container(根据是否需要弹性换行决定)。
弹性自适应连接线(Connecting Line)防断裂架构方案 #
步骤条最容易遭遇的视觉瑕疵,莫过于屏幕宽度变化或文案字数差异时,两个节点之间的连接线长短不一、发生错位甚至截断。
三大连接线方案技术对比 #
| 对比维度 | 方案 A:节点内置尾随连线 (Tail Line inside Item) | 方案 B:连线作为独立同级元素 (Standalone Divider) | 方案 C:绝对定位底层贯穿线 (Underlay Absolute Line) |
|---|---|---|---|
| 实现原理 | 每个 Step Item 内部包含右侧/下方连线,宽度设为 Fill container | 在外层容器中,按照 Item - Line - Item - Line 间隔插入矩形 | 底层铺设一条完整的长线,上层节点通过白色背景遮挡盖住多余线条 |
| 末尾节点处理 | 最后一个节点通过布尔属性 isLast=true 隐藏尾随连线 | 需要手动删除最后一个 Line 元素,新增/减少步骤时需重新拼装 | 线条总长度固定,若节点数量改变必须手动拉伸底层线段 |
| 弹性适应能力 | 极高:任意拉伸外层画板,所有连线等比例平滑拉长 | 较高,但增加/删减步骤时极易漏选或错位 | 较差,当文字换行导致节点高度改变时,线条无法居中对齐 |
| 纵向模式复用 | 一键切换 Auto Layout 方向(Horizontal ➔ Vertical)即可无损适配 | 需要重新重构布局,将所有 Divider 旋转或更改尺寸 | 无法平滑切换为纵向步骤 |
| 推荐评级 | ★★★★★(生产级首选) | ★★★☆☆ | ★★☆☆☆ |
方案 A 落地实操配置: #
- 在横向 Step Item 的最右侧,插入一个高度为
1px(或2px)的矩形线条; - 将该线条的 Horizontal Resizing 设置为
Fill container,Vertical Resizing 固定为Fixed; - 将该线条在垂直方向与指示器居中对齐(Align vertical centers);
- 为该线条赋予布尔属性
hasLine(默认为true,最后一个节点切换为false); - 外层步骤条容器(Steps Container)直接设置为横向 Auto Layout,对齐方式为顶端左对齐,宽度设置为
Fill container。此时无论外层页面如何响应式伸缩,各节点间的连接线均会自动均分剩余空间,永不断裂!
基于 Figma Variables 构建真机级向导交互原型(Wizard Prototype) #
静态步骤条仅能展示视觉,而在复杂业务汇报与可用性测试中,往往需要让测试者真实体验点击“下一步”表单校验切换的过程。
┌────────────────────────────────────────────────────────┐
│ 步骤指示: (1) 账户创建 ──► [2] 权限设置 ──► (3) 完成开通 │
├────────────────────────────────────────────────────────┤
│ │
│ 【当前步骤 2 动态内容区】 │
│ - 选择用户角色: [ 企业管理员 (Admin) ▼ ] │
│ - 开启双因子认证: [ ON ] │
│ │
├────────────────────────────────────────────────────────┤
│ [ 上一步 (Previous) ] [ 下一步 (Next) ] │
└────────────────────────────────────────────────────────┘
第一步:创建数值与条件变量(Variables Setup) #
打开本地变量面板(Local Variables),在向导模块中定义以下变量:
currentStep(Number 类型):初始值赋为1;totalSteps(Number 类型):设为3;canProceed(Boolean 类型):用于表单必填项校验,默认设为true。
第二步:将步骤节点状态与变量动态绑定 #
利用 Figma 变量模式与作用域 以及组件属性绑定:
- 制作向导主体内容容器(Content Frame),内部包含 Step 1、Step 2、Step 3 三个子界面;
- 将 Step 1 的 Layer Visibility 绑定为表达式:
currentStep == 1; - 将 Step 2 的 Layer Visibility 绑定为:
currentStep == 2; - 将 Step 3 的 Layer Visibility 绑定为:
currentStep == 3。
第三步:为操作按钮配置条件交互事件(Conditional Actions) #
选中底部的 “下一步(Next)” 按钮,在 Prototype 面板中添加 On click 交互:
- 添加 Conditional(条件判断):
if currentStep < totalSteps then Set variable currentStep to currentStep + 1 else Open overlay "提交成功提示弹窗"
选中 “上一步(Previous)” 按钮,添加 On click 交互:
- 添加条件判断:
if currentStep > 1 then Set variable currentStep to currentStep - 1 - 将“上一步”按钮的 Layer Visibility 绑定为
currentStep > 1(在第一步时自动隐藏上一步按钮,防止误触)。
结合 Smart Animate 智能动画,步骤节点的颜色与内容视图将平滑无缝切换,实现媲美真实生产系统的无刷新分步向导体验!
Dev Mode 生产级前端代码交付与无障碍规范 #
在 Figma Dev Mode 开发模式 中,工程师可以直接提取语义化的步骤条属性。为确保设计与前端代码 1:1 精准映射,需建立以下技术对照标准:
1. 常见主流前端组件库属性映射表 #
| 设计系统属性 (Design Property) | React Ant Design (Steps) | Element Plus (el-steps) | 语义类型 / 示例取值 |
|---|---|---|---|
| 当前激活步骤 | current={currentStep - 1} | active="currentStep" | Number(AntD 从 0 索引,Element 从 1 索引) |
| 步骤方向 | direction="horizontal" | direction="vertical" | 'horizontal' \| 'vertical' |
| 节点状态 | status="process \| finish \| error" | status="process \| success \| error" | 枚举状态映射 |
| 点状进度形态 | progressDot={true} | simple={true} | Boolean 开关 |
| 图标自定义 | <Step icon={<UserOutlined />} /> | <el-step icon="User" /> | ReactNode / Slot 槽位 |
2. WAI-ARIA 无障碍可访问性要求(a11y) #
依照 Figma 无障碍设计合规落地实战 规范,前端必须为步骤条注入标准无障碍标签:
- 外层包裹容器声明
role="navigation"与aria-label="操作进度向导"; - 步骤列表使用有序列表
<ol>结构; - 当前激活步骤必须标记
aria-current="step"; - 已完成步骤应标注有明确的辅助技术朗读文本(例如
<span class="sr-only">已完成:</span>); - 处于禁用或未解锁状态的步骤需添加
aria-disabled="true",避免屏幕阅读器焦点穿透。
3. CSS Flexbox 弹性布局工程化参考代码 #
/* 容器采用 Flex 弹性伸缩,支持响应式平铺 */
.stepper-container {
display: flex;
align-items: flex-start;
width: 100%;
gap: 16px;
}
/* 步骤节点项 */
.step-item {
display: flex;
flex: 1; /* 均分剩余宽度 */
align-items: center;
position: relative;
}
/* 弹性连接线 */
.step-item:not(:last-child)::after {
content: '';
flex: 1;
height: 2px;
background-color: var(--color-border-secondary);
margin: 0 12px;
transition: background-color 0.3s ease;
}
/* 激活态高亮连线 */
.step-item.is-completed::after {
background-color: var(--color-brand-primary);
}
步骤条组件架构排坑速查表 #
在搭建与维护步骤条时,设计师常会遭遇以下典型问题,团队可依据下表快速自检:
| 异常现象 | 核心根因分析 | 针对性修复方案 |
|---|---|---|
| 连接线折行到指示器下方 | Step Item 外层容器误启用了 Wrap(自动换行),或指示器与线条未包裹在同一横向 Frame 中 | 关闭 Step Item 的 Wrap 属性;将指示器与连线置于同一个水平 Auto Layout 容器内 |
| 拉伸画板时指示器被挤压变形 | 指示器圆形的 Horizontal / Vertical Resizing 误设为 Fill | 将指示器容器的宽高均强制锁定为 Fixed (32px × 32px),并开启固定宽高比锁定 |
| 最后一步右侧仍然多出一截连接线 | 未对最后一个节点的连接线设置条件隐藏 | 在 Step Item 组件中暴露 showLine 布尔属性,将最后一个步骤实例的该属性切换为 false |
| 纵向步骤条文字重叠 | 纵向连接线使用了绝对定位,但文本高度动态撑高后未联动调整 | 放弃绝对定位连线,改用嵌套纵向 Auto Layout,连线高度设为 Fill container 弹性跟随文字 |
| 原型点击下一步无反应 | 变量表达式存在语法错误(如缺少空格),或按钮事件被外层透明图层遮挡 | 检查 Variables 条件语句语法;确认按钮处于顶层图层并未被 Clip content 视口遮挡 |
通过遵循上述规范,团队能够建立起一套兼具极高设计弹性、真机级原型互动能力与严谨前端工程映射的企业级步骤条与分步向导组件资产,大幅缩短产品设计与研发协同周期。
核心手册与速查工具
高频手册与实用设计生产力工具直达常见问题与答疑 (FAQ)
高频疑难解析与避坑指南完全不需要。绝大多数核心功能在免费 Starter 计划中均可完整体验与实操练习,无需额外付费购买付费团队版。