Skip to main content
The Spinner component provides a visual loading indicator to show that content is being loaded or processed.

Basic usage

<flx-spinner></flx-spinner>

Properties

size
'small' | 'medium' | 'large' | number
default:"medium"
Size of the spinner. Can use preset sizes or custom pixel value
color
string
Color of the spinner (CSS color value)
variant
'circle' | 'dots' | 'bars'
default:"circle"
Visual style of the spinner
overlay
boolean
default:"false"
Shows spinner with semi-transparent overlay
message
string
Optional loading message displayed below spinner

Examples

<flx-spinner></flx-spinner>

<flx-spinner size="small"></flx-spinner>
<flx-spinner size="medium"></flx-spinner>
<flx-spinner size="large"></flx-spinner>

Size presets

SizePixels
small16px
medium24px
large48px

Styling

flx-spinner {
  --flx-spinner-color: #3b82f6;
  --flx-spinner-size: 24px;
  --flx-spinner-border-width: 2px;
  --flx-spinner-speed: 1s;
  --flx-spinner-overlay-background: rgba(255, 255, 255, 0.8);
  --flx-spinner-overlay-backdrop-blur: 2px;
  --flx-spinner-message-color: #6b7280;
  --flx-spinner-message-margin: 12px;
}

Common patterns

Full page loading

<flx-spinner
  *ngIf="appLoading"
  [overlay]="true"
  size="large"
  message="Loading application...">
</flx-spinner>

<div *ngIf="!appLoading" class="app-content">
  <!-- App content -->
</div>

Section loading

<flx-card>
  <h3>User Profile</h3>
  
  <div *ngIf="!loadingProfile; else loading">
    <!-- Profile content -->
  </div>

  <ng-template #loading>
    <flx-spinner message="Loading profile..."></flx-spinner>
  </ng-template>
</flx-card>

Button loading state

<button
  [disabled]="submitting"
  (click)="onSubmit()">
  <flx-spinner
    *ngIf="submitting"
    size="small"
    style="margin-right: 8px;">
  </flx-spinner>
  {{ submitting ? 'Submitting...' : 'Submit' }}
</button>

Accessibility

The Spinner component provides accessibility support:
  • role="status" for loading indicators
  • aria-label describing the loading state
  • aria-live="polite" for screen reader announcements
  • Message text is announced to screen readers

Best practices

  • Always show a spinner for operations taking >500ms
  • Provide descriptive messages for long operations
  • Use overlay spinners for full-page loading
  • Use inline/button spinners for component-level loading
  • Consider skeleton screens for better perceived performance
  • Don’t nest multiple spinners
  • Match spinner color to your brand
  • Ensure adequate contrast with background
For operations that might take a long time, consider showing a progress bar or percentage instead of just a spinner.
  • Message - For status messages
  • Button - For buttons with loading states

Build docs developers (and LLMs) love