Skip to content

环形进度 Progress Circular

使用 SVG stroke-dasharraystroke-dashoffset 实现圆形进度环动画。

实时预览

68%

代码

css
.cprog-ring {
  stroke: #40b883;
  stroke-dasharray: 251.2;     /* 2 * π * r */
  stroke-dashoffset: 251.2;    /* 初始: 完全隐藏 */
  transform: rotate(-90deg);   /* 从顶部开始 */
  transform-origin: center;
  animation: cprog-fill 2s ease-out forwards;
}
@keyframes cprog-fill {
  to { stroke-dashoffset: 80.4; }  /* 目标偏移 */
}
html
<svg width="100" height="100" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="40" stroke="#333" stroke-width="8" fill="none"/>
  <circle cx="50" cy="50" r="40" class="cprog-ring" stroke-width="8" fill="none"/>
</svg>

纯 CSS 实现的环形进度进度动画——通过动画和自定义属性让进度指示器具有动态视觉效果。适用于文件上传、表单步骤、数据加载等场景。

快速使用

  1. 复制 CSS 代码到你的样式文件中
  2. 将进度条 HTML 结构粘贴到页面
  3. 用 JavaScript 动态设置进度值:element.style.setProperty('--progress', '75%')
  4. 或直接修改进度条 fill 元素的 widthstroke-dashoffset

使用场景

  • 文件上传进度:进度条从 0 到 100% 的填充动画+百分比数字递增
  • 多步骤表单:步骤指示器展示当前进度(第 2/4 步)
  • 页面加载:顶部加载条从 0 到 100%,让用户有明确的等待预期
  • 技能/数据可视化:环形进度或进度条展示统计数据的填充动画

常见问题

Q: CSS 进度条如何动态更新? A: 通过 JavaScript 修改 CSS 自定义属性:element.style.setProperty('--progress', '75%'),CSS 中用 width: var(--progress)@property --num 配合动画实现。也可以直接修改内联 style 的 width 值。

Q: 环形进度如何实现? A: 两种方案:1) SVG <circle> + stroke-dasharray + stroke-dashoffset 控制弧长;2) CSS conic-gradient + @property 动画(仅 Chrome/Edge)。SVG 方案兼容性更好。

Q: 骨架屏如何适配不同内容? A: 骨架屏用抽象的灰色矩形块模拟内容区域,不需要和真实内容完全对齐。关键是用 CSS grid/flex 排布骨架块的结构,让用户对"即将出现的内容布局"有心理预期。

浏览器兼容性

浏览器兼容性
Chrome / Edge✅ 完全支持(含 @property)
Firefox✅ 基本支持(不含 @property)
Safari✅ 基本支持
移动端浏览器✅ 完全支持
IE 11❌ 动画和自定义属性不支持

使用说明

属性说明
stroke-dasharray: 251.2圆周长 (2π×40)
stroke-dashoffset控制显示弧长,越小进度越多
rotate(-90deg)使进度从 12 点方向开始
stroke-linecap: round圆角端点