Progress Bar Generator

Create custom CSS progress bars with live preview. Choose style, colors, radius and export clean HTML + CSS.

4 bar stylesLive previewCSS only

① Set percentage and pick a style ② Adjust colors and height ③ Copy the CSS and HTML

#C9B89A
#2A2A2A
Preview
Output
/* CSS */
.progress-wrap {
  background: #2a2a2a;
  border-radius: 999px;
  height: 20px;
  overflow: hidden;
  position: relative;
}

.progress-bar {
  width: 65%;
  height: 100%;
  border-radius: 999px;
  transition: width 0.3s;
  background: #c9b89a;
}

/* HTML */
<div class="progress-wrap">
  <div class="progress-bar"></div>
</div>

What is a CSS progress bar and when should you use one?

A CSS progress bar is a UI component that visually represents the completion of a task, loading state, or metric. Built with pure HTML and CSS, it requires no JavaScript for static display. The outer wrapper provides the track (background), while the inner div fills proportionally using width: {percentage}%. Striped bars use repeating-linear-gradient at 45 degrees for a classic look. Animated stripes apply a background-position keyframe animation to simulate movement. Gradient bars use linear-gradient for depth. The border-radius property rounds both wrapper and bar consistently. Progress bars are widely used in dashboards, skill sections, onboarding flows, and file upload UIs.

Frequently Asked Questions

A CSS progress bar is a visual component made of two nested divs: a wrapper (the track) and an inner bar whose width percentage reflects completion. No JavaScript is required for a static display.
Stripes use repeating-linear-gradient at 45 degrees alternating between the bar color and a slightly transparent variant every 10px, creating a diagonal stripe pattern without images.
Both use the same repeating-linear-gradient pattern. The animated version additionally applies a background-position keyframe animation that shifts the gradient horizontally, simulating movement.
The wrapper should be set to width: 100% so it fills its container. The inner bar uses a percentage width, which is always relative to the wrapper, making it fully responsive.
Yes. Set a CSS custom property like --progress and update it via element.style.setProperty("--progress", value + "%"). Then in CSS use width: var(--progress) on the inner bar.
Rounded bars (border-radius: 999px) suit modern, soft UIs. Sharp corners (border-radius: 0) match geometric or data-heavy dashboards. Apply the same value to both wrapper and bar for visual consistency.
Yes. Use the native <progress> HTML element for semantic meaning, or add role="progressbar" aria-valuenow aria-valuemin aria-valuemax attributes to the wrapper div to ensure screen readers announce the value correctly.

Explore Our Network