先记住这个答案
<progress> 描述一项任务完成到哪里,上传进度已知时给 value,未知时可省略;<meter> 描述一个已知范围内的量,比如磁盘已用比例。两者外观可能都像条形图,但语义不同。给“已上传 60%”和“磁盘已用 60%”选同一个标签,会让辅助技术用户误解当前状态。
progress表示任务完成度meter表示范围内测量值- 未知进度可省略
value - 数值需要清楚的标签
上传进度与存储占用
上传文件时显示完成百分比,用 <progress value="60" max="100">;用户账号的存储空间占用 60%,用 <meter value="60" min="0" max="100"> 更贴切。两者外观都可能像一条横条,但语义不同。若上传进度暂时无法知道,移除 progress 的 value 表示不确定,而不是随便填一个 0 让用户误以为没有开始。
<label for="upload">文件上传</label>
<progress id="upload" value="60" max="100">60%</progress>
<label for="storage">存储空间占用</label>
<meter id="storage" value="60" min="0" max="100">60%</meter>
<!-- 一个是任务进度,一个是范围内测量值 -->progress 的当前值应在 0 与最大值之间;未提供当前值时表示不确定进度。
示例中 <progress> 的 60 表示上传任务已完成 60/100,<meter> 的 60 表示存储测量值为 60/100。把 value 更新到 100 后,上传任务通常算完成;磁盘占用到 100 则是容量满了,语义几乎相反。实际页面还应在文字里写清“正在上传”或“已用空间”,让高对比模式、打印以及读屏输出都能保留关键信息。
任务进度和测量值不同
meter 有范围上下限,还可通过 low、high、optimum 表达区间评价。它们不是通用图表容器,复杂时间序列仍需要更完整的可视化与文本说明。样式可改变外观,却不该掩盖语义;读屏用户需要知道这条数值对应“上传”还是“剩余容量”。
上传文件时进度从 0 到 100 逐步推进,任务结束后才完成;磁盘已占用 60% 只是某一时刻的测量,明天可能更高也可能更低。<meter> 还能表达低、高、最佳值等范围信息,但这些阈值必须和实际业务含义一致。若网络上传暂时无法知道总量,<progress> 可不写 value 表示不确定,而不是随便显示 0%。
范围值还需要可理解的文字。只显示一根没有标签的彩色条,用户不知道 60% 表示上传、剩余电量还是容量警戒线。<label> 可以关联这些元素,也可在附近写出“已上传 60%”等状态;颜色也不能作为唯一反馈,因为打印、色觉差异或高对比模式都会改变颜色的可辨程度。
容易答错的地方
- 把磁盘占用百分比写成 progress
- 它是一个范围内的测量值,不是正在完成的任务。
- 未知进度时设置
value="0" - 零表示已知进度为零,未知应省略
value。
面试官还会怎么问?
meter 的 low、high 有什么用?
可划出低、高区间,再与 optimum 一起表达数值是否理想。
进度值是否一定要写百分比文本?
应有可理解的标签或文字说明,具体呈现可结合控件与辅助技术测试。
评分能用 meter 吗?
若它是已知范围内的当前评分,可以;同时说明评分尺度与含义。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。