Spinner Component — Astro
Accessible loading spinner with variants and sizes
Spinner Component
An accessible loading spinner for indicating progress when content is loading. Uses role="status" and an aria-label (default: "Loading") so screen readers announce the state. Supports multiple sizes and color variants.
Props
size(string, optional) -sm,md,lg(default: md)variant(string, optional) -primary,success,warning,error,info(default: primary)label(string, optional) - Accessible label for screen readers (default: "Loading")class(string, optional) - Additional CSS classes
Basic Usage
Live Example
astro astro
---
import Spinner from '../../components/Spinner.astro';
---
<Spinner /> Sizes
Live Example
astro astro
<Spinner size="sm" />
<Spinner size="md" />
<Spinner size="lg" /> Variants
Live Example
astro astro
<Spinner variant="primary" />
<Spinner variant="success" />
<Spinner variant="warning" />
<Spinner variant="error" />
<Spinner variant="info" /> Custom Label
Use the label prop to describe the loading context for screen readers (e.g. "Loading results", "Saving…").
Live Example
astro astro
<Spinner label="Loading results…" /> Features
- Accessible -
role="status"andaria-labelso screen readers announce loading - Variants - Primary, success, warning, error, info using theme variables
- Sizes - sm, md, lg
- Reduced motion - Animation disabled when user prefers reduced motion; static segment shown instead
Svelte & Vanilla: Svelte · Vanilla: same HTML and BEM as in Usage above.