使用css3制作一个简易的环形进度条

css:

  section {
            width: 2rem;
            height: 2rem;
            position: relative;
            margin: 2rem;
        }

        .wrap,
        .circle,
        .percent {
            position: absolute;
            width: 2rem;
            height: 2rem;
            border-radius: 50%;
        }

        .wrap {
            top: 0;
            left: 0;
            background: #ccc;

        }

        .circle {
            box-sizing: border-box;
            -webkit-box-sizing: border-box;
            -ms-box-sizing: border-box;
            -moz-box-sizing: border-box;
            -o-box-sizing: border-box;
            border: 1px solid #ccc;
            clip: rect(0, 2rem, 2rem, 1rem);
            /* 把圆剪切为只有右边的灰色半圆 */
        }

        .clip-auto {
            clip: rect(auto, auto, auto, auto);
        }

        .percent {
            box-sizing: border-box;
            -webkit-box-sizing: border-box;
            -ms-box-sizing: border-box;
            -moz-box-sizing: border-box;
            -o-box-sizing: border-box;
            top: -1px;
            left: -1px;
        }

        .left {
            border: 0.1rem solid #ff6300;
            clip: rect(0, 1rem, 2rem, 0);
            /* 把圆剪切为只有左边的橙色半圆,因为left圆是circle圆的子圆,
            所以circle圆剪切为只有右边的半圆时,left圆无法显示 */
        }

        .right {
            border: 0.1rem solid #FF6300;
            clip: rect(0, 2rem, 2rem, 1rem);
            /* 把圆剪切为只有右边的橙色半圆 */
        }

        .wth0 {
            width: 0;
        }

        .num {
            position: absolute;
            box-sizing: border-box;
            -webkit-box-sizing: border-box;
            -ms-box-sizing: border-box;
            -moz-box-sizing: border-box;
            -o-box-sizing: border-box;
            width: 1.8rem;
            height: 1.8rem;
            line-height: 1.8rem;
            text-align: center;
            font-size: 0.5rem;
            left: 0.1rem;
            top: 0.1rem;
            border-radius: 50%;
            color: #FF6300;
            background: white;
            z-index: 1;
            }

html:

<!--进度0%-->
    <section>
        <div class="wrap">
            <!--大于180,则class=clip-auto circle,否则:circle-->
            <div class="circle">
                <!--度数为:当前进度*3.6-->
                <div class="percent left" style= "-webkit-transform:rotate(0deg);"></div>
                <!--大于180,则class=percent right,否则为percent right wth0-->
                <div class='percent right wth0'></div>
            </div>
            <div class="num">
                <span>0</span>%
            </div>
        </div>
    </section>

    <!--进度30%-->
    <section>
        <div class="wrap">
            <!--大于180,则class=clip-auto circle,否则:circle-->
            <div class="circle">
                <!--度数为:当前进度*3.6-->
                <div class="percent left" style="-webkit-transform:rotate(108deg);"></div>
                <!--大于180,则class=percent right,否则为percent right wth0-->
                <div class='percent right wth0'></div>
            </div>
            <div class="num">
                <span>30</span>%
            </div>
        </div>
    </section>

    <!--进度50%-->
    <section>
        <div class="wrap">
            <!--大于180,则class=clip-auto circle,否则:circle-->
            <div class="clip-auto circle">
                <!--度数为:当前进度*3.6-->
                <div class="percent left" style="-webkit-transform:rotate(180deg);"></div>
                <!--大于180,则class=percent right,否则为percent right wth0-->
                <div class='percent right'></div>
            </div>
            <div class="num">
                <span>50</span>%
            </div>
        </div>
    </section>

    <!--进度70%-->
    <section>
        <div class="wrap">
            <!--大于180,则class=clip-auto circle,否则:circle-->
            <div class="clip-auto circle">
                <!--度数为:当前进度*3.6-->
                <div class="percent left" style="-webkit-transform:rotate(252deg);"></div>
                <!--大于180,则class=percent right,否则为percent right wth0-->
                <div class='percent right'></div>
            </div>
            <div class="num">
                <span>70</span>%
            </div>
        </div>
    </section>

    <!--进度100%-->
    <section>
        <div class="wrap">
            <!--大于180,则class=clip-auto circle,否则:circle-->
            <div class="clip-auto circle">
                <!--度数为:当前进度*3.6-->
                <div class="percent left" style="-webkit-transform:rotate(360deg);"></div>
                <!--大于180,则class=percent right,否则为percent right wth0-->
                <div class='percent right'></div>
            </div>
            <div class="num">
                <span>100</span>%
            </div>
        </div>
    </section>

javaScript:

 // 自动设置font-zise
        (function (doc, win) {
            var docEl = doc.documentElement,
                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
                recalc = function () {
                    var clientWidth = docEl.clientWidth;
                    if (!clientWidth) return;
                    docEl.style.fontSize = parseInt(20 * (clientWidth / 320)) + 'px';
                };
            if (!doc.addEventListener) return;
            win.addEventListener(resizeEvt, recalc, false);
            doc.addEventListener('DOMContentLoaded', recalc, false);
        })(document, window);

结果是:
在这里插入图片描述
版权声明:本文为CSDN博主「帆酱」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41187842/article/details/80525157

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值