0

0

HTML如何制作进度条?progress标签怎么用?

月夜之吻

月夜之吻

发布时间:2025-08-06 15:27:01

|

1038人浏览过

|

来源于php中文网

原创

progress标签的属性主要有value和max,value表示当前任务完成的数值,max表示任务总量,二者共同决定进度条的完成百分比;2. 当value存在时显示为确定性进度条,省略value则通常显示为不确定性加载状态;3. 可通过javascript动态更新value属性实现进度变化;4. css自定义样式需借助浏览器前缀伪元素如::-webkit-progress-value和::-moz-progress-bar,因影子dom限制难以直接控制内部结构;5. 推荐在语义化、可访问性优先或简单场景下使用progress标签,而在需要高度定制样式、兼容老旧浏览器或多阶段非线性进度时,应选用div结合css/js的方案。

HTML如何制作进度条?progress标签怎么用?

在HTML中制作进度条,最直接也最符合语义化的方式是使用

标签。它提供了一个浏览器原生的元素,用于展示任务的完成进度,无论是确定性的百分比还是不确定性的加载状态。

解决方案

使用

标签来创建进度条是首选方案。这个标签有两个核心属性:
value
max

  • value
    :表示当前已完成的进度值。
  • max
    :表示总的进度值,即任务的上限。

当这两个属性都存在时,

标签会显示一个确定性的进度条,比如“50%完成”。如果只存在
max
而没有
value
,或者两者都没有,浏览器通常会显示一个不确定性的进度指示器,比如一个旋转的加载动画,表示任务正在进行中,但具体进度未知。

立即学习前端免费学习笔记(深入)”;

一个基本的确定性进度条可以这样写:

这会显示一个填充了一半的进度条。

如果想表示一个不确定性的加载状态,可以这样:

或者

后者在某些浏览器中可能依然显示为确定性进度条,但没有填充。通常,省略

value
属性是表示不确定状态的标准做法。

当然,光有这个标签还不够,我们还得让它动起来,或者说,让它的

value
属性随着任务的进展而变化。这通常需要结合JavaScript来实现。

文件上传进度:

上面这个简单的例子模拟了一个文件上传过程,通过JavaScript定时更新

标签的
value
属性,从而让进度条动起来。

progress
标签的属性有哪些,它们各自有什么作用?

说实话,

标签的属性并不多,但它们各自的作用却很关键,决定了进度条的行为和显示方式。最主要的,正如前面提到的,就是
value
max

  • value
    属性:这个属性代表了任务的当前完成量。它的值必须是一个有效的浮点数,且必须在0到
    max
    之间(如果
    max
    存在的话)。如果
    value
    大于
    max
    ,浏览器会将其视为等于
    max
    ;如果小于0,则视为0。当
    value
    属性存在时,进度条会显示为“确定性”模式,即你能看到一个明确的完成百分比。例如,
    value="30"
    max="100"
    表示完成了30%。

  • max
    属性:这个属性定义了任务的总量或者说完成任务所需的最大值。它的值也必须是一个有效的浮点数,且必须大于0。如果
    max
    属性缺失或者值不合法,默认情况下会假定为
    1.0
    。当
    max
    属性存在但
    value
    属性缺失时,理论上进度条应该显示为“不确定性”模式(通常是动画),表示任务正在进行但具体进度未知。不过,不同浏览器对这种组合的渲染可能略有差异,所以为了明确表示不确定状态,通常是直接省略
    value
    max

    学习导航
    学习导航

    学习者优质的学习网址导航网站

    下载

举个例子,假设我们有一个加载条,总共有200个资源需要加载:


加载中... 66%


数据传输中...

这里值得一提的是,虽然在

标签内部可以放置文本内容(比如“加载中... 66%”),但这些文本内容通常只在浏览器不支持
标签时才会显示。现代浏览器会忽略这些内容,直接渲染进度条。所以,如果你需要显示进度百分比或状态文本,通常需要额外添加一个
或其他元素,并用JavaScript来更新其内容,以确保兼容性和灵活性。

从辅助功能(Accessibility)的角度看,

标签本身就具有很好的语义化,屏幕阅读器能够识别并正确地向用户传达这是一个进度指示器。这比我们手动用
aria-*
属性来模拟要省心得多。

如何用CSS美化或自定义
progress
标签的样式?

这部分内容,说实话,才是真正让人头疼的地方。

标签的默认样式在不同浏览器之间差异很大,而且直接用CSS去美化它,会遇到不少阻碍,因为它的内部结构被“影子DOM”(Shadow DOM)封装了。这意味着你不能像操作普通
那样,简单地给它加个
background-color
border-radius
就能搞定一切。

为了自定义

的样式,我们通常需要利用一些特殊的CSS伪元素,而这些伪元素往往是浏览器厂商特定的:

  • WebKit/Blink (Chrome, Safari, Edge基于Chromium)

    • ::-webkit-progress-bar
      : 用来样式化进度条的背景轨道。
    • ::-webkit-progress-value
      : 用来样式化进度条的填充部分。
  • Mozilla (Firefox)

    • ::-moz-progress-bar
      : 用来样式化进度条的填充部分。Firefox没有单独的伪元素来样式化背景轨道,轨道通常是
      元素本身的背景。
  • Microsoft Edge (旧版Edge,现在已转向Chromium)

    • 旧版Edge使用
      ::-ms-fill
      ::-ms-track
      ,但随着Edge转向Chromium,这些已经不再是主流。

所以,如果你想让进度条在不同浏览器中看起来一致,你需要写一堆带有不同前缀的CSS规则。

/* 统一设置进度条的整体高度和背景 */
progress {
  -webkit-appearance: none; /* 移除默认外观 */
  -moz-appearance: none;
  appearance: none; /* 这是一个新属性,但兼容性还不如前缀 */
  width: 100%;
  height: 20px;
  background-color: #f0f0f0; /* 默认背景,Firefox会用这个 */
  border-radius: 10px;
  overflow: hidden; /* 确保填充部分不会超出圆角 */
}

/* WebKit/Blink 浏览器样式 */
progress::-webkit-progress-bar {
  background-color: #f0f0f0; /* 进度条轨道背景 */
  border-radius: 10px;
}

progress::-webkit-progress-value {
  background-color: #4CAF50; /* 进度条填充颜色 */
  border-radius: 10px;
  transition: width 0.3s ease-in-out; /* 添加动画效果 */
}

/* Mozilla Firefox 浏览器样式 */
progress::-moz-progress-bar {
  background-color: #4CAF50; /* Firefox直接设置填充颜色 */
  border-radius: 10px;
  transition: width 0.3s ease-in-out;
}

/* 针对不确定状态的样式(可选,通常浏览器有默认动画) */
progress:not([value])::-webkit-progress-bar {
  /* 可以为不确定状态设置不同的背景或动画 */
}
progress:not([value])::-webkit-progress-value {
  /* 针对不确定状态的填充样式,例如条纹动画 */
}
/* Firefox 类似 */
progress:not([value])::-moz-progress-bar {
  /* 针对不确定状态的填充样式 */
}

这只是一个基础的例子。想实现更复杂的动画、渐变色或者更精细的控制,

标签的局限性就会凸显出来。很多时候,前端开发者为了追求像素级的完美和跨浏览器的一致性,会选择放弃
标签,转而使用一个普通的
元素,配合CSS和JavaScript来完全自定义进度条。虽然这样失去了语义化优势,但获得了无限的样式自由。

什么时候应该使用
progress
标签,什么时候用其他方式更合适?

这是一个非常实用的问题,因为它直接关系到我们开发时的技术选型。

什么时候应该优先使用

标签?

  • 语义化优先:当你需要一个清晰、明确的“进度”指示器时,
    是最佳选择。它告诉浏览器和辅助技术(如屏幕阅读器):“嘿,这里有个任务正在进行中,这是它的完成度。”这对于网站的可访问性(Accessibility)来说非常重要。
  • 简单场景:如果你对进度条的样式要求不高,或者可以接受浏览器默认样式,那么
    标签无疑是最省心、最快捷的方案。它的实现成本极低。
  • 确定性与不确定性:无论是需要显示精确百分比(
    value
    max
    都存在),还是仅仅表示“正在加载中”(只存在
    max
    或两者都缺失),
    都能很好地胜任。
  • 性能考虑:原生HTML元素通常比复杂的JavaScript/CSS动画更高效。

什么时候考虑使用其他方式(比如

div
+ CSS/JS)更合适?

  • 高度定制化样式:这是最常见的原因。如果你的设计稿要求进度条有复杂的渐变、纹理、内部文字、特殊的动画效果,或者需要与品牌视觉高度统一,那么
    标签的样式限制会让你非常痛苦。使用
    div
    配合CSS(如
    linear-gradient
    keyframes
    动画)和JavaScript来控制宽度,会提供更大的自由度。
  • 兼容性要求极高:尽管现代浏览器对
    的支持度很好,但如果你的项目需要兼容非常老旧的浏览器,或者你无法忍受不同浏览器间哪怕是细微的样式差异,那么完全自定义的
    div
    方案可能更稳妥。
  • 非线性或多阶段进度
    标签本质上是线性的,从0到100%。如果你的“进度”是一个多阶段、非线性的流程(例如,一个多步表单,每步完成后有不同的UI反馈,而不是一个简单的百分比),或者需要显示多个并行的进度条,那么自定义
    div
    的灵活性会更高。
  • 集成第三方库:如果你正在使用一个前端框架(如React, Vue, Angular)或UI组件库,它们通常会提供自己的进度条组件。这些组件往往是基于
    div
    等通用元素构建的,并且已经处理好了样式和交互逻辑,直接使用它们会比自己去折腾原生
    更高效。

总的来说,选择哪种方式取决于你的具体需求:是追求语义化和简单快速,还是追求极致的视觉效果和跨浏览器一致性。很多时候,我个人会先尝试

,如果发现样式定制实在太折磨人,才会退而求其次,转向
div
方案。毕竟,时间宝贵,没必要在样式兼容性上耗费太多精力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

838

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

744

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1421

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

381

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

941

2025.04.24

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

397

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3.1万人学习

Python 并发编程实战
Python 并发编程实战

共12课时 | 0.7万人学习

php初学者入门课程
php初学者入门课程

共10课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号