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

HTML/CSS中SVG圆形加载器无法显示的问题求助

问题分析与解决方案

你的circle显示为0x0的点,核心原因是SVG的<circle>标签不支持width和height属性,必须用r(半径)来定义大小。另外还有几个细节问题导致渲染异常,以下是分步修复:

1. 修正HTML中circle的属性

把无效的width/height替换为r(半径),同时调整cx/cy到SVG的中心(SVG宽高150px,中心坐标为75,75):

<div className="loader">
  <svg className="svg">
    <circle cx="75" cy="75" r="65" />
  </svg>
</div>

注:r设为65是因为stroke-width为10,stroke会向内外各延伸5px,65+5=70 < 75(中心到边缘的距离),避免stroke超出SVG容器

2. 修复CSS中的问题

2.1 定义缺失的CSS变量

你使用了var(--redwine)但未定义,需要在全局或.loader里添加变量定义:

.loader{
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  --redwine: #8B0000; /* 替换为你需要的酒红色值 */
}

2.2 移除circle上无效的CSS属性

<circle>是SVG元素,width/height/background-color/z-index这些CSS属性对它无效,直接删除:

.svg circle{
  /* 删掉以下无效属性:
  background-color: red;
  width: 1em;
  height: 1em;
  z-index: 100;
  */
  fill: var(--redwine);
  stroke-width: 10;
  stroke: var(--redwine);
  stroke-linecap: round;
  /* 移除不必要的translate,已经通过cx/cy定位到中心 */
  /* transform:translate(5px, 5px); */
  stroke-dasharray: 408; /* 匹配圆的周长:2*π*65≈408.4,取整 */
  stroke-dashoffset: 408;
  animation: circular 4s linear infinite;
}

2.3 调整SVG的viewBox(可选但推荐)

给SVG添加viewBox属性,让坐标系统和容器大小匹配,避免缩放时变形:

<svg className="svg" viewBox="0 0 150 150">

2.4 修正stroke-dasharray和动画值

根据新的半径(65)计算周长,调整stroke-dasharray和stroke-dashoffset的值,确保动画流畅:

@keyframes circular{
  0%, 100%{
    stroke-dashoffset: 408;
  }
  50%{
    stroke-dashoffset: 0;
  }
  50.1%{
    stroke-dashoffset: 816; /* 408*2 */
  }
}

最终完整代码

HTML

<div className="loader">
  <svg className="svg" viewBox="0 0 150 150">
    <circle cx="75" cy="75" r="65" />
  </svg>
</div>

CSS

.loader{
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  --redwine: #8B0000;
}

.svg{
  width: 150px;
  height: 150px;
  animation: rotate 2s linear infinite;
}

@keyframes rotate{
  0%{
    transform: rotate(0deg);
  }
  100%{
    transform: rotate(360deg);
  }
}

.svg circle{
  fill: var(--redwine);
  stroke-width: 10;
  stroke: var(--redwine);
  stroke-linecap: round;
  stroke-dasharray: 408;
  stroke-dashoffset: 408;
  animation: circular 4s linear infinite;
}

@keyframes circular{
  0%, 100%{
    stroke-dashoffset: 408;
  }
  50%{
    stroke-dashoffset: 0;
  }
  50.1%{
    stroke-dashoffset: 816;
  }
}

这样修改后,circle就能正确渲染,并且旋转动画正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:30:56