Vant3是Vue3生态里非常流行的移动端组件库,其中Steps步骤条组件常用于展示流程进度,比如订单状态跟踪、注册流程引导、物流信息展示等场景。这篇文章将系统介绍Vant3 Steps组件的基础用法、属性配置和事件处理,并汇总实际开发中最常见的疑问与解决方案,帮助刚接触这个组件的开发者快速上手。

一、Steps步骤条的基础用法
使用Steps组件前,需要先安装Vant并在项目中引入。假设你已经通过npm安装了vant@3并完成了按需引入或全量引入,那么基础用法非常简单,只需要使用<van-steps>包裹若干个<van-step>即可。
<template>
<van-steps :active="active">
<van-step>买家下单</van-step>
<van-step>商家接单</van-step>
<van-step>买家提货</van-step>
<van-step>交易完成</van-step>
</van-steps>
</template>
<script setup>
import { ref } from 'vue';
const active = ref(1);
</script>active属性是整个组件的核心,它接受一个数字,表示当前处于第几步,从0开始计数。上面的例子中active为1,代表流程进行到“商家接单”这一步,前面的步骤会显示为已完成状态,后面的步骤则是待完成状态。需要注意的是,如果你希望最后一步显示完成样式,active的值应该等于步骤总数,而不是总数减一。
每个<van-step>内部还可以放置多行内容,通常的做法是搭配<h3>和<p>标签分别展示标题和描述信息,这样可以让步骤条的信息更加丰富。
<van-step> <h3>2024-06-01 12:00</h3> <p>【城市】物流已到达XX转运中心</p> </van-step>
二、常用属性配置与自定义样式
Steps组件提供了不少属性来满足不同的展示需求,掌握以下几个高频属性基本就能覆盖大多数业务场景。
direction:设置展示方向,默认为horizontal横向,可改为vertical竖向。竖向步骤条在物流跟踪、订单详情这类页面中特别常用,因为它可以承载更长的描述文字。active-color:设置激活状态的颜色,默认是蓝色#1989fa,可以根据项目主题色自定义。inactive-color:设置未激活状态的颜色,默认是灰色#969799。active-icon和inactive-icon:分别自定义激活和未激活时显示的图标名称,值需要是Vant图标库里存在的图标名,比如checked、clock等。
下面是一个竖向、自定义颜色的完整示例,模拟物流跟踪页面:
<template>
<van-steps
direction="vertical"
:active="2"
active-color="#07c160"
active-icon="checked"
inactive-icon="clock-o"
>
<van-step>
<h3>已发货</h3>
<p>包裹已从杭州发出</p>
</van-step>
<van-step>
<h3>运输中</h3>
<p>包裹到达南京转运中心</p>
</van-step>
<van-step>
<h3>派送中</h3>
<p>快递员正在派送,请保持电话畅通</p>
</van-step>
<van-step>
<h3>已签收</h3>
<p>包裹已由本人签收</p>
</van-step>
</van-steps>
</template>如果需要更灵活的图标控制,比如使用自定义图片或第三方图标库,可以使用active-icon-slot插槽。插槽的优先级高于active-icon属性,一旦提供了插槽内容,属性值就会失效。
<van-step>
<template #active-icon>
<img src="/icons/active.png" style="width:20px;height:20px;" />
</template>
<p>自定义激活图标</p>
</van-step>三、事件处理与动态控制步骤
Steps组件本身提供了click-step事件,在点击某个步骤时触发,回调参数是被点击步骤的索引值。这个事件在需要允许用户回跳步骤的场景下很有用,比如分步表单中允许用户点击之前的步骤进行修改。
<template>
<van-steps :active="active" @click-step="onClickStep">
<van-step>基本信息</van-step>
<van-step>详细资料</van-step>
<van-step>确认提交</van-step>
</van-steps>
</template>
<script setup>
import { ref } from 'vue';
import { Toast } from 'vant';
const active = ref(0);
const onClickStep = (index) => {
// 只允许回退到之前的步骤,不能跳到未来步骤
if (index <= active.value) {
active.value = index;
} else {
Toast('请先完成当前步骤');
}
};
</script>在实际的分步表单场景中,建议将active与业务数据绑定,每次点击“下一步”时先做当前表单的校验,校验通过后再递增active。这样可以把流程控制牢牢握在自己手里,而不是依赖组件本身的行为。
另外要注意,active是一个受控属性,组件不会自己改变它。如果发现点击步骤条后当前步骤没变化,多半是忘记在事件回调里手动更新active的值。
四、常见疑问与踩坑排查
1. 步骤条没有显示任何样式或者组件不渲染怎么办?首先确认Vant的样式有没有被引入。使用按需引入时,如果借助unplugin-vue-components插件,样式会自动导入;如果是手动按需引入,则需要单独引入vant/lib/index.css或者对应组件的样式文件。其次检查组件是否正确注册,组合式API下手动引入时要写import { Steps, Step } from 'vant'并同时注册两个组件。
2. active设置成负数或者超出步骤数会怎样?设置为负数时,所有步骤都会显示未激活状态;超出步骤总数时,所有步骤都会显示为已完成。虽然组件不会报错,但建议在代码里做好边界控制,避免出现不符合预期的界面。
3. 自定义颜色不生效?active-color只影响图标和标题文字的颜色,描述文字和连接线的颜色需要通过CSS变量或深度选择器来覆盖。可以尝试下面的写法:
/* 覆盖竖向步骤条中连接线的颜色 */
:deep(.van-step__circle-container) {
background-color: transparent;
}
:deep(.van-step__line) {
background-color: #07c160;
}4. 横向步骤条在窄屏幕上文字被挤压?横向模式下每个步骤平分宽度,步骤标题太长时会换行导致布局难看。解决办法有两个:一是精简文案,把长描述放到竖向模式里展示;二是减少步骤数量,或者在标题中使用更短的关键词。
5. 如何让某一步显示失败或错误状态?Steps组件本身没有内置错误状态,可以通过给当前步骤换一个错误的图标和颜色来模拟,例如active-icon="close"搭配active-color="#ee0a24",就能呈现红色叉号的失败效果,简单实用。
五、小结
Vant3的Steps组件API设计比较克制,核心就是<van-steps>加<van-step>的组合,配合active驱动状态变化。横向适合流程引导,竖向适合信息记录,图标和颜色都可以灵活定制。开发时记住两个关键点:一是active是完全受控的,必须由你自己维护;二是样式覆盖要善用CSS变量和深度选择器。把这些要点掌握好,日常业务中的步骤展示需求基本都能轻松应对。
Vant3 Steps步骤条Vue3移动端组件修改时间:2026-09-06 13:00:44