Snippets Scrollbar

Bootstrap 5 Scrollable Vertical Timeline with Time

A scrollable vertical timeline card with a time column, colour-coded markers and short event descriptions.

Bootstrap 5 Bootstrap 6 No jQuery May 2020 2.3K views

<section class="wdw-stage">
  <div class="container" style="max-width:560px">
    <div class="wdw-card tl-card">
      <div class="d-flex align-items-center justify-content-between p-4 pb-3">
        <div>
          <span class="wdw-eyebrow">Today</span>
          <h2 class="h4 wdw-heading mb-0">User timeline</h2>
        </div>
        <span class="badge rounded-pill text-primary-emphasis bg-primary-subtle px-3 py-2">5 events</span>
      </div>
      <div class="tl-scroll px-4" tabindex="0" role="region" aria-label="Scrollable timeline">
        <ol class="tl list-unstyled mb-0">
          <li class="tl-item is-past">
            <time class="tl-time small fw-semibold text-body-secondary">9:30 AM</time>
            <span class="tl-mark" aria-hidden="true"><span class="tl-dot"></span></span>
            <div class="tl-body small text-body-secondary"><span class="badge rounded-pill bg-body-secondary text-body-secondary mb-2">Call</span><h3 class="h6 fw-bold text-body-emphasis mb-1">Meeting with client</h3><p class="mb-0">Call with the USA client, today at <a href="#" class="fw-semibold">12:00 PM</a>.</p></div>
          </li>
          <li class="tl-item is-now" aria-current="true">
            <time class="tl-time small fw-semibold text-primary">12:25 PM</time>
            <span class="tl-mark" aria-hidden="true"><span class="tl-dot"></span></span>
            <div class="tl-body small text-body-secondary"><span class="badge rounded-pill bg-primary text-bg-primary mb-2">Now</span> <span class="badge rounded-pill bg-body-secondary text-body-secondary mb-2">Meetings</span><h3 class="h6 fw-bold text-body-emphasis mb-1">Back-to-back meetings</h3><p class="mb-1">UK client meeting at <b class="fw-semibold text-body-emphasis">3:00 PM</b></p><p class="mb-0">Follow-up call at <b class="fw-semibold text-body-emphasis">5:00 PM</b></p></div>
          </li>
          <li class="tl-item">
            <time class="tl-time small fw-semibold text-body-secondary">6:00 PM</time>
            <span class="tl-mark" aria-hidden="true"><span class="tl-dot"></span></span>
            <div class="tl-body small text-body-secondary"><span class="badge rounded-pill bg-body-secondary text-body-secondary mb-2">Team</span><h3 class="h6 fw-bold text-body-emphasis mb-1">Product launch sync</h3><p class="mb-0">Team discussion about the new product launch and upcoming features.</p></div>
          </li>
          <li class="tl-item">
            <time class="tl-time small fw-semibold text-body-secondary">9:00 AM</time>
            <span class="tl-mark" aria-hidden="true"><span class="tl-dot"></span></span>
            <div class="tl-body small text-body-secondary"><span class="badge rounded-pill bg-body-secondary text-body-secondary mb-2">Marketing</span><h3 class="h6 fw-bold text-body-emphasis mb-1">Marketing check-in</h3><p class="mb-0">Review the popularity of last month's product with marketing.</p></div>
          </li>
          <li class="tl-item">
            <time class="tl-time small fw-semibold text-body-secondary">10:30 PM</time>
            <span class="tl-mark" aria-hidden="true"><span class="tl-dot"></span></span>
            <div class="tl-body small text-body-secondary"><span class="badge rounded-pill bg-body-secondary text-body-secondary mb-2">Task</span><h3 class="h6 fw-bold text-body-emphasis mb-1">Purchase hosting plan</h3><p class="mb-0">Buy the hosting plan agreed with the development team.</p></div>
          </li>
        </ol>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 6.0.0-alpha.1 (ES modules, no jQuery). Load Bootstrap through an import map and run the JavaScript as type="module" — the downloaded file is already set up that way. Alpha releases can still change class names.

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