Ant Design Steps 点状步骤条自定义展示实战指南
2026/9/20 1:44:54 网站建设 项目流程

Ant Design Steps 点状步骤条自定义展示实战指南

【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/ant/ant-design

点状步骤条(Progress Dot Steps)是 Ant DesignSteps组件的一种紧凑形态,用圆点替代数字/图标来标示步骤进度。本文以官方 Demo「Customized Dot Style」(customized-progress-dot.md)为核心,系统讲解progressDot属性的用法:从最简单的开启方式,到通过渲染函数对每个圆点进行完全自定义(如结合Popover实现悬停提示),并深入源码剖析圆点的渲染机制与样式 Token,帮助你掌握点状步骤条从「开箱即用」到「深度定制」的完整链路。

一、Demo 速览:为点状步骤条增加自定义展示

官方 Demo 的定位非常明确:为点状步骤条增加自定义展示You can customize the display for Steps with progress dot style)。它的核心手法只有一个——把progressDot从布尔值换成自定义渲染函数,并在函数内部用Popover包裹默认圆点,从而让每个圆点在悬停时展示当前步骤的下标和状态。

完整源码位于 customized-progress-dot.tsx,其本质结构如下:

import React from 'react'; import type { StepsProps } from 'antd'; import { Popover, Steps } from 'antd'; // 自定义圆点渲染函数:用 Popover 包裹默认 dot,悬停展示 index 与 status const customDot: StepsProps['progressDot'] = (dot, { status, index }) => ( <Popover content={ <span> step {index} status: {status} </span> } > {dot} </Popover> ); const description = 'You can hover on the dot.'; const App: React.FC = () => ( <Steps current={1} progressDot={customDot} items={[ { title: 'Finished', description }, { title: 'In Progress', description }, { title: 'Waiting', description }, { title: 'Waiting', description }, ]} /> ); export default App;

运行后,四个步骤以圆点呈现,current={1}使第二个步骤处于进行中状态;当鼠标悬停在任意圆点上时,会弹出 Popover,内容为step {index} status: {status}。这个 Demo 虽然代码量不大,却完整展示了progressDot函数式自定义的核心思想:渲染函数接收默认圆点节点与上下文参数,你可以在不改动组件内部逻辑的前提下,任意替换、包装或增强每个圆点。

二、从布尔值到函数:progressDot 的两种用法

在 Ant Design 的Steps组件中,progressDot属性(定义见 StepsProps)接受两种形态:

取值含义示例
booleantrue直接启用点状样式,圆点为组件内置的默认样式<Steps progressDot current={1} items={items} />
(iconDot, info) => ReactNode传入渲染函数,对每个圆点进行完全自定义<Steps progressDot={customDot} ... />

2.1 布尔值开启:一行代码切换点状形态

基础用法见 progress-dot.tsx:

<Steps progressDot current={1} items={[/* ... */]} />

仅需设置progressDot(等价于progressDot={true}),步骤条即切换为点状样式,同时官方文档明确说明:开启后labelPlacement会被强制为vertical,即标题与描述在圆点下方垂直排布(该说明记录于 index.en-US.md 的 API 表格)。同一 Demo 还演示了direction="vertical"的纵向点状步骤条,圆点沿竖直方向排列,适合空间紧凑或需要纵向引导的流程场景。

2.2 函数式自定义:完整掌控每个圆点

progressDot是函数时,签名如下(与 index.en-US.md 中 API 表格一致):

progressDot?: boolean | (iconDot, { index, status, title, description }) => ReactNode
  • iconDot:组件默认渲染的圆点节点(ReactNode),保留它即可继承内置圆点的尺寸、颜色与交互动效;
  • info:一个上下文对象,包含四个字段:
    • index:当前步骤的下标(从 0 开始),可用于「第几步」类提示;
    • status:当前步骤状态,取值为wait|process|finish|error(状态枚举见 index.tsx 中StepProps的定义),对应「等待 / 进行中 / 已完成 / 出错」;
    • title:步骤标题;
    • description:步骤描述。

Demo 中正是读取了indexstatus来拼装提示文案:step {index} status: {status}。这四个参数意味着你完全可以根据步骤所处的阶段,为圆点渲染不同的内容——例如在error状态显示红色感叹号、在finish状态叠加对勾图标,或对特定index附加 badge。

三、实战扩展:结合 Popover 实现悬停信息提示

Demo 最具实战价值的部分,是它示范了「函数式 progressDot + Popover」的组合,这是点状步骤条最常见的增强需求:点状形态下空间有限,无法直接展示长文本,通过悬浮气泡可以按需呈现补充信息。

实现要点有三个:

  1. 保留dot作为子节点:把iconDot原样放进Popover的 children,圆点的视觉与动效完全不受影响;
  2. content承载提示内容content中组合indexstatus即可生成动态文案;
  3. 让描述文本引导用户:Demo 将每个步骤的description设为'You can hover on the dot.',提示用户「可悬停圆点查看信息」——在真实业务中,你也可以把描述设置为「点击查看详情」「悬停查看审批人」等引导语。

如果需要更进一步,还可以在Popover内继续嵌套ButtonTag、时间线等任意 Ant Design 组件,把圆点变成交互入口,而这一切都不需要触碰Steps组件源码。

四、相关形态对照:默认点状、小尺寸点状与自定义点状

仓库中与点状步骤条相关的 Demo 共有三个,适合对照阅读:

Demo 文件演示内容与本文的关系
progress-dot.tsx默认点状样式(横向 + 纵向)自定义的「默认形态」基线
customized-progress-dot.tsx函数式自定义点状(Popover 包裹)本文核心
progress-dot-small.tsx点状 +size="small"小尺寸点状样式在紧凑场景的变体

其中progress-dot-small.tsx展示了点状步骤条与size="small"的组合,横向、纵向两种方向均可用。这些 Demo 均被仓库的渲染测试覆盖,例如快照 demo.test.ts.snap 中记录了customized-progress-dot.tsx的渲染结果,可作为实现正确性的验证依据。

五、源码级原理:圆点如何渲染与着色

5.1 组件层:progressDot 透传给底层 rc-steps

从源码结构看,Ant Design 的Steps是对rc-steps的封装(index.tsx)。StepsProps中声明progressDot?: boolean | ProgressDotRender(index.tsx),其中ProgressDotRender类型直接来自rc-stepsSteps模块。组件主体在 index.tsx 中通过展开restPropsprogressDot等属性透传给RcSteps,同时注入默认图标(finish 的 CheckOutlined、error 的 CloseOutlined)和前缀prefixCls。可以推断,点状渲染的实际分支逻辑位于rc-steps内部:当progressDot为真值时,步骤图标由圆点节点替代;为函数时,则调用函数并以返回值作为图标节点。

5.2 样式层:dot 的尺寸与动效由设计 Token 驱动

圆点的视觉样式由独立的样式生成文件 progress-dot.ts 负责,该文件在 style/index.ts 中被引入。其中几个关键实现细节:

  • 尺寸 Token:普通圆点大小为dotSize = controlHeight / 4,进行中(process)圆点放大为dotCurrentSize = controlHeightLG / 4(见 style/index.ts),实现「当前步骤圆点更大」的视觉焦点;
  • 圆形与动效:圆点使用border-radius: 100保证正圆,并设置transition: all motionDurationSlow使状态切换平滑过渡(progress-dot.ts);
  • 状态着色:样式通过dotColorKey按状态取色,例如waitDotColorprocessDotColorfinishDotColorerrorDotColor等 Token(style/index.ts),这解释了为什么不同状态的圆点颜色不同;
  • 悬停热区扩展:圆点还通过::after伪元素扩大了可交互区域(progress-dot.ts),避免小圆点难以点击或悬停——这正是 Demo 中 Popover 能够舒适触发的底层保证;
  • 纵向布局适配:文件末尾单独处理了vertical+dot组合下图标、连接线的位置计算(progress-dot.ts)。

理解了这些样式规则,你就能解释自定义场景中的各种现象:例如process圆点比其他圆点大、状态颜色自动随status变化、横向点状步骤条中标题描述强制垂直排布等。

六、API 速查与常见问题

6.1 相关 API 一览

属性类型默认值说明
progressDotboolean \| (iconDot, {index, status, title, description}) => ReactNodefalse点状样式开关与自定义入口,函数式开启时labelPlacement强制为vertical
currentnumber0当前步骤下标,从 0 计数
direction'horizontal' \| 'vertical''horizontal'步骤条方向
size'default' \| 'small''default'尺寸,点状形态同样适用
status'wait' \| 'process' \| 'finish' \| 'error''process'整体状态(可在StepItem上覆盖)
itemsStepItem[][]步骤数据源,推荐使用(4.24.0+

更多属性说明可查阅 index.en-US.md 的完整 API 表格。

6.2 常见疑问

  • 开启 progressDot 后标题跑到圆点下面了?这是设计使然:官方明确说明开启点状样式后labelPlacement会被强制为vertical,用于保证窄布局下的可读性,并非 bug。
  • 如何只改某个状态圆点的颜色?无需写 CSS,可通过主题 Token(如processDotColorfinishDotColor等,定义见 style/index.ts)全局调整;若需单个步骤特殊处理,则适合用progressDot函数对特定status分支返回自定义节点。
  • 自定义函数返回的节点必须包含iconDot吗?不强制。返回任何 ReactNode 均可,完全脱离默认圆点自行绘制也是合法的,只是会失去内置的尺寸、配色与动效。

结语

从「一行布尔值开启点状样式」到「函数式自定义每个圆点」,progressDot是 Ant DesignSteps中兼顾易用性与扩展性的典型设计。本文所讲的自定义展示方案(customized-progress-dot.tsx)可直接复制进业务代码,将悬停提示、状态徽标、步骤跳转等能力挂载到原本只负责「展示进度」的圆点上,让点状步骤条从纯视觉元素升级为可交互的流程引导工具。

【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/ant/ant-design

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询