Snippets Animation

Bootstrap 5 Ping Card with Live Latency Sparkline

A live latency card that shows the current ping in milliseconds with a pulsing status dot, a rolling sparkline and average, peak and jitter stats.

Bootstrap 5 No jQuery Feb 2020 2.1K views

<section class="wdw-stage">
  <div class="container" style="max-width:900px">
    <div class="wdw-card overflow-hidden">
      <div class="row g-0">
        <div class="col-md-6 wdw-aurora p-4 p-md-5 d-flex flex-column ping-panel">
          <div class="d-flex align-items-center justify-content-between mb-3">
            <span class="d-inline-flex align-items-center gap-2 fw-semibold">
              <span class="position-relative d-inline-flex" aria-hidden="true">
                <span class="static-dot bg-success" data-paused-dot></span>
                <span class="spinner-grow spinner-grow-sm text-success position-absolute top-0 start-0" data-live-dot></span>
              </span>
              Ping
            </span>
            <span class="badge rounded-pill bg-success-subtle text-success-emphasis border border-success-subtle" data-ping-state>Excellent</span>
          </div>
          <div class="d-flex align-items-baseline gap-2 mb-2">
            <span class="ping-value" data-ping-value>24</span>
            <span class="fs-5 fw-semibold opacity-75">ms</span>
          </div>
          <svg class="ping-spark mt-auto" viewBox="0 0 200 56" preserveAspectRatio="none" role="img" aria-label="Latency over the last 20 samples: 24 ms, excellent" data-spark>
            <path data-spark-area d="" fill="rgba(255,255,255,.14)"/>
            <path data-spark-line d="" fill="none" stroke="#fff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" vector-effect="non-scaling-stroke"/>
          </svg>
        </div>
        <div class="col-md-6 p-4 p-md-5 d-flex flex-column gap-3">
          <div>
            <span class="wdw-eyebrow">Network status</span>
            <h2 class="wdw-heading h4 mb-0">Connection health</h2>
          </div>
          <dl class="row g-3 mb-0" aria-live="off">
            <div class="col-6"><dt class="wdw-muted small fw-medium">Average</dt><dd class="h5 mb-0 fw-bold"><span data-stat="avg">24</span> ms</dd></div>
            <div class="col-6"><dt class="wdw-muted small fw-medium">Peak</dt><dd class="h5 mb-0 fw-bold"><span data-stat="max">24</span> ms</dd></div>
            <div class="col-6"><dt class="wdw-muted small fw-medium">Jitter</dt><dd class="h5 mb-0 fw-bold"><span data-stat="jitter">0</span> ms</dd></div>
            <div class="col-6"><dt class="wdw-muted small fw-medium">Packet loss</dt><dd class="h5 mb-0 fw-bold"><span data-stat="loss">0</span>%</dd></div>
          </dl>
          <div class="d-flex gap-2 mt-auto pt-3 flex-wrap">
            <button type="button" class="btn btn-primary rounded-pill flex-fill" data-ping-toggle aria-pressed="true">Pause</button>
            <button type="button" class="btn btn-outline-secondary info-btn rounded-pill" data-bs-toggle="tooltip" data-bs-title="Round-trip time to the nearest server. Under 50 ms feels instant.">
              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v5M12 8h.01"/></svg>
              Info
            </button>
          </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.