<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.
Exposing a progress value through an accessibility API is different from announcing each change to a screen reader. Changing the bar alone does not necessarily announce the update. W3C's ARIA25 gives a separate status message with aria-live="polite" as one way to convey progress updates. It is an example technique, not the only required implementation.
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
- W3C WCAG Technique ARIA25 — the difference between exposing progress values and announcing status text; one sufficient technique, not a required implementation
- 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. The progress-v1 fixture and selected WPTs have been run in one Chrome-on-Windows environment. Windows UI Automation, actual screen-reader speech, other browsers, and unselected WPTs remain untested.
Measured fixture: progress-v1 reports determinate and indeterminate states, value/max boundary and invalid values, position, labels, fallback text, and the browser accessibility tree. Its separate controls compare a progress-value change with a change to an aria-live status message; screen-reader announcements still need direct measurement.
| Type | Verification scope | Conditions to record | Status |
|---|---|---|---|
| IMPL | Determinate and indeterminate states, value/max boundaries, attribute and IDL reflection, dynamic value updates, position, labels, and fallback text | 2026-10-03 / Chrome 154.0.0.0 / Windows 11 Pro build 26300 / DPR 1.25 / viewport 1280 × 720. In the loopback build-config/yugien/research-fixtures/progress-v1.html, confirmed value 40, max 100, position 0.4; indeterminate value 0, max 1, position -1; value 150 clamped to 100; invalid value became 0; omitted max defaulted to 1. Labels and fallback text were also read. On the Yugien EN page, moving the slider changed progress from 40 to 41 in visible text and the browser AX tree. Post-update speech from the fixture's two comparison buttons was not measured |
Partial observation (Chrome 154 / one environment) |
| WPT | Progress element, value/max parsing, indeterminate state, and DOM API tests | 2026-10-03 / Chrome 154.0.0.0 / Windows 11 Pro build 26300 / wpt.live. progress.html 11/11, progress-2.html 4/4, progress-max-setting.html 1/1, and serialization-regression-test.html 1/1 passed (17/17 total). The served WPT revision was not pinned. Unselected tests and other browsers were not runThe test version used was not recorded. The linked test may change, so this result cannot be repeated with certainty against the same version. |
Partial run (4 selected files, 17/17 passed) |
| AAM | Progressbar role, accessible name from labels, determinate min/max/now, indeterminate exposure, and announcements for value-only updates versus a separate aria-live status message | 2026-10-03 / Chrome 154.0.0.0 / Windows 11 Pro build 26300. The browser AX tree exposed named progress indicators and determinate values, and showed no value for the indeterminate case. The fixture's aria-live status text was present, but the speech difference between value-only and status-text updates was not measured. Windows UI Automation and actual Narrator / NVDA speech were not tested because the Windows automation tool would not run with the available browser. NVDA is installed but was not started. Other browsers were not run |
Partial observation (browser AX tree only) |
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, announcements when only the progress value changes versus when a separate
aria-livestatus message changes, 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 bounded measurements, see the meter element; for labeling, see the label element; for calculation results, see the output element.