我需要创建一个使用css/html的进度条. 我已经有了一个圆锥渐变版本,可以很好地使用两种 colored颜色 ,但我想在--百分比部分之后添加一小部分白色,在--次要 colored颜色 部分之后添加另一个白色部分.

以下是我的代码:

[role="progressbar"] {
  --percentage: var(--value);
  --primary: #00B4F4;
  --secondary: #00D0FF;
  --size: 200px;
  width: var(--size);
  aspect-ratio: 1;
  border-radius: 50%;
  position: relative;
  overflow: hidden;
  display: grid;
  place-items: center;
}

[role="progressbar"]::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: conic-gradient(var(--primary) calc(var(--percentage) * 1%), var(--secondary));
  mask-mode: alpha;
  -webkit-mask: radial-gradient(#0000 55%, #000 0);
  -webkit-mask-mode: alpha;
}

[role="progressbar"]::after {
  counter-reset: percentage var(--value);
  content: counter(percentage) '%';
  font-family: Helvetica, Arial, sans-serif;
  font-size: calc(var(--size) / 5);
  color: var(--secondary);
  font-weight: bold;
}
<div role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="--value: 60"></div>

我试着把白色部分设置成这样:

background: conic-gradient(
    var(--primary) 0 calc(var(--percentage) * 1%),
    white calc(var(--percentage) * 1%) calc(calc(var(--percentage) + 5) * 1%),
    var(--secondary) calc(calc(var(--percentage) + 5) * 1%) calc(calc(100% - var(--percentage) - 5% - 5%) * 1%),
    white calc(calc(100% - var(--percentage) - 5% - 5%) * 1%) 100%
  );

但之后什么都没有显示出来.

推荐答案

对于5%的缺口,需要从%s的两边各go 掉一半.

这段代码定义了一个css变量中的间隙.

<style>
  [role="progressbar"] {
    --percentage: var(--value);
    --primary: #00B4F4;
    --secondary: #00D0FF;
    --size: 200px;
    width: var(--size);
    aspect-ratio: 1;
    border-radius: 50%;
    position: relative;
    overflow: hidden;
    display: grid;
    place-items: center;
  }
  
  [role="progressbar"]::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    mask-mode: alpha;
    -webkit-mask: radial-gradient(#0000 55%, #000 0);
    -webkit-mask-mode: alpha;
    --pc: calc(var(--percentage) * 1%);
    --gap: 5%;
    --halfgap: calc(var(--gap) / 2);
    background: conic-gradient(white 0 var(--halfgap), var(--primary) var(--halfgap) calc(var(--pc) - var(--halfgap)), white calc(var(--pc) - var(--halfgap)) calc(var(--pc) + var(--halfgap)), var(--secondary) calc(var(--pc) + var(--halfgap)) calc(100% - var(--halfgap)), white calc(100% - var(--halfgap)) 100%);
  }
  
  [role="progressbar"]::after {
    counter-reset: percentage var(--value);
    content: counter(percentage) '%';
    font-family: Helvetica, Arial, sans-serif;
    font-size: calc(var(--size) / 5);
    color: var(--secondary);
    font-weight: bold;
  }
</style>

<div role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="--value: 60"></div>
<style>

</style>

Html相关问答推荐

自动字间距以适应行CSS

在FlexBox中将div拉伸到父div的完全高度

如何在垂直堆叠的表格中调整人造列的大小?

仅在过渡之前删除填充

Html视频标签:圆角像素化

如何使用css在响应图像后面添加形状?

`table>;的消失;tbody:nth子级(1)`HTML

为什么 html 元素的 max-width 和 width 一起工作?

如何使用 Flutter 构建 Chrome 扩展?

Flex布局中,当父元素高度较高时,交叉轴上出现额外的空白问题.

如何垂直平移一个元素,使其新位置位于另外两个元素之间?

如何调整底部有 SVG 的元素的高度,使其在所有宽度上看起来都不错?