You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅用CSS实现按进度值切换颜色的圆形增长进度条

纯CSS实现进度条按值自动匹配颜色方案

不需要额外编写JavaScript,利用CSS容器样式查询直接匹配元素上--value自定义属性的数值区间,覆盖对应颜色变量即可,完全满足「仅按最终进度值匹配颜色、动画过程不切换」的需求。

完整修改后代码

CSS部分

@keyframes growProgressBar {
  0%,
  33% {
    --pgPercentage: 0;
  }
  100% {
    --pgPercentage: var(--value);
  }
}
@property --pgPercentage {
  syntax: '<number>';
  inherits: false;
  initial-value: 0;
}
div[role="progressbar"] {
  container-type: inline-size;
  --size: 12rem;
  /* 默认兜底颜色 对应80~100区间 */
  --fg: green;
  --bg: lightgreen;
  --pgPercentage: var(--value);
  animation: growProgressBar 3s 1 forwards;
  width: var(--size);
  height: var(--size);
  border-radius: 50%;
  display: grid;
  place-items: center;
  background:
    radial-gradient(closest-side, white 80%, transparent 0 99.9%, white 0),
    conic-gradient(var(--fg) calc(var(--pgPercentage) * 1%), var(--bg) 0);
  font-family: Helvetica, Arial, sans-serif;
  font-size: calc(var(--size) / 5);
  color: var(--fg);
}
div[role="progressbar"]::before {
  counter-reset: percentage var(--value);
  content: counter(percentage) '%';
}

/* 按进度值区间匹配颜色 低区间规则前置,高区间自动覆盖边界值 */
/* 0~20区间 */
@container style(--value <= 20) {
  div[role="progressbar"] {
    --fg: red;
    --bg: pink;
  }
}
/* 20~40区间 */
@container style(--value > 20) and style(--value <= 40) {
  div[role="progressbar"] {
    --fg: orange;
    --bg: peachpuff;
  }
}
/* 40~60区间 */
@container style(--value > 40) and style(--value <= 60) {
  div[role="progressbar"] {
    --fg: yellow;
    --bg: lightyellow;
  }
}
/* 60~80区间 */
@container style(--value > 60) and style(--value <= 80) {
  div[role="progressbar"] {
    --fg: royalblue;
    --bg: lightblue;
  }
}

HTML使用示例

直接在元素style属性中设置--value为对应进度值即可自动匹配颜色,不需要额外添加类名:

<!-- 90%进度 自动匹配绿色系 -->
<div role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100" style="--value:90"></div>
<!-- 15%进度 自动匹配红色系 -->
<div role="progressbar" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100" style="--value:15"></div>
<!-- 55%进度 自动匹配黄色系 -->
<div role="progressbar" aria-valuenow="55" aria-valuemin="0" aria-valuemax="100" style="--value:55"></div>
<!-- 72%进度 自动匹配蓝色系 -->
<div role="progressbar" aria-valuenow="72" aria-valuemin="0" aria-valuemax="100" style="--value:72"></div>
<!-- 30%进度 自动匹配橙色系 -->
<div role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="--value:30"></div>

实现说明

  • 颜色匹配在页面初始化、进度条动画开始播放前就已完成,动画全程颜色保持固定,不会随着进度增长动态切换
  • 边界值(20/40/60/80)会自动匹配对应更高区间的颜色,符合常规进度条交互逻辑
  • 仅新增了容器查询声明和区间颜色匹配规则,原有进度条的动画效果、样式、百分比数字展示逻辑完全保留

内容的提问来源于stack exchange,提问作者Federico Loyato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:51:26