Free visual SVG tool

CSS Progress Ring Generator

Build a real SVG circular progress ring with accurate circumference math. Adjust percentage, size, color and animation, then copy the code.

Ready-to-use SVG + CSS

Real math, not a guess

Every ring is built from the actual circumference of the circle, so the fill always lines up exactly with the percentage you set — at any size.

Accurate dash math

Circumference is computed as 2 × π × radius from your real size and stroke width.

Solid or gradient

Use a flat color or a two-stop SVG gradient stroke.

Animate on load

Sweep the ring from 0% to your target with a real CSS transition.

How to build a CSS progress ring

  1. Set the percentageDrag the percent slider to the value you want the ring to represent.
  2. Style the ringAdjust size, stroke width, color or gradient, line cap and the center label.
  3. Copy the SVGSelect Copy code to grab the finished SVG markup and any transition CSS.

About SVG progress rings

A circular progress ring is really just an SVG circle with a dashed stroke, where the dash pattern is set to exactly match the circle's own circumference. By making the dash the same length as the circle and then offsetting where that dash starts, you can reveal any fraction of the ring you like — 100% dash-offset hides it completely, and 0% offset shows the whole thing. Because the math is derived from the real circumference (2 × π × radius) rather than a fixed guess, the ring stays accurate no matter what size or stroke width you choose, which is why this generator recalculates it live instead of using a lookup table.

stroke-dasharray

Set once to the circle's circumference, this creates a single dash exactly as long as the whole ring.

stroke-dashoffset

Shifting where that dash begins is what actually reveals or hides the progress arc.

Rounded line caps

A rounded stroke-linecap gives the ends of the arc a soft, pill-shaped finish instead of a hard edge.

Animating the sweep

Transitioning stroke-dashoffset with CSS produces a smooth, GPU-friendly fill animation with no JavaScript loop required.

CSS progress ring generator FAQ

How is the stroke-dashoffset calculated?

This tool computes the circle's real circumference as 2 x pi x radius, then sets stroke-dasharray to that value and stroke-dashoffset to the circumference minus the percentage of it that should be filled, so the math always matches the ring's actual size.

Can I make the ring animate on load?

Yes. Turn on animate-on-load and press Animate to see the ring sweep from 0 percent to the target percentage using a CSS transition on stroke-dashoffset, and the same transition rule is included in the copied code.

Can I use a gradient stroke on the ring?

Yes. Turn on the gradient toggle and pick two colors to generate an SVG linearGradient definition, which the copied markup references directly.

Is the copied SVG accessible?

Yes. The generated SVG includes role="img" and an aria-label describing the current percentage, so screen readers announce a meaningful value.

Is this progress ring generator free and private?

Yes. It is completely free, requires no account, and every calculation runs locally in your browser.

Try other CSS and progress tools

Keep building interfaces with these free online tools.