Skip to content

Progress 进度条

线性与环形两种形态,含状态色与流动条纹。

线性进度条

60%
0%
vue
<SrProgress :percentage="60" />

状态色

status 覆盖默认配色。不传时按百分比自动派生: 100% 变成功色。

30%
60%
80%
90%
vue
<SrProgress :percentage="60" />
<SrProgress :percentage="60" status="success" />
<SrProgress :percentage="100" />              <!-- 自动变成功色 -->

颜色不是唯一的区分手段

warningdanger 只靠颜色区分,色觉障碍用户分辨不出来

进度条本身承载的信息是"进度到哪了",颜色只是补充。 若状态会触发业务动作(如"超标告警"), 务必同时用文字说明,不能只依赖颜色。

环形

25%
60%
100%
80%
vue
<SrProgress type="circle" :percentage="60" />

size 控制直径,strokeWidth 控制线宽。

70%
70%
vue
<SrProgress type="circle" :percentage="70" :size="60" :stroke-width="4" />
<SrProgress type="circle" :percentage="70" :size="100" :stroke-width="6" />

流动条纹

striped 用于"正在进行、时长不确定"的任务——动画暗示"还在动"

0%
vue
<SrProgress :percentage="60" striped />

进度条 vs 加载动画

两者容易混用,但语义不同:

用哪个
知道进度(上传 60%、安装 3/5)进度条
不知道还要多久(请求中、初始化)SrLoading

给不确定的任务配一个假进度条(比如从 0 慢慢爬到 90% 然后停住) 是在骗用户——他会在 90% 那里等很久,然后突然跳到 100%。 不如诚实地转个圈。

隐藏文字

show-text="false" 只留进度条本身。

vue
<SrProgress :percentage="70" :show-text="false" />

动画降级

striped 的流动动画与百分比变化的过渡在 prefers-reduced-motion: reduce自动关闭—— 进度条会直接跳到新位置,不做补间。

Props

名称类型默认值说明
percentagenumber0百分比(0–100)
type'line' | 'circle''line'形态
status'primary' | 'success' | 'warning' | 'danger'自动派生状态色
strokeWidthnumber线宽
showTextbooleantrue是否显示百分比文字
sizenumber环形直径(px)
stripedbooleanfalse是否显示流动条纹

无障碍

  • 容器带 role="progressbar",并暴露 aria-valuenow / aria-valuemin / aria-valuemax——这是读屏软件获知进度的唯一方式
  • 进度文字如果是动态更新的,用 aria-live="polite", 但不要每次变化都播报(每 5% 播一次已经很吵)。 通常只需在完成时播报一次
  • 条纹动画对前庭敏感人群不友好,prefers-reduced-motion 下已关闭

自用组件库 · 源码分发 · 不发布 npm