Indicate the loading state of a component or page with Bootstrap spinners, built entirely with HTML, CSS, and no JavaScript.
Use the border spinners for a lightweight loading indicator.
<!-- border spinner -->
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
The border spinner uses currentColor
for its border-color
, meaning you can
customize the color with text color utilities.
You can use any of our text color utilities on the standard spinner.
<!-- primary spinner -->
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- secondary spinner -->
<div class="spinner-border text-secondary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- success spinner -->
<div class="spinner-border text-success" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- danger spinner -->
<div class="spinner-border text-danger" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- warning spinner -->
<div class="spinner-border text-warning" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- info spinner -->
<div class="spinner-border text-info" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- light spinner -->
<div class="spinner-border text-light" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- dark spinner -->
<div class="spinner-border text-dark" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- growing spinner -->
<div class="spinner-grow" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Once again, this spinner is built with currentColor
, so
you can easily change
its appearance with text color
utilities. Here it is in blue, along with the supported variants.
<!-- primary growing spinner -->
<div class="spinner-grow text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- secondary growing spinner -->
<div class="spinner-grow text-secondary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- success growing spinner -->
<div class="spinner-grow text-success" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- danger growing spinner -->
<div class="spinner-grow text-danger" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- warning growing spinner -->
<div class="spinner-grow text-warning" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- info growing spinner -->
<div class="spinner-grow text-info" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- light growing spinner -->
<div class="spinner-grow text-light" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- dark growing spinner -->
<div class="spinner-grow text-dark" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Spinners in Bootstrap are built with rem
s, currentColor
, and display:
inline-flex
. This means
they can easily be resized, recolored, and quickly aligned.
Use margin utilities like .m-5
for easy
spacing.
<!-- margin -->
<div class="spinner-border m-5" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Use flexbox utilities, float utilities, or text alignment utilities to place spinners exactly where you need them in any situation.
Use .d-flex and flex property
to make placement.
<!-- placement flex center -->
<div class="d-flex justify-content-center">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<!-- flex placement right -->
<div class="d-flex align-items-center">
<strong>Loading...</strong>
<div class="spinner-border ms-auto" role="status" aria-hidden="true"></div>
</div>
Use float utilities to make placement.
<!-- floats -->
<div class="clearfix">
<div class="spinner-border float-right" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
Use text alignment utilities to make placement.
<!-- text align -->
<div class="text-center">
<div class="spinner-border" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
Add .spinner-border-sm
and .spinner-grow-sm
to make a smaller
spinner that can quickly be used within other components.
<!-- size -->
<div class="spinner-border spinner-border-sm" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Loading...</span>
</div>
Or, use custom CSS or inline styles to change the dimensions as needed.
<!-- size dimensions chnage -->
<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
<span class="visually-hidden">Loading...</span>
</div>
<!-- button spinner -->
<button class="btn btn-primary" type="button" disabled>
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
<span class="visually-hidden">Loading...</span>
</button>
<button class="btn btn-primary" type="button" disabled>
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
Loading...
</button>
<!-- button growing -->
<button class="btn btn-primary" type="button" disabled>
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
<span class="visually-hidden">Loading...</span>
</button>
<button class="btn btn-primary" type="button" disabled>
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
Loading...
</button>