bellhop by actabl

When to use

Use skeleton loaders to provide a preview of content structure while it loads.

Content Loading

Show the shape of content before it's fully loaded.

Progressive Loading

Display placeholders as content streams in.

Better UX

Reduce perceived wait time with visual feedback.

When not to use

  • When content loads quickly (under 300ms)—no loading state needed
  • For error states—show error messages
  • For empty states—use empty-state component
  • When a spinner is more appropriate for indeterminate waits

Common Patterns

Skeleton loaders can be combined to create realistic loading states.

Text Lines

Multiple skeleton lines for text content.

Card Skeleton

Complete card placeholder with image, title, and text.

Avatar with Text

User profile placeholder with circular avatar.

Table Rows

Data table placeholder with multiple rows.

Best Practices

Follow these guidelines when using skeleton loaders.

Do

  • Match skeleton dimensions to actual content
  • Use circle variant for avatars and profile images
  • Combine multiple skeletons to mimic layout
  • Show skeletons for content that takes > 1 second to load
  • Replace skeletons with real content smoothly

Don't

  • Don't use skeleton loaders for instant operations
  • Don't create overly complex skeleton layouts
  • Don't mismatch skeleton and content dimensions
  • Don't show skeletons indefinitely
  • Don't mix skeleton loaders with spinner loaders

Accessibility

Skeleton loaders provide visual feedback with proper accessibility.

Screen Reader

  • Marked with aria-busy="true" while loading
  • aria-label describes loading state
  • Content announcement when loading completes

Visual Design

  • Subtle animation doesn't cause motion sickness
  • Sufficient contrast for visibility
  • respects prefers-reduced-motion setting

Resources

Design and development resources for the Skeleton Loader component.

Figma

Available
View in Figma →

Web Components/Angular

Available
View in Storybook →

React

Available
View in Storybook →