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. Set animation="border" to use it.
<Spinner animation="border" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>All standard visual variants are available for border spinner animation styles by setting the variant property. Alternatively spinners can be custom sized with the style property, or custom CSS classes.
<Spinner animation="border" variant="primary" className="me-2" />
<Spinner animation="border" variant="secondary" className="me-2" />
<Spinner animation="border" variant="success" className="me-2" />
<Spinner animation="border" variant="danger" className="me-2" />
<Spinner animation="border" variant="warning" className="me-2" />
<Spinner animation="border" variant="info" className="me-2" />
<Spinner animation="border" variant="light" className="me-2" />
<Spinner animation="border" variant="dark" />Set animation="grow" to use it.
<Spinner animation="grow" />All standard visual variants are available for growing spinner animation styles by setting the variant property. Alternatively spinners can be custom sized with the style property, or custom CSS classes.
<Spinner animation="grow" variant="primary" className="me-2" />
<Spinner animation="grow" variant="secondary" className="me-2" />
<Spinner animation="grow" variant="success" className="me-2" />
<Spinner animation="grow" variant="danger" className="me-2" />
<Spinner animation="grow" variant="warning" className="me-2" />
<Spinner animation="grow" variant="info" className="me-2" />
<Spinner animation="grow" variant="light" className="me-2" />
<Spinner animation="grow" variant="dark" />Spinners in Bootstrap are built with rems, variant prop etc... This means they can easily be resized, recolored, and quickly aligned.
Use margin utilities like .m-5 for easy spacing.
<Spinner animation="border" role="status" className="m-5">
<span className="visually-hidden">Loading...</span>
</Spinner>Use flexbox utilities, float utilities, or text alignment utilities to place spinners exactly where you need them in any situation.
<div className="d-flex justify-content-center">
<Spinner animation="border" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
</div><div className="d-flex align-items-center">
<strong>Loading...</strong>
<Spinner animation="border" role="status" className="ms-auto">
<span className="visually-hidden">Loading...</span>
</Spinner>
</div><Spinner animation="border" role="status" className="float-end">
<span className="visually-hidden">Loading...</span>
</Spinner><div className="text-center">
<Spinner animation="border" role="status">
<span className="visually-hidden">Loading...</span>
</Spinner>
</div>Add size="sm" to make a smaller spinner that can quickly be used within other components.
<Spinner animation="border" size="sm" className="me-2"/>
<Spinner animation="grow" size="sm" />Or, use custom CSS or inline styles to change the dimensions as needed.
<Spinner animation="border" style={{ width: '3rem', height: '3rem' }} className="me-2" />
<Spinner animation="grow" style={{ width: '3rem', height: '3rem' }} /><Button variant="primary" disabled className="me-2">
<Spinner
as="span"
animation="border"
size="sm"
role="status"
aria-hidden="true"
/>
<span className="visually-hidden">Loading...</span>
</Button>
<Button variant="primary" disabled>
<Spinner
as="span"
animation="border"
size="sm"
role="status"
aria-hidden="true"
/>
Loading...
</Button><Button variant="primary" disabled className="me-2">
<Spinner
as="span"
animation="grow"
size="sm"
role="status"
aria-hidden="true"
/>
<span className="visually-hidden">Loading...</span>
</Button>
<Button variant="primary" disabled>
<Spinner
as="span"
animation="grow"
size="sm"
role="status"
aria-hidden="true"
/>
Loading...
</Button>