12 CSS Progress Bar Designs

A CSS progress bar is the visual indicator that shows how close a task is to completion. These 12 hand-coded designs are ready-to-ship progress UIs for file uploads, multi-step checkouts, skill levels, fundraising goals, and onboarding flows — copy the markup, bind to your value, and ship.

12 unique progress bars 11 Pure CSS 1 CSS + JS 100% copy-paste ready Published
01 / 12
Liquid Fill
Pure CSS
Liquid Fill — preview
Wave-animated water rising inside a rounded vessel — perfect for resource meters, storage usage, and "fill your goal" patterns.
02 / 12
Step Tracker
Pure CSS
Step Tracker — preview
Numbered steps with a connecting rail that fills as you progress.
03 / 12
Conic Ring
Pure CSS
Conic Ring — preview
A circular progress ring rendered with a real `@property`-animated conic gradient — no SVG, no JS scoring.
04 / 12
Segmented Battery
Pure CSS
Segmented Battery — preview
Discrete signal-bar segments that fill from left to right.
05 / 12
Stripe Loading
Pure CSS
Stripe Loading — preview
Diagonal candy-stripes shimmer continuously inside the filled portion — instantly reads as "actively in progress." A premium touch lifted from server-software install dialogs and CI build runners.
06 / 12
Gradient Pulse
Pure CSS
Gradient Pulse — preview
A premium hero progress bar with a glowing leading edge that pulses gently.
07 / 12
Goal Tracker
Pure CSS
Goal Tracker — preview
Vertical fundraising-style progress with milestone markers.
08 / 12
Skill Bars
Pure CSS
Skill Bars — preview
Stacked horizontal bars with labels and percentages.
09 / 12
Circular Counter
Light JS
Circular Counter — preview
A radial chart with a synchronised counting number in the centre.
10 / 12
Stacked Categories
Pure CSS
Stacked Categories — preview
A single bar split into multiple coloured segments — Documents, Photos, Apps, Free.
11 / 12
Speed Test Gauge
Pure CSS
Speed Test Gauge — preview
An SVG semicircular speedometer with a colour-graded arc (red → amber → green), tick marks at 0/50/100, and a needle that sweeps from the bottom.
12 / 12
Buffer Bar
Pure CSS
Buffer Bar — preview
Video-player progress bar with two filled regions: solid played + lighter buffered ahead.

Build your own

Tweak the exact look in our visual generators — no signup, instant copy-paste.

FAQ

Frequently asked questions

What is a CSS progress bar?
A progress bar is a visual indicator showing how much of a task or value has been completed against a target. It can be linear (a horizontal bar), circular (a ring or arc), or segmented (discrete steps). Used for file uploads, form completion, skill levels, fundraising goals, and storage usage. For multi-stage flows where each step is a named milestone rather than a percentage, look at the [CSS timeline patterns](/layouts/css-timelines/) instead.
Should I use the native HTML progress element?
Yes when you can. Native progress is the most accessible option — assistive tech announces the value automatically. The patterns here use either a real progress element or a labelled SVG with role=progressbar plus aria-valuenow / aria-valuemin / aria-valuemax for the same semantics.
How do I make a circular CSS progress bar?
Two common approaches: (1) an SVG circle with stroke-dasharray and pathLength=100 — animate stroke-dashoffset from 100 to (100 - value); or (2) a conic-gradient with @property animation — animate the angle from 0deg to value*3.6deg. Both work without JavaScript for static values.
Are these progress bars accessible?
Yes. Each demo uses either a native progress element or a div with role=progressbar plus aria-valuenow, aria-valuemin, aria-valuemax and an associated label. Continuous animations (stripes, gradient pulse) honour the prefers-reduced-motion media query.
Do these progress bars need JavaScript?
Most don't. The visual fill is driven by a single CSS custom property (--value) that you set inline or with one line of JS. Only the Circular Counter needs ~20 lines of JS to keep the centre number in sync with the ring animation; the rest are pure CSS.

Search CodeFronts

Loading…