LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

90%的人分不清 HTML5 的<meter> 和 <progress>?看这篇就够了

admin
2026年4月22日 17:42 本文热度 38

本文全面对比 HTML5 的 <progress> 与 <meter> 元素,涵盖核心定义、属性差异(包括 low、high、optimum 的颜色逻辑)、语义适用场景、浏览器默认样式、CSS 定制、可访问性实践及降级方案。通过大量代码示例、动态交互和决策流程图,帮助你在实际项目中精准选择并优雅实现进度指示或测量显示。

在 HTML5 中,<progress> 和 <meter> 是两个容易混淆的进度指示元素。它们都以条形图的形式展示某种“量”,但背后的语义、用途和可用属性却截然不同。选错元素不仅会误导用户,还会影响页面的无障碍体验。本文将带你彻底理解这两个元素的异同,并通过丰富的示例和实用建议,帮助你在合适的场景做出正确的选择。

一、核心定义与本质区别


元素

定义

本质

<progress>

表示 任务完成进度,强调“正在进行的过程”

动态、临时、面向未来完成度

<meter>

表示 已知范围内的标量测量值,强调“静态的测量结果”

相对固定、持续显示、面向当前状态

简单来说:如果任务会做完,用 <progress>;如果数值永远在一个范围内展示状态,用 <meter>。

二、属性详细对比


属性

<progress>

<meter>

说明

value

已完成量(缺省时进入不确定状态)

当前测量值(可选,默认 0)

 两者都支持浮点数

max

最大值,默认1

最大值,默认1

值必须大于 0

min

❌ 不支持

✅ 最小值,默认 0

可定义测量起点

low

❌ 不支持

✅ 低值范围的上限

小于 low 值为 低值范围

high

❌ 不支持

✅ 高值范围的下限

大于 high 值为 高值范围

optimum

❌ 不支持

✅ 最佳值

影响颜色分区逻辑

注意:<progress> 没有 min,因为进度天然从 0 开始;<meter> 的所有属性均为可选,且 min 可以大于 max(规范允许,但不推荐)。

三、语义与适用场景


<progress> 典型场景
  • 文件上传 / 下载进度。

  • 多步骤表单的完成度。

  • 视频 / 音频缓冲或播放进度。

  • 页面资源加载进度。

  • 任何有明确终点的任务过程。

<meter>典型场景
  • 磁盘 / 内存使用率。

  • 电池电量。

  • 考试分数(0~100 分)。

  • 健康指标(血压、心率范围)。

  • 网络信号强度(0~100%)。

  • 投票支持率(范围 0~1)。


四、视觉表现与默认样式差异


  • <progress>:绿色填充条(不同浏览器略有差异)。不确定状态下显示为连续的左右移动光斑或反复循环的条纹动画。

  • <meter>:根据数值与 low、high、optimum 的关系,自动显示 红、黄、绿三段颜色:

    • 绿色:最优区间(optimum所在的值范围区间)。

    • 黄色:相邻区间(与optimum相邻的值范围区间)。

    • 红色:相对区部(与optimum相对的值范围区间)。

<meter> 的颜色逻辑

有关 <meter> 元素的颜色逻辑,详情请参阅另一篇博文《

HTML <meter> 元素完全指南:属性、视觉语义、样式定制与无障碍实践

Sharing Pi,公众号:Sharing PiHTML <meter> 元素完全指南:属性、视觉语义、样式定制与无障碍实践

》中「视觉逻辑:颜色是如何自动生成的?」章节。

<!-- optimum 在低范围(10),高范围(28-40)显示红色 --><meter min="0" max="40" low="18" high="28" optimum="10" value="35"></meter>
<!-- optimum 在高范围(35),低范围(0-18)显示红色 --> <meter min="0" max="40" low="18" high="28" optimum="35" value="10"></meter>
<!-- optimum 在正常范围(24),无红色 --><meter min="0" max="40" low="18" high="28" optimum="24" value="4"></meter>
<!-- optimum 在正常范围(24),无红色 值在目标区域,显示绿色--><meter min="0" max="40" low="18" high="28" optimum="24" value="25"></meter>

五、<progress> 的不确定状态


当 <progress> 没有 value 属性(或 value 缺失)时,进入不确定状态:

<progress>加载任务中...</progress>

  • 外观:连续动画条,不显示具体百分比。

  • 适用场景:等待服务器响应、执行时间未知的批量操作、没有进度反馈的任务。


六、可访问性(A11Y)注意事项


  1. 始终提供文字后备:两个元素内部的内容(如 70%)会在不支持它们的浏览器中显示,同时也辅助屏幕阅读器。

  2. 使用 aria-label 或关联 <label>

<label for="disk-meter">系统磁盘使用率</label><meter id="disk-meter" value="0.75">75%</meter>

  1. <progress> 可搭配 aria-valuetext:当进度不是简单百分比时(如“步骤 3/5”)。

  2. 避免用 <meter> 表示任务进度:屏幕阅读器会将其识别为“测量条”,而非“进度条”,语义错误。


七、浏览器支持与降级方案


元素

Chrome

Firefox

Safari

 Edge

移动端

<progress>

<meter>

降级:在不支持的老旧浏览器(如 IE < 10)中,元素会退化为内联文本,显示内部文字。因此务必在两个元素中写入描述性内容。

八、选择指南(决策流程图)


是否需要表示一个会完成的任务?├─ 是 → 使用 <progress>│        ├─ 已知进度 → 设置 value / max│        └─ 未知进度 → 不设置 value(不确定状态)└─ 否 → 数值是否在一个固定范围内,且代表测量状态?         │         ├─ 是 → 使用 <meter>         │        ├─ 需要警告区域 → 设置 low / high         │        └─ 需要最优值倾向 → 设置 optimum         │         └─ 否 → 考虑其他元素(如 div + CSS 自定义图表)

九、代码示例


基础示例

<!-- progress:确定进度 --><p>文件上传进度:</p><progress value="45" max="100">45%</progress>
<!-- progress:不确定进度 --><p>正在连接服务器...</p><progress>请稍候</progress>
<!-- meter:基本用法 --><p>电量:</p><meter value="0.68">68%</meter>
<!-- meter:完整范围 + 阈值 --><p>磁盘使用率:</p><meter value="85" min="0" max="100" low="30" high="70" optimum="20">  85% (高使用率)</meter>

高级样式定制(跨浏览器)

自定义 progress 样式

/* 自定义 progress 样式 */progress {  width300px;  height24px;  border-radius14px;  overflow: hidden;}progress::-webkit-progress-bar {  background-color#e0e0e0;  border-radius14px;}progress::-webkit-progress-value {  background-color#2196f3;  border-radius14px;  transition: width 0.2s ease;}progress::-moz-progress-bar {  background-color#2196f3;  border-radius14px;}

自定义 meter 样式

meter {  width300px;  height24px;  border-radius14px;}meter::-webkit-meter-bar {  background-color#e0e0e0;  border-radius14px;}meter::-webkit-meter-optimum-value {  background-color#4caf50;}meter::-webkit-meter-suboptimum-value {  background-color#ff9800;}meter::-webkit-meter-low-value {  background-color#f44336;}/* Firefox 支持 */meter::-moz-meter-bar {  border-radius14px;}

总结


特性

<progress>

<meter>

核心语义

任务进度(动态)

测量范围(静态)

是否支持不确定状态

✅ 支持(缺省 value 属性时)

❌ 不支持

额外范围属性

仅 max

min,low,high,optimum

颜色含义

完成百分比(通常单色)

相对于最优值的高/中/低区域(多色)

典型场景

上传、加载、播放

磁盘、电量、分数

可访问性角色

progressbar

meter

最终选择原则
  • 如果 任务会结束,用 <progress>。

  • 如果 展示某个指标在区间内的状态,用 <meter>。

  • 永远不要用 <meter> 表示任务进度,也不要用 <progress> 展示静态测量值。

正确使用这两个语义元素,不仅让界面更直观,也让代码更具可维护性和无障碍兼容性。从今天开始,告别“进度条选择困难症”!


阅读原文:原文链接


该文章在 2026/4/23 16:41:53 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号