Ant Design Progress 组件设计指南:从任务进度理解到圆形与微型进度条的应用解析
Ant Design Progress 组件设计指南从任务进度理解到圆形与微型进度条的应用解析【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/GitHub_Trending/an/ant-designProgress进度条是 Ant Design 中用于「了解任务进度」的反馈类组件。本篇文章以仓库内 Progress 的 Design 文档 components/progress/index.$tab-design.en-US.md 为主线结合组件源码progress.tsx、Line.tsx、Circle.tsx与官方 API 文档系统梳理 Progress 的设计定位、基础用法、状态表达、信息展示以及圆形/微型等样式变体。读完你将掌握如何用线性进度条传达任务完成度与状态如何用文字、图标补充进度描述以及何时选择环形进度条或内容级微型进度条并能从源码层面理解 percent、status、showInfo、size 等关键属性的底层行为。组件定义Progress 的本质是了解任务的进度Design 文档对 Progress 给出的定义非常凝练Progress 的本质是了解任务的进度The essence of Progress is to understand the progress of a task。围绕这一本质官方在 design/behavior-pattern.tsx 中画出了一张「行为地图」BehaviorMap将用户心智拆解为两条主线查看任务的完成程度MVP 核心能力了解任务进度对应线性基础示例了解任务状态对应状态颜色示例查看进度相关描述扩展能力对应文字/图标信息示例也就是说Progress 面向的真实场景不是“显示一个数字”而是回答两个问题“事情做到哪一步了”与“这一步的结果是好是坏”。这与完整版文档 index.en-US.md 的 When To Use 一脉相承——当某个操作会打断当前界面、需要在后台运行超过约 2 秒或者需要展示操作完成百分比时就应当使用 Progress。从源码结构看这一“先理解进度、再表达状态与信息”的设计思想也映射到了组件的渲染拆分上顶层入口 progress.tsx 依据type分发到 Line.tsx线性、Circle.tsx圆形/Dashboard或 Steps.tsx分段步进而进度百分比indicator 文本或状态图标统一由顶层progressInfo计算后作为 children 注入保证所有形态的进度条共享同一套“数值 状态 信息”逻辑。基础使用用线性进度条了解任务进度Design 文档中「基础使用」的第一层就是用线性格式同时展示总进度与已完成进度这是 Progress 最基础的用法。示例见 design/demo/progress.tsximport React from react; import { Flex, Progress } from antd; const Demo () ( Flex vertical gapmedium {/* 标准宽度320px的线性进度条隐藏右侧数值仅保留进度条本体 */} Progress typeline percent{50} showInfo{false} style{{ width: 320 }} / {/* small 尺寸、更窄的紧凑线性进度条 */} Progress percent{50} showInfo{false} sizesmall style{{ width: 100 }} / /Flex );这段示例里有几个值得注意的默认值与参数percent完成百分比源码中的默认值是0progress.tsx 中percent 0取值范围由 utils.ts 的validProgress收敛到 0100因此超出范围的数值会被自动钳制。showInfo{false}隐藏进度值文字。该属性的默认值是true。关闭后 Progress 只呈现“总轨道rail 已填充轨道track”两条视觉层。size默认值是medium。在 Line.tsx 中线性进度条的默认高度为 medium 8px、small 6px示例里第一根style{{ width: 320 }}是固定容器宽度第二根sizesmall则表现为更扁的“细进度条”。在线性渲染内部Line.tsx 把“总进度”与“已完成进度”进一步拆成两组轨道底层整条的.rail底色可用railColor设置以及按width: percent%计算的.track主进度可用strokeColor设置。这正是“展示总进度和已完成进度”这一设计描述的 DOM 实现。了解任务状态用已完成进度的颜色传达任务当前状态Design 文档第二层核心能力是通过已完成进度的颜色了解当前任务的状态。示例见 design/demo/status.tsx三种典型状态并排对照Progress typeline percent{50} showInfo{false} style{{ width: 320 }} / {/* 任务进行中 */} Progress typeline percent{100} statussuccess showInfo{false} style{{ width: 320 }} / {/* 任务完成 */} Progress typeline percent{30} statusexception showInfo{false} style{{ width: 320 }} / {/* 任务失败 */}这段示例对应的完整 API 语义是status可取值normal、success、exception、activeactive仅线性类型可用。源码 progress.tsx 中定义了export const ProgressTypes [line, circle, dashboard] as const; const ProgressStatuses [normal, exception, active, success] as const;并有一套自动状态推导逻辑当status未显式声明且percent 100时自动视为success否则默认normal。因此在上面的对照示例中第一根50%显示为进行中的常态蓝第二根即使不写statussuccess也会因为 100% 自动变为绿色——显式传入只是让意图更明确。状态不仅改变颜色也会改变右侧指示内容的形态。当statussuccess时线性进度条末尾显示对勾图标CheckCircleFilledstatusexception时显示错误图标CloseCircleFilled二者取代默认的百分比文本。对应地根节点 className 会携带${prefixCls}-status-${progressStatus}方便主题与语义化样式挂钩。交互变体通过文字和图标查看进度相关描述当“百分比数字”不足以说明任务内容时Design 文档给出的扩展能力是用文字与图标承载进度相关的描述信息View Progress-related Descriptions见 design/demo/info.tsxProgress typeline percent{50} style{{ width: 320 }} / {/* 默认显示 50% */} Progress percent{50} format{() Loading} style{{ width: 320 }} / {/* 自定义文案 */} Progress percent{100} statussuccess style{{ width: 320 }} / {/* 完成图标 百分比 */} Progress percent{70} statusexception style{{ width: 320 }} / {/* 异常图标 百分比 */}这里引入的关键属性是format其签名为(percent, successPercent) ReactNode默认行为是(percent) percent %。源码中的文本渲染逻辑progress.tsx 的progressInfo说明了它的优先级只要设置了format就始终渲染format的返回值例如“Loading”“上传中”这类文案未设置format时success/exception状态渲染图标其余状态渲染百分比文本。也就是说format是让进度条“开口说话”的主要手段——你可以把百分比格式化成带单位的形式如1.2GB / 4GB也可以完全替换成状态文案。配合percentPosition见下文还能进一步控制这段描述出现在进度条内部还是外部。例如希望百分比数字显示在进度条轨道内部时Progress percent{60} percentPosition{{ align: center, type: inner }} /该属性自 5.18.0 起支持默认值为{ align: end, type: outer }源码中在纯线形无steps时会追加-indicator-{align}、-indicator-{type}及内部文字亮度补偿类-indicator-bright用于在亮色填充轨道上保证文字可读性。样式变体环形进度条Circle / DashboardDesign 文档的样式变体部分首先给出环形Circular进度说明其“多用于需要强调百分比的场景如 Dashboard”示例见 design/demo/circle.tsxFlex gapmedium aligncenter Progress typecircle percent{68} / Progress typecircle percent{100} statussuccess / Progress typecircle percent{68} statusexception / Progress typecircle percent{68} sizesmall / Progress typecircle percent{100} statussuccess sizesmall / Progress typecircle percent{68} statusexception sizesmall / /Flex与“百分比数字”这一强调点对应的是组件尺寸的默认值设计。看 Circle.tsx圆形的默认画布宽度为120width: originWidth 120默认strokeWidth为 6单位是占画布宽度的百分比内容字号跟随画布尺寸自动缩放fontSize: width * 0.15 6因此sizesmall与默认尺寸的差异会自动同步到轨道粗细与中心文字大小上。需要补充的同类变体还包括typedashboard仪表盘形它与圆形的实现同源渲染进 Circle.tsx只是默认留出 75° 的缺口gapDegree默认 75并将缺口置于底部gapPlacement默认bottom。gapDegree支持 0295 的取值以控制半圆开口大小。当圆形画布宽度不超过 20 时根节点会自动挂上-inline-circle样式退化为适合内联嵌入的“迷你圆点”形态。样式变体内容级微型进度条Design 文档的第二个样式变体是适用于内容级场景的微型进度条常与文本搭配使用Content-level Progress见 design/demo/content.tsxconst { token } theme.useToken(); // 内容行内使用 16px 的迷你圆形进度 状态文字 Flex gapsmall aligncenter Progress size{16} typecircle percent{68} railColor{token.colorPrimaryBg} / divIn Progress/div /Flex Flex gapsmall aligncenter Progress size{16} typecircle percent{100} statussuccess / divCompleted/div /Flex Flex gapsmall aligncenter Progress size{16} typecircle percent{68} statusexception railColor{token.colorErrorBg} / divException/div /Flex该示例揭示了内容级进度条的三个设计要点尺寸极小化size直接传入数字16自 5.3.0 起支持此时圆形进入 inline 形态视觉上只是一个带弧度的圆点不会抢夺正文的注意力。自定义底色这里使用了railColor未填充部分的颜色并配合theme.useToken()取主题色例如进行中搭配colorPrimaryBg浅色底、异常搭配colorErrorBg。注意源码中railColor是对旧属性trailColor的正式替代mergedRailColor railColor ?? trailColor做了向后兼容。状态图标内联化当size16且状态为 success/exception 时由于画布很小内部渲染会自动呈现对勾/叉号图标圆形类型用CheckOutlined/CloseOutlined而非填充型图标让一行文字前带上明确的状态信号。这种“微小进度圆点 相邻文本”的组合非常适合在内容列表、文件上传单元、邮件附件等行内场景表达单项任务的进行/完成/失败状态。通用属性与语义化定制速查除了 Design 文档聚焦的五组演示Progress 还提供了一套覆盖全部形态的通用属性出自官方 API 表 index.en-US.md。这里按“全类型通用”整理核心项便于实际开发时对照属性说明类型默认值type进度条形态line|circle|dashboardlinepercent完成百分比number0status状态active仅 linenormal|success|exception|active-format内容模板函数(percent, successPercent) ReactNode(p) p %showInfo是否显示数值与状态图标booleantruestrokeColor进度条颜色支持渐变对象string | string[] |{ from, to, direction }|{ n%: color }-railColor未填充部分颜色替代trailColorstring-strokeLinecap线帽样式round|butt|squareroundsuccess成功段配置{ percent, strokeColor }-size尺寸number | 数组 | 对象 |small|mediummedium在语义化定制方面自 6.0.0 起支持classNames/styles对组件内部结构root、body、rail、track、indicator逐一定制结构定义见 progress.tsx 的ProgressSemanticType这让你可以在不写魔法选择器的情况下直接命中“轨道”“填充”“指示器”等语义节点。同时Progress 也支持通过 ConfigProvider 的组件级配置与 Design Token 做全局统一视觉调整。无障碍与工程细节从 progress.tsx 的根节点渲染可以看到Progress 原生承担了 WAI-ARIA 进度条角色div roleprogressbar aria-valuenow{percentNumber} aria-valuemin{0} aria-valuemax{100}即无需额外配置屏幕阅读器即可读取当前进度值。仓库中的无障碍测试 a11y.test.ts 与交互测试 index.test.tsx 覆盖了这些可访问性契约。另外源码在开发环境下会对以下已废弃用法发出 warning迁移新代码时应避免width→ 改用sizetrailColor→ 改用railColorgapPosition→ 改用gapPlacementsizedefault→ 改用sizemedium小结回到 Design 文档的初心——Progress 的本质是“了解任务的进度”。一图以蔽之线性进度条告诉你任务做到哪里完成度与做得如何状态色文字与图标补充“这段进度在描述什么”环形进度条与 Dashboard 适合把百分比作为视觉中心16px 的内容级微型进度条则以不打扰阅读的方式把单个任务的进行/完成/异常状态嵌入内容流中。结合 index.en-US.md 的完整 API 与上述源码实现你可以按需组合percent、status、format、size、strokeColor、railColor、percentPosition等属性把任务进展这件事表达得既准确又不抢戏。【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/GitHub_Trending/an/ant-design创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考