Snippets Progress bar

Bootstrap 5 Progress Bar Styles (6 Designs)

Six progress bar designs: label above, value bubble, file upload with striped bar, stacked segments with a legend, a circular ring with a trend and a labelled step tracker. Bars fill in smoothly on load and respect reduced motion.

Bootstrap 5 No jQuery Sep 2019 1.8K views

<section class="wdw-stage pb-stage">
  <div class="container" style="max-width: 920px;">
    <div class="text-center mb-5">
      <span class="wdw-eyebrow mb-3">Progress</span>
      <h1 class="h2 wdw-heading mb-2">Progress bar styles</h1>
      <p class="text-body-secondary mb-0">Six ways to show how far along something is. Bars animate in on load.</p>
    </div>
    <div class="row g-3 g-md-4">
      <div class="col-md-6"><div class="card wdw-card-sm h-100"><div class="card-body p-4 d-flex flex-column">
        <p class="fw-semibold text-body-emphasis mb-3">Label above</p>
        <div class="my-auto">
          <div class="d-flex justify-content-between align-items-baseline mb-2"><span class="fw-medium">Storage used</span><span class="fw-semibold text-body-emphasis">72%</span></div>
          <div class="progress rounded-pill" style="height:10px" role="progressbar" aria-label="Storage used" aria-valuenow="72" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar rounded-pill" data-value="72"></div></div>
          <p class="small text-body-secondary mt-2 mb-0">36 GB of 50 GB, upgrade for more space.</p>
        </div>
      </div></div></div>
      <div class="col-md-6"><div class="card wdw-card-sm h-100"><div class="card-body p-4 d-flex flex-column">
        <p class="fw-semibold text-body-emphasis mb-3">Bubble value</p>
        <div class="my-auto">
          <div class="pb-bubble-track">
            <div class="progress rounded-pill" style="height:10px" role="progressbar" aria-label="Upload" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar rounded-pill" data-value="45"></div></div>
            <span class="pb-bubble" data-value="45" aria-hidden="true">45%</span>
            <span class="pb-knob" data-value="45" aria-hidden="true"></span>
          </div>
          <p class="small text-body-secondary mt-3 mb-0">Uploading 9 of 20 photos.</p>
        </div>
      </div></div></div>
      <div class="col-md-6"><div class="card wdw-card-sm h-100"><div class="card-body p-4 d-flex flex-column">
        <p class="fw-semibold text-body-emphasis mb-3">File upload</p>
        <div class="my-auto">
          <div class="d-flex align-items-center gap-3 mb-3">
            <span class="wdw-icon flex-none" aria-hidden="true"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/></svg></span>
            <div class="flex-grow-1 min-w-0">
              <div class="fw-medium text-body-emphasis text-truncate">brand-guidelines.pdf</div>
              <div class="small text-body-secondary">14.2 MB of 23.6 MB, about 1 min left</div>
            </div>
            <span class="fw-semibold small text-body-emphasis">60%</span>
          </div>
          <div class="progress rounded-pill" style="height:10px" role="progressbar" aria-label="Uploading brand-guidelines.pdf" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar progress-bar-striped progress-bar-animated rounded-pill" data-value="60"></div></div>
        </div>
      </div></div></div>
      <div class="col-md-6"><div class="card wdw-card-sm h-100"><div class="card-body p-4 d-flex flex-column">
        <p class="fw-semibold text-body-emphasis mb-3">Stacked</p>
        <div class="my-auto">
          <div class="d-flex justify-content-between align-items-baseline mb-2"><span class="fw-medium">Disk usage</span><span class="small text-body-secondary">80% of 256 GB</span></div>
          <div class="progress rounded-pill" style="height:14px" role="img" aria-label="Disk usage: Photos 40%, Docs 25%, Video 15%"><div class="progress-bar" data-value="40" style="width:0"></div><div class="progress-bar bg-opacity-75" data-value="25"></div><div class="progress-bar bg-opacity-50" data-value="15"></div></div>
          <div class="d-flex flex-wrap gap-3 small text-body-secondary mt-3" aria-hidden="true">
            <span><i class="pb-dot bg-primary"></i>Photos 102 GB</span><span><i class="pb-dot bg-primary bg-opacity-75"></i>Docs 64 GB</span><span><i class="pb-dot bg-primary bg-opacity-50"></i>Video 38 GB</span>
          </div>
        </div>
      </div></div></div>
      <div class="col-md-6"><div class="card wdw-card-sm h-100"><div class="card-body p-4 d-flex flex-column">
        <p class="fw-semibold text-body-emphasis mb-3">Ring</p>
        <div class="my-auto d-flex align-items-center gap-4">
          <div class="pb-ring" data-ring="84" role="progressbar" aria-label="Course completion" aria-valuenow="84" aria-valuemin="0" aria-valuemax="100"><span class="fw-bold fs-5 text-body-emphasis">84%</span></div>
          <div>
            <div class="fw-semibold text-body-emphasis">Course completion</div>
            <div class="small text-body-secondary">21 of 25 lessons</div>
            <div class="small fw-medium text-success mt-1">↑ 12% this week</div>
          </div>
        </div>
      </div></div></div>
      <div class="col-md-6"><div class="card wdw-card-sm h-100"><div class="card-body p-4 d-flex flex-column">
        <p class="fw-semibold text-body-emphasis mb-3">Steps</p>
        <div class="my-auto">
          <div class="d-flex gap-2" role="progressbar" aria-label="Setup steps" aria-describedby="pbStepText" aria-valuenow="3" aria-valuemin="0" aria-valuemax="5" aria-valuetext="Step 3 of 5">
            <span class="pb-step on"></span><span class="pb-step on"></span><span class="pb-step on"></span><span class="pb-step"></span><span class="pb-step"></span>
          </div>
          <div class="pb-labels mt-2" aria-hidden="true"><span class="text-body-emphasis fw-semibold">Account</span><span class="text-body-emphasis fw-semibold">Profile</span><span class="text-primary fw-semibold">Domain</span><span class="text-body-secondary">Billing</span><span class="text-body-secondary">Launch</span></div>
          <p class="small text-body-secondary mt-3 mb-0" id="pbStepText">Step 3 of 5, connect your domain</p>
        </div>
      </div></div></div>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.