Progress
The native <progress> element is restyled with a pill-shaped track and an animated $primary-colored fill driven entirely by the value attribute - no JavaScript required.
Basic progress
Set value from 1–100 as a percentage. The fill width and its fill-in animation duration both scale with the value.
Preview
<progress value="25"></progress>
<progress value="60"></progress>
<progress value="90"></progress>
Height
Set an explicit height attribute to override the 5px default track thickness.
<progress value="70" style="height:10px"></progress>
Indeterminate / empty states
Leave value off entirely for a full, static track, or set it to an empty string for a barely-visible 1% sliver - useful as a "just started" state.
<!-- No value: fill renders at 100% -->
<progress></progress>
<!-- Empty value: fill renders at 1% -->
<progress value=""></progress>
Animation speed
The fill-in transition duration scales with value by default (10ms per point). Override the pacing with .speed-{10-100} to use a fixed per-point duration instead.
<progress value="80" class="speed-50"></progress>
| Attribute / class | Effect |
|---|---|
value="1"…"100" | Fill width as a percentage |
value="" | 1% sliver fill |
(no value) | 100% fill, static track |
height="…" | Track thickness (default 5px) |
.speed-{10,20,…,100} | Fixed per-point animation duration in ms |
Pure CSS. The fill bar is the element's own::beforepseudo-element, animated with a CSSanimation-durationtied tovalue- no wrapper markup or script needed to show progress.