进度条是网页中常用的交互组件,能够直观展示任务进度、加载状态等信息,在文件上传、页面加载、表单提交等场景中都有广泛应用。实现进度条的方式有多种,既可以使用HTML原生标签快速完成,也可以通过自定义元素实现更个性化的效果,再配合JavaScript就能实现动态更新。

一、使用原生progress标签实现基础进度条
HTML5提供了原生的<progress>标签,专门用于展示任务的完成进度,不需要额外写太多CSS就能快速实现基础效果。
该标签有两个核心属性:
- value:当前进度值,取值范围在0到max之间
- max:进度条的最大值,默认值为1
基础使用示例代码如下:
<!-- 基础进度条,最大值100,当前值30 --> <progress value="30" max="100"></progress> <p>当前进度:30%</p>
如果需要修改原生进度条的样式,可以通过CSS针对<progress>标签的不同状态进行设置,不同浏览器的样式适配略有差异,以下是通用样式示例:
/* 设置进度条整体宽度和高度 */
progress {
width: 300px;
height: 20px;
border: 1px solid #ccc;
border-radius: 10px;
overflow: hidden;
}
/* 设置进度条背景色 */
progress::-webkit-progress-bar {
background-color: #f0f0f0;
border-radius: 10px;
}
/* 设置进度条已完成部分的颜色 */
progress::-webkit-progress-value {
background-color: #409eff;
border-radius: 10px;
transition: width 0.3s ease;
}
/* 兼容Firefox浏览器 */
progress::-moz-progress-bar {
background-color: #409eff;
border-radius: 10px;
}二、自定义div实现个性化进度条
如果原生标签的样式无法满足设计需求,可以通过两个嵌套的div元素自定义进度条,外层作为进度条容器,内层作为进度填充部分,可控性更强。
HTML结构代码如下:
<div class="progress-container">
<div class="progress-fill" id="customProgress"></div>
</div>
<p>当前进度:<span id="progressText">0%</span></p>对应的CSS样式代码:
/* 进度条容器样式 */
.progress-container {
width: 300px;
height: 20px;
background-color: #f0f0f0;
border-radius: 10px;
overflow: hidden;
border: 1px solid #ddd;
}
/* 进度填充部分样式 */
.progress-fill {
height: 100%;
width: 0%; /* 初始宽度为0 */
background-color: #67c23a;
border-radius: 10px;
transition: width 0.3s ease;
}三、通过JavaScript实现进度条动态更新
无论是原生progress标签还是自定义div进度条,都可以通过JavaScript动态修改进度值,实现进度随任务推进自动更新的效果。
1. 原生progress标签动态更新
代码如下:
// 获取progress元素
const progressBar = document.querySelector('progress');
// 获取显示进度的文本元素
const progressDesc = document.querySelector('p');
let currentValue = 30; // 初始进度值
// 模拟进度更新,每1秒增加10
const timer = setInterval(() => {
currentValue += 10;
if (currentValue > 100) {
currentValue = 100;
clearInterval(timer); // 进度到100%时停止定时器
}
// 更新progress的value属性
progressBar.value = currentValue;
// 更新文本内容
progressDesc.textContent = `当前进度:${currentValue}%`;
}, 1000);2. 自定义div进度条动态更新
代码如下:
// 获取自定义进度条填充元素和文本元素
const customProgress = document.getElementById('customProgress');
const progressText = document.getElementById('progressText');
let currentProgress = 0; // 初始进度
// 模拟进度更新,每800毫秒增加5
const customTimer = setInterval(() => {
currentProgress += 5;
if (currentProgress > 100) {
currentProgress = 100;
clearInterval(customTimer);
}
// 更新填充部分的宽度
customProgress.style.width = `${currentProgress}%`;
// 更新文本显示
progressText.textContent = `${currentProgress}%`;
}, 800);四、两种实现方式对比
以下是两种进度条实现方式的特点对比:
| 实现方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 原生progress标签 | 代码量少,原生支持,语义化好 | 样式自定义难度高,不同浏览器样式差异大 | 快速实现基础进度展示,对样式要求不高的场景 |
| 自定义div进度条 | 样式完全可控,兼容性好,可扩展性强 | 需要自己写HTML和CSS结构,代码量稍多 | 需要个性化样式,复杂进度展示的场景 |
实际项目中可以根据需求选择合适的实现方式,如果需要快速上线且样式简单,优先选择原生标签;如果需要高度定制样式,自定义div的方式会更合适。动态更新部分只需要根据任务的实际进度修改对应的属性值即可,逻辑非常简单。
HTMLprogress_barCSSJavaScript动态更新修改时间:2026-06-07 06:00:27