【HTML】步骤进度条组件实现

HTML步骤进度条组件实现

效果图

效果图

思路

  1. 分份:

有多少个步骤就可以分成多少分,每份宽度应该为100%除以步骤数,故以上效果图中的每份宽度应该为25%,每份用一个div。

  1. 每份:

每份中可以看成是三个元素,一个使用span显示序号,一个使用div显示进度线,最后一个使用span显示文字,三者皆水平居中(或者本质上显示进度线的宽度为100%不需要居中,文本使用文本居中即可,序号div让其父div使用弹性居中布局),显示序号的写在显示进度线的后面(确保图层更高,序号不被覆盖),显示序号的和显示进度线的重合在同一行(显示序号使用absolute定位,弹性居中布局),显示文字的另起新行。

  1. 两边:

以上内容完成后分别在序号1和序号4的左边和右边会有多出来的背景,可以使用渐变效果,让其中一半显示显示背景色,另一半显示透明色即可。

  1. 已完成进度效果:

更改背景色即可,但要注意两边的效果

代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>步骤进度条</title>
    <style>
        /* 使用弹性居中布局让所有分部居中水平排列 */
        .steps {
            padding: 20px;
            display: flex;
            justify-content: center;
        }

        /* 进度线宽,4份,25% */
        .step {
            width: 25%;
            height: 20px;
        }

        /* 进度线和序号,使用弹性居中布局让序号和进度线居中 */
        .step-progress {
            display: flex;
            justify-content: center;
        }

        /* 文本居中 */
        .step-text {
            width: 100%;
            margin-top: 10px;
            text-align: center;
        }

        /* 进度线 */
        .step-line {
            width: 100%;
            height: 9px;
            margin-top: 7px;
            background-color: #cccccc;
        }

        /* 数字序号 */
        .step-num {
            width: 18px;
            height: 18px;
            line-height: 17px;
            /* 圆角背景 */
            border-radius: 50%;
            color: #ffffff;
            font-size: 16px;
            /* 序号居中显示 */
            text-align: center;
            background-color: #cccccc;
            border: 2px solid #cccccc;
            /* 使用相对于父元素定位,强行回到原来的位置 */
            position: absolute;
        }

        /* 使用渐变背景处理两边 */
        .step-progress.right div{
            background: linear-gradient(to right, #cccccc 0%, #cccccc 50%, transparent 51%, transparent 100%);
        }

        .step-progress.left div{
            background: linear-gradient(to left, #cccccc 0%, #cccccc 50%, transparent 51%, transparent 100%);
        }

        /* 完成效果 */
        .step-progress.done div{
            background: #4395ff;
        }
        .step-progress.done span{
            background-color: #4395ff;
            border: 2px solid #4395ff;
        }

        /* 完成效果左右两边特制 */
        .step-progress.right.done div{
            background: linear-gradient(to right, #4395ff 0%, #4395ff 50%, transparent 51%, transparent 100%);
        }

        .step-progress.left.done div{
            background: linear-gradient(to left, #4395ff 0%, #4395ff 50%, transparent 51%, transparent 100%);
        }
    </style>
</head>

<body>
    <!-- 步骤进度条 -->
    <div class="steps">
        <!-- 第一部分 -->
        <div class="step">
            <div class="step-progress left done">
                <div class="step-line"></div>
                <span class="step-num">1</span>
            </div>
            <div class="step-text">
                <span>选场</span>
            </div>
        </div>
        <!-- 第二部分 -->
        <div class="step">
            <div class="step-progress done">
                <div class="step-line"></div>
                <span class="step-num">2</span>
            </div>
            <div class="step-text">
                <span>选座</span>
            </div>
        </div>
        <!-- 第三部分 -->
        <div class="step">
            <div class="step-progress">
                <div class="step-line"></div>
                <span class="step-num">3</span>
            </div>
            <div class="step-text">
                <span>付款</span>
            </div>
        </div>
        <!-- 第四部分 -->
        <div class="step">
            <div class="step-progress right">
                <div class="step-line"></div>
                <span class="step-num">4</span>
            </div>
            <div class="step-text">
                <span>观影</span>
            </div>
        </div>
    </div>
</body>

</html>

使用

  1. 更改分段数量:

改step中的宽占比和下面第n部分的数量即可

  1. 更改完成分段:

在step-progress中加入done即可

参考资料

  1. 【CSS3实现背景色一半红一半白】https://blog.csdn.net/qq_40951289/article/details/106928900

  2. 【Steps步骤条, Bootstrap风格步骤条】https://www.cnblogs.com/romayn/p/9036174.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
复杂分段进度条组件实现可以分为以下几个步骤: 1. 设计进度条的外观和布局,包括进度条的长度、宽度、颜色、分段数、分段颜色等。 2. 定义进度条组件的数据模型,包括每个分段的当前进度、目标进度、是否完成等信息。 3. 实现组件的渲染函数,根据数据模型渲染出进度条的外观。 4. 实现组件的交互逻辑,包括鼠标点击、拖动等操作,根据用户的操作更新数据模型,并重新渲染进度条。 5. 可以考虑添加动画效果,使进度条的变化更加平滑。 下面是一个简单的示例代码,实现了一个具有三段的分段进度条组件: ```html <template> <div class="progress-bar"> <div v-for="(segment, index) in segments" :key="index" :style="{ width: segmentWidth + '%', backgroundColor: segment.color }" class="progress-segment"> <div :style="{ width: segment.progress + '%' }" class="progress-bar-inner" /> </div> </div> </template> <script> export default { data() { return { segments: [ { progress: 0, target: 30, color: 'red' }, { progress: 0, target: 50, color: 'yellow' }, { progress: 0, target: 20, color: 'green' } ] }; }, computed: { totalProgress() { return this.segments.reduce((sum, segment) => sum + segment.progress, 0); }, segmentWidth() { return 100 / this.segments.length; } }, methods: { handleClick(event, index) { const rect = event.target.getBoundingClientRect(); const x = event.clientX - rect.left; const progress = Math.round(x / rect.width * 100); this.segments[index].progress = Math.min(progress, 100); }, handleDrag(event, index) { const rect = event.target.getBoundingClientRect(); const x = event.clientX - rect.left; const progress = Math.round(x / rect.width * 100); this.segments[index].progress = Math.min(progress, 100); } } }; </script> <style scoped> .progress-bar { display: flex; height: 20px; background-color: lightgray; } .progress-segment { position: relative; flex-grow: 1; } .progress-bar-inner { position: absolute; top: 0; bottom: 0; left: 0; background-color: white; } </style> ``` 在这个示例中,我们使用了 Vue.js 框架,通过定义数据模型和渲染函数来实现进度条的分段和颜色。我们还添加了点击和拖动事件来实现用户交互,并使用计算属性来计算总进度和分段宽度。当然,这只是一个简单的示例,实际的实现可能还需要考虑更多的功能和细节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉米子禾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值