【问题标题】:How to make roundable progress bar? [closed]如何制作圆形进度条? [关闭]
【发布时间】:2026-02-03 05:55:01
【问题描述】:

我想做一个进度条。但是所有的进度条都是水平的。我希望我的进度条是半圆的。怎么可能使用 HTML 和 CSS? click here for see the image of my wanted thing.

【问题讨论】:

    标签: html css


    【解决方案1】:

    您还可以使用边框半径和伪元素,最终使用过渡或动画 下面的例子或demo:

    /* 10% = 18deg */
    
    div {
      text-align: center;
      font-size: 22px;
      font-weight: bold;
      color: #7F8C8C;
      display: inline-block;
      margin: 0 1em;
     }
    
    p {
      margin: 0;
    }
    
    [data-progress] {
      width: 120px;
      height: 60px;
      border-radius: 180px 180px 0 0;
      position: relative;
      overflow: hidden;
      background: #76C7C0
    }
    
    [data-progress]:before {
      content: attr(data-progress);
      display: block;
      margin: 18px;
      background: white;
      text-align: center;
      font-size: 30px;
      line-height: 50px;
      font-weight: bold;
      font-family: helvetica;
      border-radius: inherit;
      position: relative;
      z-index: 1;
    }
    
    [data-progress]:after {
      content: '';
      background: #E2534B;
      position: absolute;
      top: 100%;
      left: 0;
      right: 0;
      height: 60px;
      transform-origin: top center;
      z-index:0;
      border-radius:0 0 180px 180px ;
      box-shadow: 0 0 5px black;
    }
    
    [data-progress="20"]:after {
      transform: rotate(36deg);
    }
    
    [data-progress="50"]:after {
      transform: rotate(90deg);
    }
    
    [data-progress="80"]:after {
      transform: rotate(144deg);
    }
    
    [data-progress="100"]:after {
      transform: rotate(180deg);
    }
    [data-progress="..."]:after {
      animation:spin 4s infinite linear;
    }
    
    @keyframes spin {
      to {
      transform: rotate(360deg);
    }
    }
    <div>
      <p data-progress="20">20</p>
      <p>progress 1 </p>
    </div>
    
    <div>
      <p data-progress="50">50</p>
      <p>progress 2 </p>
    </div>
    <div>
      <p data-progress="80">80</p>
      <p>progress 3 </p>
    </div>
    <div>
      <p data-progress="100">100</p>
      <p>progress 4 </p>
    </div>
    <div>
      <p data-progress="...">In progress</p>
      <p>loading</p>
    </div>

    【讨论】:

      【解决方案2】:

      你可以看一个例子on this post

      我把它简化了给你看。 You can see it here.

      你可以使用这个rotate值来增加或减少圆圈:

      .circle[data-anim~=right] {
        -webkit-transform: rotate(50deg);
      }
      

      【讨论】:

      • 请解释一下以了解这是什么...
      • 我用我在 SO 上找到的一个简单示例编辑了我的帖子。我让你试试看,搜索你可能还不知道的属性,如果你想的话,可以问问题:)