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

如何为SVG圆形进度条的stroke宽度区域添加内部box-shadow效果

解决方案

你写的box-shadow仅对HTML盒模型元素生效,无法作用于SVG内部的<circle>这类矢量图形元素,所以现有代码无法实现描边区域的内阴影效果,需要用SVG自带的滤镜实现,修改后代码如下:

修改后的HTML代码

<div class="container">
    <div class="card">
      <div class="box">
        <div class="percent">
          <svg>
            <!-- 定义内阴影滤镜 -->
            <defs>
              <filter id="strokeInnerShadow" x="-50%" y="-50%" width="200%" height="200%">
                <feOffset dx="3" dy="3" in="SourceAlpha" result="offsetBlur"/>
                <feGaussianBlur stdDeviation="4" in="offsetBlur" result="blurResult"/>
                <feComposite in="blurResult" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowClip"/>
                <feFlood flood-color="#ccc" flood-opacity="0.8" result="shadowColor"/>
                <feComposite in="shadowColor" in2="shadowClip" operator="in" result="finalShadow"/>
                <feComposite in="finalShadow" in2="SourceGraphic" operator="over"/>
              </filter>
            </defs>
            <circle cx="100" cy="100" r="100"></circle>
            <!-- 给需要加阴影的进度条circle添加滤镜 -->
            <circle cx="100" cy="100" r="100" filter="url(#strokeInnerShadow)"></circle>
          </svg>
          <div class="number">
            <h2>55<span>%</span></h2>
          </div>
        </div>
      </div>
    </div>
  </div>

修改后的CSS代码

svg circle {
    width: 100%;
    height: 100%;
    fill: none;
    stroke: #f5f4f4;
    stroke-width: 25px;
    stroke-linecap: round;
    transform: translate(13px, 12px);
    /* 删掉不生效的box-shadow */
}

效果调整说明

  • 调整feOffset标签的dx/dy属性,可修改阴影的水平/垂直偏移量
  • 调整feGaussianBlur标签的stdDeviation属性,可修改阴影的模糊程度
  • 调整feFlood标签的flood-color/flood-opacity属性,可修改阴影的颜色和透明度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:51:02