2025-06-13 Web Development, Programming
Understanding <progress> and <meter> in HTML
By O. Wolfson
When building web applications, it's helpful to visually communicate progress or measurements to users. HTML provides two semantic elements for this purpose: <progress>
and <meter>
. Though similar in appearance, they serve distinct purposes.
✅ <progress>
– For Task Completion
The <progress>
tag represents the completion progress of a task. This is useful for things like file uploads, loading operations, or any process that moves toward 100% completion.
Example:
<progress id="progress" value="10" max="100">10%</progress>
html<label for="file">Uploading file...</label>
<progress id="file" value="70" max="100">70%</progress>
value
is the current progress.max
is the total target (default is 1.0 if not specified).- The tag is useful when progress is linear and tied to a known endpoint.
Common Use Cases:
- File upload progress
- Task completion bars
- Background syncing status
📏 <meter>
– For Scalar Measurements
The <meter>
tag is used to display a scalar value within a known range, like temperatures, scores, or storage space. It’s best when the value is more about status or level rather than progress toward completion.
Example:
60%
html<label for="disk">Disk Usage:</label>
<meter id="disk" value="0.6" min="0" max="1">60%</meter>
You can also use additional attributes:
low
,high
, andoptimum
for indicating ideal ranges.
Example with Ranges:
html<label for="score">Quiz Score:</label>
<meter id="score" min="0" max="100" low="50" high="80" optimum="90" value="72">
72
</meter>
- The browser can visually reflect "good", "ok", or "bad" values based on the provided ranges.
Common Use Cases:
- Battery life
- Quiz or game scores
- System resource usage (CPU, memory, etc.)
🧠 When to Use Which?
Purpose | Use <progress> | Use <meter> |
---|---|---|
Shows task progress | ✅ | ❌ |
Shows scalar level | ❌ | ✅ |
Tied to completion % | ✅ | ❌ |
Indicates value within a range | ❌ | ✅ |
📝 Final Thoughts
Both <progress>
and <meter>
are semantic, accessible, and native to HTML5—no JavaScript or CSS required for basic use. Choosing the right tag helps improve both accessibility and user experience.
Use
<progress>
when a task is moving toward completion. Use<meter>
when displaying a value on a scale.