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 CompletionThe <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.
Component "ProgressPump" is not available. Please define it in the MDX components.
<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).<meter> – For Scalar MeasurementsThe <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.
60%
<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, and optimum for indicating ideal ranges.<label for="score">Quiz Score:</label>
<meter id="score" min="0" max="100" low="50" high="80" optimum="90" value="72">
72
</meter>
| Purpose | Use <progress> | Use <meter> |
|---|---|---|
| Shows task progress | ✅ | ❌ |
| Shows scalar level | ❌ | ✅ |
| Tied to completion % | ✅ | ❌ |
| Indicates value within a range | ❌ | ✅ |
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.