<progress> Element
Technical Summary
The progress element represents the completion progress of a task. It can be determinate, with a known current and maximum amount, or indeterminate, when work is progressing but the remaining amount is unknown.
The presence of the value attribute selects the determinate state; omitting it selects the indeterminate state. Use meter for a scalar measurement such as disk usage, and output for a calculation or user-action result.
Definition / Categories
| Item | Definition |
|---|---|
| Meaning | Completion progress of a task |
| Categories | Flow content, phrasing content, labelable content, and palpable content |
| Context | Where phrasing content is expected |
| Content model | Phrasing content, but no descendant progress element |
| Tag omission | Neither the start tag nor the end tag is omissible |
| Content attributes | Global attributes, value, and max |
| DOM interface | HTMLProgressElement |
Determinate and indeterminate states
A determinate progress bar has a current value and a maximum, so its relative completion can be calculated. An indeterminate progress bar communicates that work is ongoing without saying how much remains.
<label for="determinate-progress">Upload</label>
<progress id="determinate-progress" max="100" value="65">65%</progress>
<label for="indeterminate-progress">Waiting for the server</label>
<progress id="indeterminate-progress">Processing</progress>
value="0" is a determinate progress bar whose current value is zero. It is different from omitting the value attribute.
value and max resolution
The max attribute represents the total amount of work. If it is omitted, the maximum is 1. The units are not fixed by the specification, so an application should choose and use one unit consistently.
maxmust be a valid floating-point number greater than zero. An invalid or non-positive value resolves to a maximum of 1.- When present,
valueis parsed as a floating-point number. An invalid or non-positive value resolves to a current value of 0. - If the current value is greater than the maximum, the progress value is limited to the maximum.
- When
valueis absent, the element is indeterminate andpositionreturns -1.
progress has no min attribute. Its lower bound is always zero. This processing model differs from meter, where a bounded measurement has lower, upper, and threshold-related meaning.
Fallback text and labeling
Descendant text can provide a fallback current and maximum value for legacy user agents. That text should not be treated as the only name for the element; use a label or appropriate ARIA labeling to identify which task is progressing.
<label for="file-progress">Report upload progress</label>
<progress id="file-progress" max="100" value="70">70%</progress>
When a progress indicator describes a region that is loading, an author may also relate it to that region with aria-describedby and mark the region as busy with aria-busy. Normative meaning, browser accessibility-tree exposure, and assistive-technology announcements remain separate questions.
DOM Interface
| API | Meaning | Boundary |
|---|---|---|
value | The current progress value | The getter returns 0 for an indeterminate bar; setting it can make an omitted-value element determinate |
max | The maximum value; default 1 | Invalid or non-positive values resolve to the default maximum |
position | Current value divided by maximum, or -1 when indeterminate | A readonly surface for the relative position |
labels | The NodeList of associated label elements | An entry point for checking labelable-element naming |
Fact / Evidence
The normative progress model, attribute processing, content model, DOM API, and accessibility mapping are recorded with claims, conditions, and source locations. Browser observations are kept separate in Implementation Evidence below.
| Type | Fact / claim | Conditions / scope | Status | Source |
|---|---|---|---|---|
| SPEC | The progress element represents the completion progress of a task. | Determinate progress gives a completed amount relative to a maximum; indeterminate progress does not expose the remaining amount. | Reviewed | HTML Standard: the progress element |
| SPEC | The presence of value distinguishes determinate from indeterminate progress. | Absent value means indeterminate; present value is resolved with max. | Reviewed | HTML Standard: determinate and indeterminate progress |
| SPEC | max defaults to 1, and the current value is resolved between zero and the maximum. | Invalid floating-point values, non-positive max, and values above the maximum. | Reviewed | HTML Standard: value and max processing |
| SPEC | progress belongs to flow, phrasing, labelable, and palpable content categories. | It is used where phrasing content is expected and may not contain a descendant progress element. | Reviewed | HTML Standard: categories and content model |
| SPEC | HTMLProgressElement exposes value, max, readonly position, and labels. | Includes the indeterminate position result and IDL/content-attribute behavior. | Reviewed | HTML Standard: HTMLProgressElement |
| AAM | progress maps to the progressbar role; determinate progress exposes maximum, minimum zero, and current value properties. | HTML-AAM element-role mapping. Browser, platform-API, and assistive-technology results require separate observation. | Reviewed | HTML-AAM: progress |
Evidence
- HTML Standard: The progress element — meaning, categories, attributes, determinate and indeterminate states, value/max processing, and DOM interface
- HTML Accessibility API Mappings: progress — progressbar role, determinate value properties, and labeling
- Web Platform Tests: HTML forms — entry point for locating progress element tests
Implementation Evidence
Browser implementation, WPT, and accessibility-tree observations are recorded separately from normative claims. A dedicated progress-v1 fixture has not yet been run, so unrun items are not marked as reviewed.
Fixture candidate: progress-v1 would reproduce determinate and indeterminate transitions, value and max boundary and invalid values, position, labels, fallback text, and accessibility-tree value properties.
| Type | Verification scope | Conditions to record | Status |
|---|---|---|---|
| IMPL | Determinate and indeterminate states, value/max boundaries, attribute and IDL reflection, position, labels, and fallback text | Register browser/version, OS, date, progress-v1 fixture, and each result | Pending / not run |
| WPT | Progress element, value/max parsing, indeterminate state, and DOM API tests | Register selected files, execution environment, pass/fail, and reasons for unrun tests | Pending / not run |
| AAM | Progressbar role, accessible name from labels, determinate min/max/now, and indeterminate exposure | Register browser accessibility tree, platform API, assistive-technology, and cross-browser observations separately | Pending / not run |
A browser observation from one environment must not be registered as a universal result across browsers, platform APIs, and assistive technologies.
Coverage / Open Issues
- ReviewedMeaning, categories, context, content model, tag omission, and content attributes
- ReviewedDeterminate and indeterminate states, value/max processing, and the semantic boundary with
meterandoutput - ReviewedMain
HTMLProgressElementAPIs and the HTML-AAM progressbar mapping entry point - OpenChrome, Firefox, and Safari comparisons for attributes, IDL, rendering, and determinate/indeterminate transitions
- OpenIndividual WPT results and browser differences for boundary values, invalid values, and dynamic changes
- OpenComplete HTML-AAM mapping, platform APIs, assistive-technology announcements, and interactions between dynamic updates,
aria-busy, andaria-describedby
This is initial coverage. It records the normative entry point and evidence sources; it does not claim identical results in every browser, platform API, or assistive technology, or complete verification of the progress element.
Related surface
For a beginner-friendly explanation of progress display, determinate and indeterminate states, and the difference from meter and output, see the progress element page in Yugien. For labeling, see the label element; for calculation results, see the output element.