【问题标题】:With a SVG circle, how to position the starting point?用一个SVG圆,如何定位起点?
【发布时间】:2017-12-13 11:01:48
【问题描述】:

我正在努力在反应中创建一个 SVG 圆形进度指示器...这是我的输出:

CODEPEN

问题是我需要红色笔触从顶部开始,而不是当前的 90% 角度...是否可以添加一些 CSS 来重新定位红色笔触以从顶部开始?

仅供参考,我正在使用以下组件来响应呈现此 HTML:https://github.com/wmartins/react-circular-progress/blob/gh-pages/src/js/components/CircularProgress.jsx.js

codepen 源码如下

html

<svg class="CircularProgress" width="50" height="50" viewBox="0 0 50 50">
   <circle class="CircularProgress-Bg" cx="25" cy="25" r="24" stroke-width="2px"></circle>
   <circle class="CircularProgress-Fg" cx="25" cy="25" r="24" stroke-width="2px" style="stroke-dasharray: 150.796; stroke-dashoffset: 125.161;"></circle>
   <text class="CircularProgress-Text" x="25" y="25" dy=".4em" text-anchor="middle">17%</text>
</svg>

css

.CircularProgress-Bg,
.CircularProgress-Fg {
    fill: none;
}

.CircularProgress-Bg {
    stroke: #CCC;
}

.CircularProgress-Fg {
    transition: stroke-dashoffset .5s ease-in-out;
    stroke: red;
}

.CircularProgress-Text {
    font-size: 15px;
    font-weight: 600;
    fill: rgba(255,255,255,0.9);
    transform: translate(0 50%);
}

【问题讨论】:

    标签: javascript css reactjs svg


    【解决方案1】:

    您可以使用transform,添加transform="rotate(-90 25 25)",它将从顶部开始

    .CircularProgress-Bg,
    .CircularProgress-Fg {
        fill: none;
    }
    
    .CircularProgress-Bg {
        stroke: #CCC;
    }
    
    .CircularProgress-Fg {
        transition: stroke-dashoffset .5s ease-in-out;
        stroke: red;
    }
    
    .CircularProgress-Text {
        font-size: 15px;
        font-weight: 600;
        fill: rgba(255,255,255,0.9);
        transform: translate(0 50%);
    }
    <svg class="CircularProgress" width="50" height="50" viewBox="0 0 50 50">
    
       <circle class="CircularProgress-Bg" cx="25" cy="25" r="24" stroke-width="2px"></circle>
       <circle transform="rotate(-90 25 25)" class="CircularProgress-Fg" cx="25" cy="25" r="24" stroke-width="2px" style="stroke-startOffest: 50%;stroke-dasharray: 150.796; stroke-dashoffset: 125.161;"></circle>
       <text class="CircularProgress-Text" x="25" y="25" dy=".4em" text-anchor="middle">17%</text>
    </svg>

    如果使用 CSS,您可以旋转 svg 元素而不是 circle(根据其形状可能会也可能不会)

    .CircularProgress {
        transform: rotate(-90deg);
    }
    
    .CircularProgress-Bg,
    .CircularProgress-Fg {
        fill: none;
    }
    
    .CircularProgress-Bg {
        stroke: #CCC;
    }
    
    .CircularProgress-Fg {
        transition: stroke-dashoffset .5s ease-in-out;
        stroke: red;
    }
    
    .CircularProgress-Text {
        font-size: 15px;
        font-weight: 600;
        fill: rgba(255,255,255,0.9);
        transform: translate(0, 50%);
    }
    <svg class="CircularProgress" width="50" height="50" viewBox="0 0 50 50">
       <circle class="CircularProgress-Bg" cx="25" cy="25" r="24" stroke-width="2px"></circle>
       <circle class="CircularProgress-Fg" cx="25" cy="25" r="24" stroke-width="2px" style="stroke-dasharray: 150.796; stroke-dashoffset: 125.161;"></circle>
       <text class="CircularProgress-Text" x="25" y="25" dy=".4em" text-anchor="middle">17%</text>
    </svg>

    【讨论】:

    • 太好了。谢谢。我试图通过 CSS 添加,但它不起作用。我不知道你可以将它直接应用到
    • @AnnaSm 如果要使用 CSS,您需要旋转 svg 元素(根据其形状可能会也可能不会):codepen.io/anon/pen/OgBrGo
    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2016-06-05
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多