UI Design System
build dev

Progress

展示任务完成程度。中文惯用名:进度条。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.progress
名称Progress
二级分类反馈(feedback)
用途展示任务完成程度
描述中文惯用名:进度条。

预览

静态结构:根节点 <div data-slot="progress">(relative w-full)内为轨道 + 指示条——轨道(data-slot="progress-track",h-2 全宽、rounded-full、bg-(--progress-track) 令牌底色、overflow-hidden)内是指示条(data-slot="progress-indicator",h-full、bg-(--progress-indicator) 令牌前景色,宽度由 Base UI 按 value 百分比设置并带 width 过渡)。value 经适配器钳制到 0~100;undefined / null / 非有限数透传为不确定态,不显示固定比例。

DSL 结构

DslNode
{
  "type": "Progress",
  "props": {
    "value": 70
  }
}

何时用

何时使用

  • 展示任务完成程度:上传 / 下载、导入导出、批量处理的百分比反馈。
  • 有明确总量与已完成量、进度可计算的可控任务,用户据此判断还需等待多久。
  • 无法估算进度时用不确定态(value 缺省 / null)表示「处理中但无完成度」。

何时不用

  • 只需表示「紧邻内容正在处理」:使用 Spinner(局部指示,不算完成度)。
  • 需要覆盖页面或区块并阻断操作:使用 LoadingOverlay(Spinner + 遮罩)。
  • 结构已知的加载占位:使用 Skeleton(比进度条更贴近最终版式)。
  • 表达评分 / 指标占比等静态数值:使用 Statistic 或图表,Progress 的语义是任务进度。

变体

变体视觉形态适用场景
进行中(0 < value < 100)指示条按比例填充上传 / 导入等可估算进度的任务
已完成(value = 100)指示条铺满轨道任务收尾的完成态展示
不确定态(value 缺省 / null)透传 Base UI 不确定态,不显示固定比例处理中但总量未知、无法计算百分比
边界值钳制越界值按 0 / 100 展示计算误差导致越界时的兜底(如完成数大于总数)

API 属性

属性类型默认值说明
value`numbernull`—
className / stylestring / CSSProperties—通用:根节点 class 合并 / 内联样式

使用规范

  • 有总量就传 value(按已完成 / 总量计算百分比);无法估算时用不确定态或改用 Spinner,不要造假进度。
  • 进度须真实反映任务状态:绑定数据源的完成量,任务结束(成功或失败)都要停止推进并切换为 Result / Alert 反馈。
  • 长任务在进度条旁给出文字说明(「已处理 120 / 300」)与可取消入口,只有条形容器用户无法判断还剩多久。
  • 与 Spinner / LoadingOverlay 的分工:进度条表达完成程度,Spinner 表达局部处理中,LoadingOverlay 覆盖区块并阻断操作。
  • 配色沿用令牌(--progress-track / --progress-indicator),不要用 Progress 表达评分或指标占比。

正例

  • ✓ 文件上传:value 绑定已上传字节百分比,完成后切换为 Result / Alert 反馈结果。
  • ✓ 批量导入:value = 已完成数 / 总数,旁侧附「已处理 120 / 300」文案与取消入口。
  • ✓ 无法估算时:不传 value(不确定态),配合文案「正在准备数据…」。

反例

  • ✕ 用定时器推进假进度(进度必须真实反映任务状态)。
  • ✕ 首屏结构已知的加载也用 Progress(应使用 Skeleton)。
  • ✕ 用 Progress 表达评分或完成度指标(应使用 Statistic 或图表)。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。