Javascript SVG中风问题

Javascript SVG中风问题,javascript,html,css,svg,stroke,Javascript,Html,Css,Svg,Stroke,我正在用SVG创建一个图表。 我已经用三个圆元素创建了它,并添加了一条路径(三角形)以形成空白。但我不知道如何在底部隐藏一个几乎可见的薄边框。 也许我做错了什么 这是我的演示: 下面是一个屏幕截图,可以更好地理解我所说的内容: SVG: 我假设您使用Google Chrome或类似的基于Blink或Webkit的浏览器来测试这个SVG图像。在Mozilla Firefox或Microsoft Edge中打开页面时,不会显示您指出的非常薄的边框,因此这是浏览器的问题,而不是代码的问题。我建议向谷

我正在用SVG创建一个图表。 我已经用三个圆元素创建了它,并添加了一条路径(三角形)以形成空白。但我不知道如何在底部隐藏一个几乎可见的薄边框。 也许我做错了什么

这是我的演示: 下面是一个屏幕截图,可以更好地理解我所说的内容:

SVG:
我假设您使用Google Chrome或类似的基于Blink或Webkit的浏览器来测试这个SVG图像。在Mozilla Firefox或Microsoft Edge中打开页面时,不会显示您指出的非常薄的边框,因此这是浏览器的问题,而不是代码的问题。我建议向谷歌发送一份关于这个问题的bug报告

同时,为了解决所有问题,包括Chrome浏览器,考虑使用SVG <代码> <代码>元素,并将其应用到除了白色三角形之外的所有形状。然后,在CSS中,删除
svg
选择器中的
边框半径
属性

<svg viewBox="0 0 32 32">
  <defs>
    <clipPath id="circle-viewport">
      <circle r="16" cx="16" cy="16" />
    </clipPath>
  </defs>
  <circle
    r="16"
    cx="16"
    cy="16"
    class="circle--progress"
    stroke-dasharray="100 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <circle
    r="16"
    cx="16"
    cy="16"
    fill="none"
    stroke="#3FC364"
    stroke-dasharray="100 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <circle
    r="16"
    cx="16"
    cy="16"
    fill="none"
    stroke="#EDBB40"
    stroke-dasharray="66 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <circle
    r="16"
    cx="16"
    cy="16"
    fill="none"
    stroke="#FF8832"
    stroke-dasharray="33 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <path d="M16 16 L100 50 L200 -50 Z" fill="white"></path>
</svg>

问题似乎在于浏览器(Chrome、Safary或同一引擎上的其他浏览器)如何使用
边框半径50%呈现svg
。用圆形遮罩剪裁它没有帮助

一种解决方案是使图形看起来相同,而不使用
边框半径切割(遮罩)使其看起来是圆形的。这将要求对彩色线段使用欺骗圆半径和笔划宽度:

<circle
      r="15" <--
      cx="16"
      cy="16"
      fill="none"
      stroke="#3FC364"
      stroke-dasharray="100 100"
    ></circle>

circle {
  fill: transparent;
  stroke-width: 2; <--
}


在这里添加您的尝试代码。
.wrapper {
  position: relative;
  width: 400px;
  height: 400px;
  padding: 20px 0;
  margin: 0 auto;
}

svg {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  transform: rotate(90deg);
}

circle {
  fill: transparent;
  stroke-width: 3;
}

.circle--progress {
  fill: transparent;
  stroke: #C4C4C4;
  stroke-width: 32;
  stroke-opacity: .25;
}

.text {
  position: absolute;
  z-index: 2;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-family: sans-serif;
  text-align: center;
}

.text__percentage {
   font-size: 60px;
   font-weight: bold;
}

.text__description {
  font-size: 18px;
  font-weight: 500;
  line-height: 16px;
}
<svg viewBox="0 0 32 32">
  <defs>
    <clipPath id="circle-viewport">
      <circle r="16" cx="16" cy="16" />
    </clipPath>
  </defs>
  <circle
    r="16"
    cx="16"
    cy="16"
    class="circle--progress"
    stroke-dasharray="100 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <circle
    r="16"
    cx="16"
    cy="16"
    fill="none"
    stroke="#3FC364"
    stroke-dasharray="100 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <circle
    r="16"
    cx="16"
    cy="16"
    fill="none"
    stroke="#EDBB40"
    stroke-dasharray="66 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <circle
    r="16"
    cx="16"
    cy="16"
    fill="none"
    stroke="#FF8832"
    stroke-dasharray="33 100"
    clip-path="url(#circle-viewport)"
  ></circle>
  <path d="M16 16 L100 50 L200 -50 Z" fill="white"></path>
</svg>
<circle
      r="15" <--
      cx="16"
      cy="16"
      fill="none"
      stroke="#3FC364"
      stroke-dasharray="100 100"
    ></circle>

circle {
  fill: transparent;
  stroke-width: 2; <--
}

    <circle
      r="8" <--
      cx="16"
      cy="16"
      class="circle--progress"
      stroke-dasharray="100 100"
    ></circle>

.circle--progress {
  fill: transparent;
  stroke: #C4C4C4;
  stroke-width: 16; <-- 8 radius + 8 half stroke width= 16 visible radius
  stroke-opacity: .25;
}