Progress Bar โ Vanilla
Progress bar with vanilla HTML. Same BEM and options as Astro/Svelte. Ensure Rizzo CSS is loaded.
Progress Bar
An accessible progress bar for completion or loading state. Same structure as Astro and Svelte. BEM: progress, progress__track, progress__bar, progress__label. Modifiers: progress--sm | progress--md | progress--lg, progress--primary | success | warning | error | info, progress--indeterminate.
Basic usage
HTML
<div class="progress progress--md progress--primary" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track">
<div class="progress__bar" style="width: 60%"></div>
</div>
</div> With label
Add progress__label with aria-hidden="true" for the percentage.
<div class="progress progress--md progress--primary" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track">
<div class="progress__bar" style="width: 75%"></div>
</div>
<span class="progress__label" aria-hidden="true">75%</span>
</div> Variants
<!-- primary, success, warning, error, info -->
<div class="progress progress--md progress--primary" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track"><div class="progress__bar" style="width: 40%"></div></div>
</div>
<div class="progress progress--md progress--success" role="progressbar" aria-valuenow="55" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track"><div class="progress__bar" style="width: 55%"></div></div>
</div>
<div class="progress progress--md progress--warning" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track"><div class="progress__bar" style="width: 70%"></div></div>
</div> Sizes
<!-- progress--sm, progress--md, progress--lg -->
<div class="progress progress--sm progress--primary" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track"><div class="progress__bar" style="width: 50%"></div></div>
</div>
<div class="progress progress--md progress--primary" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track"><div class="progress__bar" style="width: 50%"></div></div>
</div>
<div class="progress progress--lg progress--primary" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="progress__track"><div class="progress__bar" style="width: 50%"></div></div>
</div> Indeterminate
Use progress--indeterminate and omit aria-valuenow; set aria-label and aria-valuetext="Loading".
<div class="progress progress--md progress--primary progress--indeterminate" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-label="Loading" aria-valuetext="Loading">
<div class="progress__track">
<div class="progress__bar"></div>
</div>
</div> Custom max
Use aria-valuenow and aria-valuemax (e.g. 3 of 5 steps). Bar width = (value / max) * 100%.
<!-- e.g. 3 of 5 steps: value 3, max 5 โ 60% -->
<div class="progress progress--md progress--primary" role="progressbar" aria-valuenow="3" aria-valuemin="0" aria-valuemax="5">
<div class="progress__track">
<div class="progress__bar" style="width: 60%"></div>
</div>
<span class="progress__label" aria-hidden="true">60%</span>
</div> Features
- Semantic -
role="progressbar"witharia-valuenow,aria-valuemin,aria-valuemax - Indeterminate -
aria-valuetext="Loading"when progress is unknown - Variants - primary, success, warning, error, info
- Sizes - sm, md, lg
- Reduced motion - Indeterminate animation disabled when user prefers reduced motion