Spinners

Indicate the loading state of a component or page with Bootstrap spinners, built entirely with HTML, CSS, and no JavaScript.

Border spinner

Use the border spinners for a lightweight loading indicator.

Loading...
<Spinner animation="border" role="status">
    <span className="visually-hidden">Loading...</span>
</Spinner>

Colors

The border spinner uses currentColor for its border-color, meaning you can customize the color with text color utilities.

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

<Spinner animation="border" variant="primary" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="secondary" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="success" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="danger" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="warning" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="info" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="light" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="border" variant="dark" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>

Growing spinner

If you don’t fancy a border spinner, switch to the grow spinner.

Loading...

<Spinner animation="grow"  role="status">
        <span className="visually-hidden">Loading...</span>
</Spinner>
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

<Spinner animation="grow"  variant="primary" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="secondary" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="success" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="danger" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="warning" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="info" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="light" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  className="dark" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>

Alignment

Spinners in Bootstrap are built with rems, currentColor, and display: inline-flex. This means they can easily be resized, recolored, and quickly aligned.

Margin

Loading...

<Spinner animation="grow"  variant="primary" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="secondary" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="success" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="danger" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="warning" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="info" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  variant="light" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
<Spinner animation="grow"  className="dark" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>

Placement

Use flexbox utilities, float utilities, or text alignment utilities to place spinners exactly where you need them in any situation.

Flex
Loading...

<Spinner animation="border" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
Floats
Loading...

<Spinner animation="border" className="float-end" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>
Text align
Loading...

<Spinner animation="border" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>

Size

Add .spinner-border-sm and .spinner-grow-sm

Loading...
Loading...

<Spinner animation="border" size="sm" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>{' '}
<Spinner animation="grow" size="sm" role="status">
  <span className="visually-hidden">Loading...</span>
</Spinner>

Buttons

Use spinners within buttons to indicate an action is currently processing or taking place.

<Button variant="primary" disabled>
    <Spinner as="span" animation="border" size="sm" role="status" aria-hidden="true"></Spinner>
    <span className="visually-hidden">Loading...</span>
</Button>{' '}
<Button variant="primary" type="button" disabled>
    <Spinner as="span"  animation="border" size="sm" role="status" aria-hidden="true"></Spinner>
    Loading...
</Button>
<Button variant="primary" disabled>
    <Spinner as="span" animation="grow" size="sm" role="status" aria-hidden="true"></Spinner>
    <span className="visually-hidden">Loading...</span>
</Button>{' '}
<Button variant="primary" type="button" disabled>
    <Spinner as="span"  animation="grow" size="sm" role="status" aria-hidden="true"></Spinner>
    Loading...
</Button>