管理杂谈OA答疑ERP答疑教程搜索

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


本文全面对比 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>典型场景


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


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

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

自定义 progress 样式

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

自定义 meter 样式

meter {  width300px;  height24px;  border-radius;}meter::-webkit-meter-bar {  background-color#e0e0e0;  border-radius;}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-radius;}

总结


特性

<progress>

<meter>

核心语义

任务进度(动态)

测量范围(静态)

是否支持不确定状态

✅ 支持(缺省 value 属性时)

❌ 不支持

额外范围属性

仅 max

min,low,high,optimum

颜色含义

完成百分比(通常单色)

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

典型场景

上传、加载、播放

磁盘、电量、分数

可访问性角色

progressbar

meter

最终选择原则

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

阅读原文:原文链接


更多精彩文章浏览...
点击右上角图标分享到朋友圈
官方网站:http://www.clicksun.cn
咨询热线:400-186-1886
服务邮箱:service@clicksun.cn