Ant Design Steps 迷你尺寸步骤条:`size=“small“` 使用与实现原理全解析
2026/9/20 3:38:06 网站建设 项目流程

Ant Design Steps 迷你尺寸步骤条:size="small"使用与实现原理全解析

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

<Steps size="small">是 Ant Design(antd)步骤条组件提供的迷你尺寸形态,适用于空间受限的紧凑场景,例如设置面板、抽屉内的多步引导或后台表格上方的流程提示。本文以 components/steps/demo/small-size.md 与其配套示例 small-size.tsx 为骨架,结合 Steps 组件源码、CSS-in-JS 样式实现与测试用例,讲解迷你步骤条的正确用法、尺寸继承机制、各布局变体的组合方式,以及如何通过 Design Token 二次定制,帮助你写出可复制、可深度定制的紧凑型步骤条。

快速上手:一行属性启用迷你版

原文档(small-size.md)明确指出:迷你版步骤条只需在<Steps>上设置size="small"即可启用,完整可运行示例见 small-size.tsx:

import React from 'react'; import { Steps } from 'antd'; const App: React.FC = () => ( <Steps size="small" current={1} items={[ { title: 'Finished', }, { title: 'In Progress', }, { title: 'Waiting', }, ]} /> ); export default App;

要点说明:

  • size仅需在根节点<Steps>上声明一次,即可作用于条内全部步骤项;
  • items数组中的每个对象对应一个步骤,title为步骤标题;此处未设置descriptionicon等可选字段,因此渲染的是最精简的纯文字迷你步骤条;
  • current={1}表示当前处于第二个步骤(下标从 0 开始),在迷你尺寸下同样支持wait / process / finish三种状态的自动推导,从源码 components/steps/index.tsx 可见其默认值current = 0

与默认尺寸相比,迷你版最直观的差异是图标尺寸与行高整体缩小:图标由默认的iconSizecontrolHeight,常规为 32px)缩小为iconSizeSM(见下文样式分析),更适合内嵌于紧凑布局。

size参数详解

根据 components/steps/index.zh-CN.md 的 API 表格,size参数定义如下:

参数说明类型默认值版本
size指定大小,目前支持普通(default)和迷你(smallstringdefault-

对应到组件类型定义(components/steps/index.tsx):

size?: 'default' | 'small';

补充说明:

  • 取值枚举:仅'default''small'两种合法值,传入其他字符串不会被样式层识别,将退化为默认形态;
  • direction相互独立:迷你尺寸可同时配合horizontal(默认)与vertical两种方向,详见下文变体组合;
  • responsive无冲突:默认responsive={true}会在屏幕宽度小于 532px 时自动切换为垂直模式(见 index.tsx 中基于useBreakpointrealDirectionValue计算),迷你尺寸下该行为依然生效,适合移动端紧凑场景。

尺寸的继承机制:size如何被解析

从源码看,size并不直接传给底层 rc-steps,而是经过一层上下文合并处理(components/steps/index.tsx):

const size = useSize(customizeSize);

该 Hook 位于 components/config-provider/hooks/useSize.ts,其逻辑为:

  1. 读取全局SizeContext中由ConfigProvider注入的组件尺寸;
  2. 若未显式传size,返回全局尺寸(即Steps会继承ConfigProvider componentSize="small"的配置);
  3. 若显式传了size(字符串),以组件上的显式值为准;
  4. 若传的是函数,则以函数对全局尺寸的返回值为准。

这意味着迷你尺寸有两条等效的声明路径:

{/* 方式一:组件级声明 */} <Steps size="small" items={[{ title: 'Step 1' }]} /> {/* 方式二:全局配置,整站步骤条统一变小 */} <ConfigProvider componentSize="small"> <Steps items={[{ title: 'Step 1' }]} /> </ConfigProvider>

该行为有测试用例直接佐证:components/steps/tests/index.test.tsx 中'Steps should inherit the size from ConfigProvider if the componentSize is set'验证了当ConfigProvider设置componentSize="small"时,Steps 会正确继承该尺寸。因此在管理后台等场景,通过ConfigProvider统一切换组件尺寸即可让所有步骤条一键进入迷你形态。

迷你尺寸的样式实现原理

Ant Design v5 采用 CSS-in-JS(cssinjs)生成组件样式,迷你形态由独立样式文件 components/steps/style/small.ts 承载,并通过 style/index.ts 在genStepsStyle中合入。其核心规则如下:

图标缩放

[`${componentCls}-item-icon`]: { width: iconSizeSM, height: iconSizeSM, marginInline: `0 ${unit(token.marginXS)}`, fontSize: fontSizeSM, lineHeight: unit(iconSizeSM), textAlign: 'center', borderRadius: iconSizeSM, },
  • 图标容器尺寸、行高、圆角均以iconSizeSM为准,实现正方形圆形图标;
  • 字体使用fontSizeSM,保证数字序号在缩小后仍清晰居中;
  • 右侧外边距为marginXS,缩小了图标与标题之间的间距。

标题与连接线对齐

[`${componentCls}-item-title`]: { paddingInlineEnd: token.paddingSM, fontSize, lineHeight: unit(iconSizeSM), '&::after': { top: token.calc(iconSizeSM).div(2).equal(), }, }, [`${componentCls}-item-tail`]: { top: token.calc(iconSizeSM).div(2).sub(token.paddingXXS).equal(), },
  • 标题行高与图标尺寸对齐,保证文字垂直居中;
  • 标题右侧的连接线(::after)与尾部连接线(tail)的垂直位置均依据iconSizeSM计算,从而与缩小后的图标圆心精确对齐,避免连接线错位。

自定义图标适配

[`${componentCls}-item-custom ${componentCls}-item-icon`]: { width: 'inherit', height: 'inherit', background: 'none', border: 0, [`> ${componentCls}-icon`]: { fontSize: iconSizeSM, lineHeight: unit(iconSizeSM), }, },

当步骤使用自定义icon时,容器尺寸退化为内容自适应,仅约束图标字体大小为iconSizeSM,确保自定义图标在迷你尺寸下尺寸一致。

水平布局间距收紧

horizontal(非label-vertical)形态下,迷你版将每个步骤项的左内边距从默认的padding收紧为paddingSM,且首个步骤项左内边距为 0(small.ts),使整条步骤条在水平方向更紧凑。

Token 来源

迷你尺寸的关键 TokeniconSizeSM的默认值定义在 style/index.ts 的prepareComponentToken中:

iconSizeSM: token.fontSizeHeading3,

即迷你图标尺寸等于fontSizeHeading3(默认 24px),区别于默认图标的iconSize = controlHeight(32px)。这也是"迷你"二字最核心的量化体现:图标从 32px 降至 24px,配合更小的字号与间距,整体高度随之显著压缩。

迷你尺寸与各布局变体的组合

迷你尺寸并非孤立形态,可与 Steps 的多种布局组合使用,仓库components/steps/demo目录下有多个配套示例:

竖直方向的迷你步骤条

vertical-small.tsx 展示了direction="vertical"+size="small"的组合,每个步骤可带description描述:

import React from 'react'; import { Steps } from 'antd'; const description = 'This is a description.'; const App: React.FC = () => ( <Steps direction="vertical" size="small" current={1} items={[ { title: 'Finished', description }, { title: 'In Progress', description }, { title: 'Waiting', description }, ]} /> ); export default App;

适用场景:侧边栏、抽屉内的纵向多步流程。竖直形态下连接线沿垂直方向延伸,迷你尺寸同样通过tailtop偏移与缩小后的图标保持对齐。

迷你点状步骤条

progress-dot-small.tsx 演示了progressDot+size="small"的迷你点状形态(水平与竖直两个示例),示例中还同时使用了Divider分隔两个步骤条:

<Steps progressDot current={1} size="small" items={[ { title: 'Finished', description: 'This is a description.' }, { title: 'In Progress', description: 'This is a description.' }, { title: 'Waiting', description: 'This is a description.' }, ]} />

注意:progressDot开启后labelPlacement会被强制为vertical(见 index.zh-CN.md 的 API 说明),迷你点状形态常用于轻量进度指示。

带进度的迷你步骤条

当同时传入percent时,当前process步骤会渲染一个环形进度图标(源码 index.tsx 的stepIconRender)。进度圆环的尺寸会感知size

const progressWidth = size === 'small' ? 32 : 40;

即迷你尺寸下进度环宽度为 32px,默认尺寸为 40px。这说明size="small"不仅影响静态样式,还会改变"步骤+进度"复合形态的内部布局参数。

通过 Design Token 深度定制迷你形态

Steps 的样式全部基于 Token 驱动(style/index.ts 定义了完整的ComponentToken接口),迷你形态可定制的关键 Token 包括:

Token说明默认值来源
iconSizeSM小号步骤条图标大小fontSizeHeading3(24px)
iconFontSize图标内字体大小fontSize
descriptionMaxWidth描述区域最大宽度140
dotSize/dotCurrentSize点状步骤点尺寸(普通/当前)controlHeight / 4controlHeightLG / 4

例如通过ConfigProvidertheme定制迷你图标尺寸:

import React from 'react'; import { ConfigProvider, Steps } from 'antd'; const App: React.FC = () => ( <ConfigProvider theme={{ components: { Steps: { iconSizeSM: 20, // 进一步压缩迷你图标 }, }, }} > <Steps size="small" current={1} items={[{ title: 'Finished' }, { title: 'In Progress' }]} /> </ConfigProvider> );

由于 small.ts 中图标、行高、圆角、连接线位置均以iconSizeSM为基准计算,只需调整这一枚 Token,整个迷你形态就会等比自适应,无需手写任何覆盖样式。该组件还通过genStyleHooks挂载了waitIconColorfinishIconBgColor等状态色 Token(style/index.ts),迷你形态同样受其约束。

使用建议与注意事项

  • 判断是否真的需要迷你版:迷你版是为空间受限的紧凑场景设计的,若你的步骤条处于页面主体区域且包含较长描述文本,默认尺寸(size="default")可读性更好;
  • 配合responsive使用:默认情况下迷你步骤条在窄屏会自动转垂直方向,无需手动处理移动端布局;
  • 尺寸统一性:如需全站统一为迷你形态,优先在ConfigProvider上设置componentSize="small",比逐个组件传size更易维护,且行为已有测试用例保证;
  • 组合限制:迷你尺寸与type="navigation"type="inline"等形态的组合以实际渲染效果为准;inline类型有自己的独立 Token(inlineDotSizeinlineTitleColor等,见 style/index.ts),其样式并不依赖small.ts中的规则。

小结

<Steps size="small">是 Ant Design 步骤条中一个简单但完整的功能维度:使用上只需一个属性(small-size.md),实现上则有独立样式文件(small.ts)、Token 化设计(iconSizeSM)、全局尺寸继承(useSize.ts)与测试保障(index.test.tsx)四层支撑。掌握它,你就能在任意紧凑布局中快速产出风格统一、可深度定制的迷你步骤条;进一步阅读 components/steps/index.zh-CN.md 可查看 Steps 全部 API 与StepItem配置,或参考 vertical-small.tsx、progress-dot-small.tsx 等 demo 探索更多组合形态。

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

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

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

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

立即咨询