{{HTMLSidebar}}
The <progress>
HTML element displays an indicator showing the completion progress of a task, typically displayed as a progress bar.
{{EmbedInteractiveExample("pages/tabbed/progress.html", "tabbed-standard")}}
Attributes
This element includes the global attributes.
max
- : This attribute describes how much work the task indicated by the
progress
element requires. Themax
attribute, if present, must have a value greater than0
and be a valid floating point number. The default value is1
.
- : This attribute describes how much work the task indicated by the
value
- : This attribute specifies how much of the task that has been completed. It must be a valid floating point number between
0
andmax
, or between0
and1
ifmax
is omitted. If there is novalue
attribute, the progress bar is indeterminate; this indicates that an activity is ongoing with no indication of how long it is expected to take.
- : This attribute specifies how much of the task that has been completed. It must be a valid floating point number between
[!NOTE] Unlike the
{{htmlelement("meter")}}
element, the minimum value is always 0, and themin
attribute is not allowed for the<progress>
element.
[!NOTE] The
{{cssxref(":indeterminate")}}
pseudo-class can be used to match against indeterminate progress bars. To change the progress bar to indeterminate after giving it a value you must remove the value attribute with{{domxref("Element.removeAttribute", "element.removeAttribute('value')")}}
.
Accessibility
Labelling
In most cases you should provide an accessible label when using <progress>
. While you can use the standard ARIA labelling attributes aria-labelledby
or aria-label
as you would for any element with role="progressbar"
, when using <progress>
you can alternatively use the {{htmlelement("label")}}
element.
[!NOTE] Text placed between the element’s tags is not an accessible label, it is only recommended as a fallback for old browsers that do not support this element.
Examples
<label>
Uploading Document: <progress value="70" max="100">70 %</progress>
</label>
<!-- OR -->
<br />
<label for="progress-bar">Uploading Document</label>
<progress id="progress-bar" value="70" max="100">70 %</progress>
Result
{{EmbedLiveSample('Labelling')}}
Describing a particular region
If the <progress>
element is describing the loading progress of a section of a page, use aria-describedby
to point to the status, and set aria-busy="true"
on the section that is being updated, removing the aria-busy
attribute when it has finished loading.
Examples
<div aria-busy="true" aria-describedby="progress-bar">
<!-- content is for this region is loading -->
</div>
<!-- ... -->
<progress id="progress-bar" aria-label="Content loading…"></progress>
Result
{{EmbedLiveSample('Describing a particular region')}}
Examples
<progress value="70" max="100">70 %</progress>
Result
{{ EmbedLiveSample("Examples", 200, 50) }}
Technical summary
Content categories | Flow content, phrasing content, labelable content, palpable content. |
---|---|
Permitted content |
Phrasing content, but there must be no <progress> element among its
descendants.
|
Tag omission | None, both the starting and ending tag are mandatory. |
Permitted parents | Any element that accepts phrasing content. |
Implicit ARIA role | progressbar |
Permitted ARIA roles | No role permitted |
DOM interface | `{{domxref("HTMLProgressElement")}}` |
Specifications
{{Specifications}}
Browser compatibility
{{Compat}}
See also
- Creating vertical form controls
{{htmlelement("meter")}}
{{ cssxref(":indeterminate") }}
{{ cssxref("-moz-orient") }}
{{ cssxref("::-moz-progress-bar") }}
{{ cssxref("::-webkit-progress-bar") }}
{{ cssxref("::-webkit-progress-value") }}
{{ cssxref("::-webkit-progress-inner-element") }}