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

如何用纯CSS实现带阴影、可动态扩展分段、内置文字的Donut环形图形

纯CSS实现动态分段环形图方案

完全可以纯CSS实现需求,核心依赖锥形渐变实现分段,支持动态调整分段数量、占比,不需要引入图片资源。

核心实现思路

  • 动态分段:使用conic-gradient锥形渐变定义每个分段的颜色和起止位置,通过CSS变量控制分段占比,新增分段只需更新渐变参数即可
  • 环形空心:使用mask属性裁切出中间空心区域,比双层嵌套边框方案灵活性更高
  • 外阴影效果:使用filter: drop-shadow()添加环形外阴影,不会影响内部空心区域的透明效果
  • 分段分割线:在锥形渐变的分段衔接位置插入1px的透明间隙,即可实现清晰的分段分割效果

完整实现代码

<div class="donut-chart"></div>
.donut-chart {
  /* 基础尺寸配置,可以自行调整 */
  --size: 200px;
  --hole-size: 100px;
  --shadow-color: rgba(0,0,0,0.15);
  --divider-width: 1px;

  width: var(--size);
  height: var(--size);
  border-radius: 50%;
  /* 示例分为3段,占比分别是30%、40%、30%,对应颜色蓝、绿、橙 */
  background: conic-gradient(
    #3498db 0 30%,
    transparent calc(30% + var(--divider-width)),
    #2ecc71 calc(30% + var(--divider-width)) 70%,
    transparent calc(70% + var(--divider-width)),
    #f39c12 calc(70% + var(--divider-width)) 100%
  );
  /* 裁切出中间空心 */
  mask: radial-gradient(
    transparent 0 calc(var(--hole-size) / 2),
    #000 calc(var(--hole-size) / 2 + 0.5px) 100%
  );
  -webkit-mask: radial-gradient(
    transparent 0 calc(var(--hole-size) / 2),
    #000 calc(var(--hole-size) / 2 + 0.5px) 100%
  );
  /* 添加外阴影 */
  filter: drop-shadow(0 2px 8px var(--shadow-color));
}

动态扩展说明

如果需要新增/修改分段,只需要调整conic-gradient内的参数即可,比如要新增一个占比20%的红色分段,只需要按格式在渐变中添加对应的颜色和起止占比,分割线会自动生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:15:04