Skip to component content

Show an indeterminate loading state using the same loader-circle icon as the reference, spun with Bootstrap's own animation.

Loading updates
Loading updates

Usage

Use .spinner-border or .spinner-grow for indeterminate loading: work is happening, but completion cannot be measured as a percentage. Render it with role="status" or an accessible loading label, and pair it with visible text when the wait affects surrounding content.

Bootstrap spinners are built with HTML and CSS, use currentColor, and do not need JavaScript to animate. Use utilities to align, recolor, or size them, and use the small variant inside buttons or dense inline controls.

Use .progress instead when completion can be measured. When a spinner replaces a button label, disable the action while it is running and keep the label clear enough that users know what is still in progress.

Default

A rotating loader-circle icon built from currentColor, so it adapts to any theme without extra CSS.

Spinner
Loading
<div class="spinner" role="status">
  <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
  <span class="visually-hidden">Loading</span>
</div>

Small

Set size="sm" to use inside compact contexts like buttons.

Spinner
Loading
<div class="spinner spinner-sm" role="status">
  <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
  <span class="visually-hidden">Loading</span>
</div>

Button

Set loading=true on a button to swap its leading icon for a spinner.

Spinner
<div class="d-flex gap-2">
  <button class="btn btn-primary" type="button" disabled aria-busy="true">
    <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
    Loading...
  </button>
  <button class="btn btn-outline-secondary" type="button" disabled aria-busy="true">
    <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
    Please wait
  </button>
</div>

RTL

Use the same loading row translated exactly into Arabic, Hebrew, and English; the spinner itself has no directional geometry, so only the label and its order change.

جارٍ تحميل التحديثات
جارٍ تحميل التحديثات
<div class="d-flex align-items-center gap-2" dir="rtl">
  <div class="spinner" role="status">
    <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
    <span class="visually-hidden">جارٍ تحميل التحديثات</span>
  </div>
  <span>جارٍ تحميل التحديثات</span>
</div>
טוען עדכונים
טוען עדכונים
<div class="d-flex align-items-center gap-2" dir="rtl">
  <div class="spinner" role="status">
    <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
    <span class="visually-hidden">טוען עדכונים</span>
  </div>
  <span>טוען עדכונים</span>
</div>
Loading updates
Loading updates
<div class="d-flex align-items-center gap-2" dir="ltr">
  <div class="spinner" role="status">
    <i class="lucide lucide-loader-circle" data-icon="inline-start" aria-hidden="true"></i>
    <span class="visually-hidden">Loading updates</span>
  </div>
  <span>Loading updates</span>
</div>

Component reference

Status
Accepted
Runtime
native HTML/CSS
Markup
Bootstrap/native HTML
Reference

For Bootstrap's source behavior and reduced-motion handling, see the Bootstrap Spinners documentation.

Settings

Theme
Choose how Moo UI looks on this device.
Sidebar
Choose how the sidebar sits on the page.
Theme Builder
Tune catalog tokens and chart colors for this browser.
Base color
Theme color
Chart color
Heading font
Body font
Radius
Direction
Choose the reading direction. RTL flips the layout live.
Reset

Restore the default appearance.