ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

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

Ant Design Steps 迷你尺寸步骤条:`size=“small“` 使用与实现原理全解析 Ant Design Steps 迷你尺寸步骤条sizesmall使用与实现原理全解析【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/gh_mirrors/ant/ant-designSteps sizesmall是 Ant Designantd步骤条组件提供的迷你尺寸形态适用于空间受限的紧凑场景例如设置面板、抽屉内的多步引导或后台表格上方的流程提示。本文以 components/steps/demo/small-size.md 与其配套示例 small-size.tsx 为骨架结合 Steps 组件源码、CSS-in-JS 样式实现与测试用例讲解迷你步骤条的正确用法、尺寸继承机制、各布局变体的组合方式以及如何通过 Design Token 二次定制帮助你写出可复制、可深度定制的紧凑型步骤条。快速上手一行属性启用迷你版原文档small-size.md明确指出迷你版步骤条只需在Steps上设置sizesmall即可启用完整可运行示例见 small-size.tsximport React from react; import { Steps } from antd; const App: React.FC () ( Steps sizesmall current{1} items{[ { title: Finished, }, { title: In Progress, }, { title: Waiting, }, ]} / ); export default App;要点说明size仅需在根节点Steps上声明一次即可作用于条内全部步骤项items数组中的每个对象对应一个步骤title为步骤标题此处未设置description、icon等可选字段因此渲染的是最精简的纯文字迷你步骤条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.tsxsize?: default | small;补充说明取值枚举仅default与small两种合法值传入其他字符串不会被样式层识别将退化为默认形态与direction相互独立迷你尺寸可同时配合horizontal默认与vertical两种方向详见下文变体组合responsive无冲突默认responsive{true}会在屏幕宽度小于 532px 时自动切换为垂直模式见 index.tsx 中基于useBreakpoint的realDirectionValue计算迷你尺寸下该行为依然生效适合移动端紧凑场景。尺寸的继承机制size如何被解析从源码看size并不直接传给底层 rc-steps而是经过一层上下文合并处理components/steps/index.tsxconst size useSize(customizeSize);该 Hook 位于 components/config-provider/hooks/useSize.ts其逻辑为读取全局SizeContext中由ConfigProvider注入的组件尺寸若未显式传size返回全局尺寸即Steps会继承ConfigProvider componentSizesmall的配置若显式传了size字符串以组件上的显式值为准若传的是函数则以函数对全局尺寸的返回值为准。这意味着迷你尺寸有两条等效的声明路径{/* 方式一组件级声明 */} Steps sizesmall items{[{ title: Step 1 }]} / {/* 方式二全局配置整站步骤条统一变小 */} ConfigProvider componentSizesmall 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设置componentSizesmall时Steps 会正确继承该尺寸。因此在管理后台等场景通过ConfigProvider统一切换组件尺寸即可让所有步骤条一键进入迷你形态。迷你尺寸的样式实现原理Ant Design v5 采用 CSS-in-JScssinjs生成组件样式迷你形态由独立样式文件 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且首个步骤项左内边距为 0small.ts使整条步骤条在水平方向更紧凑。Token 来源迷你尺寸的关键 TokeniconSizeSM的默认值定义在 style/index.ts 的prepareComponentToken中iconSizeSM: token.fontSizeHeading3,即迷你图标尺寸等于fontSizeHeading3默认 24px区别于默认图标的iconSize controlHeight32px。这也是迷你二字最核心的量化体现图标从 32px 降至 24px配合更小的字号与间距整体高度随之显著压缩。迷你尺寸与各布局变体的组合迷你尺寸并非孤立形态可与 Steps 的多种布局组合使用仓库components/steps/demo目录下有多个配套示例竖直方向的迷你步骤条vertical-small.tsx 展示了directionverticalsizesmall的组合每个步骤可带description描述import React from react; import { Steps } from antd; const description This is a description.; const App: React.FC () ( Steps directionvertical sizesmall current{1} items{[ { title: Finished, description }, { title: In Progress, description }, { title: Waiting, description }, ]} / ); export default App;适用场景侧边栏、抽屉内的纵向多步流程。竖直形态下连接线沿垂直方向延伸迷你尺寸同样通过tail的top偏移与缩小后的图标保持对齐。迷你点状步骤条progress-dot-small.tsx 演示了progressDotsizesmall的迷你点状形态水平与竖直两个示例示例中还同时使用了Divider分隔两个步骤条Steps progressDot current{1} sizesmall 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。进度圆环的尺寸会感知sizeconst progressWidth size small ? 32 : 40;即迷你尺寸下进度环宽度为 32px默认尺寸为 40px。这说明sizesmall不仅影响静态样式还会改变步骤进度复合形态的内部布局参数。通过 Design Token 深度定制迷你形态Steps 的样式全部基于 Token 驱动style/index.ts 定义了完整的ComponentToken接口迷你形态可定制的关键 Token 包括Token说明默认值来源iconSizeSM小号步骤条图标大小fontSizeHeading324pxiconFontSize图标内字体大小fontSizedescriptionMaxWidth描述区域最大宽度140dotSize/dotCurrentSize点状步骤点尺寸普通/当前controlHeight / 4、controlHeightLG / 4例如通过ConfigProvider的theme定制迷你图标尺寸import React from react; import { ConfigProvider, Steps } from antd; const App: React.FC () ( ConfigProvider theme{{ components: { Steps: { iconSizeSM: 20, // 进一步压缩迷你图标 }, }, }} Steps sizesmall current{1} items{[{ title: Finished }, { title: In Progress }]} / /ConfigProvider );由于 small.ts 中图标、行高、圆角、连接线位置均以iconSizeSM为基准计算只需调整这一枚 Token整个迷你形态就会等比自适应无需手写任何覆盖样式。该组件还通过genStyleHooks挂载了waitIconColor、finishIconBgColor等状态色 Tokenstyle/index.ts迷你形态同样受其约束。使用建议与注意事项判断是否真的需要迷你版迷你版是为空间受限的紧凑场景设计的若你的步骤条处于页面主体区域且包含较长描述文本默认尺寸sizedefault可读性更好配合responsive使用默认情况下迷你步骤条在窄屏会自动转垂直方向无需手动处理移动端布局尺寸统一性如需全站统一为迷你形态优先在ConfigProvider上设置componentSizesmall比逐个组件传size更易维护且行为已有测试用例保证组合限制迷你尺寸与typenavigation、typeinline等形态的组合以实际渲染效果为准inline类型有自己的独立 TokeninlineDotSize、inlineTitleColor等见 style/index.ts其样式并不依赖small.ts中的规则。小结Steps sizesmall是 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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进