|$ curl https://forge-ai.dev/api/markdown?path=docs/components/progress
$cat docs/progress-indicators.md
updated Recently·12 min read·published

Progress Indicators

CSSHTMLUIIntermediate🎯Free Tools

Progress bars, circular indicators, stepped progress, indeterminate loaders, animated fills, and multi-step wizards.

Basic Progress Bar

Simple linear progress bars with percentage labels. Set the width of the fill element to reflect progress.

basic-progress
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="progress-bar">
3 <div class="info">
4 <span>
5 Uploading...
6 </span>
7 <span>
8 35%
9 </span>
10 </div>
11 <div class="track">
12 <div class="fill" style="width:35%">
13 </div>
14 </div>
15 </div>
16 <div class="progress-bar">
17 <div class="info">
18 <span>
19 Processing
20 </span>
21 <span>
22 72%
23 </span>
24 </div>
25 <div class="track">
26 <div class="fill" style="width:72%">
27 </div>
28 </div>
29 </div>
30 <div class="progress-bar">
31 <div class="info">
32 <span>
33 Complete
34 </span>
35 <span>
36 100%
37 </span>
38 </div>
39 <div class="track">
40 <div class="fill" style="width:100%">
41 </div>
42 </div>
43 </div>
44</div>
preview

info

Always show both the label and percentage when possible. Users find progress more reassuring when they can see exact numbers rather than just a moving bar.
Striped & Animated

Progress bars with diagonal stripe patterns and a scrolling animation to indicate active work.

striped-progress
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="progress-bar">
3 <div class="info">
4 <span>
5 Downloading
6 </span>
7 <span>
8 58%
9 </span>
10 </div>
11 <div class="track">
12 <div class="fill striped animated" style="width:58%">
13 </div>
14 </div>
15 </div>
16 <div class="progress-bar">
17 <div class="info">
18 <span>
19 Installing
20 </span>
21 <span>
22 90%
23 </span>
24 </div>
25 <div class="track">
26 <div class="fill striped animated" style="width:90%">
27 </div>
28 </div>
29 </div>
30</div>
preview
Color Variants

Semantic color variants for different states — success, warning, danger, and info.

colored-progress
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="progress-bar">
3 <div class="info">
4 <span>
5 Success
6 </span>
7 <span>
8 100%
9 </span>
10 </div>
11 <div class="track">
12 <div class="fill success" style="width:100%">
13 </div>
14 </div>
15 </div>
16 <div class="progress-bar">
17 <div class="info">
18 <span>
19 Warning
20 </span>
21 <span>
22 65%
23 </span>
24 </div>
25 <div class="track">
26 <div class="fill warning" style="width:65%">
27 </div>
28 </div>
29 </div>
30 <div class="progress-bar">
31 <div class="info">
32 <span>
33 Danger
34 </span>
35 <span>
36 25%
37 </span>
38 </div>
39 <div class="track">
40 <div class="fill danger" style="width:25%">
41 </div>
42 </div>
43 </div>
44 <div class="progress-bar">
45 <div class="info">
46 <span>
47 Info
48 </span>
49 <span>
50 80%
51 </span>
52 </div>
53 <div class="track">
54 <div class="fill info-color" style="width:80%">
55 </div>
56 </div>
57 </div>
58</div>
preview

warning

Avoid using only color to convey progress meaning. Always include text labels or icons alongside color-coded progress bars for users with color vision deficiencies.
Sizes

Thin, default, and thick progress bars to fit different UI contexts — from compact inline loaders to prominent upload indicators.

progress-sizes
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="progress-bar">
3 <div class="info">
4 <span>
5 Thin
6 </span>
7 <span>
8 70%
9 </span>
10 </div>
11 <div class="track thin">
12 <div class="fill" style="width:70%">
13 </div>
14 </div>
15 </div>
16 <div class="progress-bar">
17 <div class="info">
18 <span>
19 Default
20 </span>
21 <span>
22 50%
23 </span>
24 </div>
25 <div class="track">
26 <div class="fill" style="width:50%">
27 </div>
28 </div>
29 </div>
30 <div class="progress-bar">
31 <div class="info">
32 <span>
33 Thick
34 </span>
35 <span>
36 85%
37 </span>
38 </div>
39 <div class="track thick">
40 <div class="fill" style="width:85%">
41 </div>
42 </div>
43 </div>
44</div>
preview
Circular Progress

Circle and ring-style progress indicators — great for dashboards, profile completion, and compact spaces.

circular-progress
Live
untitled.html
HTML
1<div class="c-wrap">
2 <div class="circle" data-pct="75">
3 <svg viewBox="0 0 36 36">
4 <path class="bg" d="M18 2.0845a 15.9155 15.9155 0 0 1 0 31.831 15.9155 15.9155 0 0 1 0-31.831" fill="none" stroke="#1A1A2E" stroke-width="3"/>
5 <path class="fg" d="M18 2.0845a 15.9155 15.9155 0 0 1 0 31.831 15.9155 15.9155 0 0 1 0-31.831" fill="none" stroke="#00FF41" stroke-width="3" stroke-dasharray="75, 100"/>
6 </svg>
7 <span class="pct">
8 75%
9 </span>
10 </div>
11 <div class="circle" data-pct="40">
12 <svg viewBox="0 0 36 36">
13 <path class="bg" d="M18 2.0845a 15.9155 15.9155 0 0 1 0 31.831 15.9155 15.9155 0 0 1 0-31.831" fill="none" stroke="#1A1A2E" stroke-width="3"/>
14 <path class="fg" d="M18 2.0845a 15.9155 15.9155 0 0 1 0 31.831 15.9155 15.9155 0 0 1 0-31.831" fill="none" stroke="#3B82F6" stroke-width="3" stroke-dasharray="40, 100"/>
15 </svg>
16 <span class="pct">
17 40%
18 </span>
19 </div>
20 <div class="circle" data-pct="92">
21 <svg viewBox="0 0 36 36">
22 <path class="bg" d="M18 2.0845a 15.9155 15.9155 0 0 1 0 31.831 15.9155 15.9155 0 0 1 0-31.831" fill="none" stroke="#1A1A2E" stroke-width="3"/>
23 <path class="fg" d="M18 2.0845a 15.9155 15.9155 0 0 1 0 31.831 15.9155 15.9155 0 0 1 0-31.831" fill="none" stroke="#22C55E" stroke-width="3" stroke-dasharray="92, 100"/>
24 </svg>
25 <span class="pct">
26 92%
27 </span>
28 </div>
29</div>
preview

best practice

Circular progress works best at small sizes where a linear bar would take too much horizontal space. Keep the percentage text inside the ring for compactness.
Indeterminate

Progress indicators with no known end — the bar or spinner animates continuously to show ongoing activity.

indeterminate
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="progress-bar">
3 <span class="lbl">
4 Loading data...
5 </span>
6 <div class="track">
7 <div class="fill indeterminate">
8 </div>
9 </div>
10 </div>
11 <div class="c-wrap">
12 <div class="spinner-ring">
13 <svg viewBox="0 0 36 36">
14 <circle cx="18" cy="18" r="15.9155" fill="none" stroke="#1A1A2E" stroke-width="3"/>
15 <circle cx="18" cy="18" r="15.9155" fill="none" stroke="#00FF41" stroke-width="3" stroke-dasharray="25, 75" stroke-linecap="round" class="spin-arc"/>
16 </svg>
17 </div>
18 <div class="spinner-ring">
19 <svg viewBox="0 0 36 36">
20 <circle cx="18" cy="18" r="15.9155" fill="none" stroke="#1A1A2E" stroke-width="3"/>
21 <circle cx="18" cy="18" r="15.9155" fill="none" stroke="#3B82F6" stroke-width="3" stroke-dasharray="15, 85" stroke-linecap="round" class="spin-arc"/>
22 </svg>
23 </div>
24 </div>
25</div>
preview
📝

note

Use indeterminate progress when the total time or size is unknown (e.g., waiting for a server response). Switch to determinate progress once the total is known.
Stepped Progress

Multi-step progress indicators showing completed, current, and upcoming steps in a wizard or checkout flow.

stepped-progress
Live
untitled.html
HTML
1<div class="stepper">
2 <div class="step done">
3 <div class="circle">
4 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
5 <polyline points="20 6 9 17 4 12"/>
6 </svg>
7 </div>
8 <span class="step-label">
9 Cart
10 </span>
11 </div>
12 <div class="line done">
13 </div>
14 <div class="step done">
15 <div class="circle">
16 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
17 <polyline points="20 6 9 17 4 12"/>
18 </svg>
19 </div>
20 <span class="step-label">
21 Shipping
22 </span>
23 </div>
24 <div class="line active">
25 </div>
26 <div class="step current">
27 <div class="circle">
28 3
29 </div>
30 <span class="step-label">
31 Payment
32 </span>
33 </div>
34 <div class="line">
35 </div>
36 <div class="step">
37 <div class="circle">
38 4
39 </div>
40 <span class="step-label">
41 Review
42 </span>
43 </div>
44</div>
preview
Step with Content

A stepped progress bar paired with step content and navigation buttons for a mini wizard.

step-content
Live
untitled.html
HTML
1<div class="wizard">
2 <div class="progress-track">
3 <div class="progress-fill" style="width:33%">
4 </div>
5 </div>
6 <div class="steps-row">
7 <span class="active">
8 Account
9 </span>
10 <span class="active">
11 Profile
12 </span>
13 <span>
14 Confirm
15 </span>
16 </div>
17 <div class="step-content">
18 <div class="step-title">
19 Step 2 of 3: Profile
20 </div>
21 <div class="step-desc">
22 Tell us a bit about yourself. This helps us personalize your experience.
23 </div>
24 <div class="step-actions">
25 <button class="btn ghost">
26 Back
27 </button>
28 <button class="btn primary">
29 Continue
30 </button>
31 </div>
32 </div>
33</div>
preview
🔥

pro tip

For multi-step forms, combine a stepped progress bar with a linear fill bar above it. The steps give semantic structure while the fill bar shows continuous progress between steps.
Inline Labeled Bar

Progress bars with the label inside the track — compact and ideal for dashboards and stat cards.

inline-label
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="bar-inline">
3 <div class="bar-track">
4 <div class="bar-fill" style="width:68%">
5 <span class="bar-text">
6 68% Complete
7 </span>
8 </div>
9 </div>
10 </div>
11 <div class="bar-inline">
12 <div class="bar-track">
13 <div class="bar-fill warn" style="width:25%">
14 <span class="bar-text">
15 25%
16 </span>
17 </div>
18 </div>
19 </div>
20 <div class="bar-inline">
21 <div class="bar-track">
22 <div class="bar-fill success" style="width:100%">
23 <span class="bar-text">
24 Done!
25 </span>
26 </div>
27 </div>
28 </div>
29</div>
preview
Multi-Segment

Progress bars divided into colored segments showing different categories or stages of completion.

multi-segment
Live
untitled.html
HTML
1<div class="wrap">
2 <div class="info">
3 <span>
4 Storage Used: 73.2 GB of 100 GB
5 </span>
6 </div>
7 <div class="seg-track">
8 <div class="seg images" style="width:30%">
9 </div>
10 <div class="seg videos" style="width:25%">
11 </div>
12 <div class="seg docs" style="width:12%">
13 </div>
14 <div class="seg other" style="width:6%">
15 </div>
16 </div>
17 <div class="legend">
18 <span class="item">
19 <span class="dot images">
20 </span>
21 Images 30%
22 </span>
23 <span class="item">
24 <span class="dot videos">
25 </span>
26 Videos 25%
27 </span>
28 <span class="item">
29 <span class="dot docs">
30 </span>
31 Docs 12%
32 </span>
33 <span class="item">
34 <span class="dot other">
35 </span>
36 Other 6%
37 </span>
38 </div>
39</div>
preview

info

Multi-segment bars are perfect for showing composition — storage usage, time allocation, budget breakdowns. Use a legend below the bar to map colors to categories.