Indeterminate progress indicator
A looping spinner or moving bar that shows work is happening when the app cannot calculate a percentage.
See it
What it is
An indeterminate progress indicator is a looping spinner or moving bar that says work is happening without claiming how much is complete. In HTML, a progress element with no value attribute represents this exact state; Material Design commonly shows it as a circular spinner or a bar sweeping along a track.
Use one only when the task has begun but its duration or total work is unknown. If you can measure completion, switch to a determinate bar; if the wait is just content arriving, a skeleton screen may communicate the page structure more usefully.
Gotcha: perpetual motion is not progress. Pair the indicator with a specific status label, mark the affected region as busy, and provide an error or retry state if the operation stalls. Respect reduced-motion preferences rather than forcing a fast loop on everyone.
Ask AI for it
Build an indeterminate linear progress indicator for an unknown-duration upload. Use a div with role='progressbar', aria-label='Upload progress', and no aria-valuenow, which is how ARIA expresses an unknown value. Place it beside the text 'Preparing upload' and set aria-busy='true' on the affected region. Inside a 4px muted track with overflow: hidden and border-radius: 999px, animate a child bar 40% of the track width across it with a CSS keyframe animation on transform: translateX(), looping over 1.2s. Under prefers-reduced-motion: reduce, replace the travelling motion with a static striped fill. When progress becomes measurable, swap in a native HTML progress element with value and max attributes.