Loading Spinner

Use loading spinners to indicate that content is loading or an action is being processed.

Default Spinner

<div class="spinner"></div>

Spinner Sizes

<div class="spinner spinner-sm"></div>
<div class="spinner"></div>
<div class="spinner spinner-lg"></div>

Spinner with Text

Loading...
<div style="display: flex; align-items: center; gap: var(--space-3);">
  <div class="spinner"></div>
  <span class="loading-text">Loading...</span>
</div>

Spinner in Button

<button class="btn btn-primary" disabled>
  <div class="spinner spinner-sm"></div>
  Submitting...
</button>

Loading Overlay

Use a loading overlay to block interaction with the entire page during critical operations.

Processing your request...
<div class="loading-overlay">
  <div class="spinner spinner-lg"></div>
  <span class="loading-text">Processing your request...</span>
</div>

When to Use

Use a spinner when:

  • Loading content asynchronously
  • Submitting a form
  • Processing a payment
  • Any operation that takes noticeable time

Don't use a spinner when:

  • Content loads very quickly (under 300ms)
  • You can show skeleton content instead
  • The user doesn't need to wait

Usage Guidelines

Do

  • Show a spinner after a short delay (300-500ms)
  • Include text explaining what's happening
  • Use appropriate sizes for the context
  • Disable interactive elements during loading

Don't

  • Don't show spinners for instant operations
  • Don't use multiple spinners on the same page
  • Don't leave spinners indefinitely (add timeouts)

Accessibility

  • Add role="status" and aria-live="polite" for screen readers
  • Include loading text that screen readers can announce
  • Ensure sufficient motion contrast
  • Consider users with vestibular disorders (reduced motion)

CSS Classes

/* Spinner */
.spinner { }
.spinner-sm { }
.spinner-lg { }

/* Loading overlay */
.loading-overlay { }
.loading-text { }