NUIv3.0.7

Skeleton

A composable, accessible Skeleton component for modern React applications.

tsx
import { Skeleton } from '@nofinite/nui';

Interactive Preview


A placeholder component used to indicate loading content while preserving layout structure. It supports multiple sizes, shimmer animation, shape variants, and composable helpers for common UI patterns.


Usage

Basic usage

tsx
import { Skeleton } from '@nofinite/nui';

<Skeleton />;

Custom width and height

tsx
<Skeleton width={200} height={20} />

Circle skeleton

tsx
<Skeleton circle width={48} />

Disable animation

tsx
<Skeleton animated={false} />

Helper Components

Text

tsx
<Skeleton.Text width="60%" />

Paragraph

tsx
<Skeleton.Paragraph lines={3} />

Avatar

tsx
<Skeleton.Avatar size={40} />

Button

tsx
<Skeleton.Button width={120} height={40} />

Card

tsx
<Skeleton.Card />


Variants

Size variants

tsx
<Skeleton size="xs" />
<Skeleton size="sm" />
<Skeleton size="md" />
<Skeleton size="lg" />
<Skeleton size="xl" />

Available variants

  • xs
  • sm
  • md
  • lg
  • xl

Guidelines

  • xs/sm → dense UI or metadata lines
  • md → default text placeholders
  • lg/xl → headings or large elements

States

  • Animated shimmer
  • Static (animation disabled)
  • Circle shape
  • Explicit size override
  • Dark mode
  • Reduced motion (respects OS preference)

Accessibility

  • Uses role="presentation"
  • Hidden from assistive technologies by default (aria-hidden)
  • Respects prefers-reduced-motion
  • Prevents pointer interaction
  • Preserves layout to avoid CLS (Cumulative Layout Shift)


Best Practices

Do

  • Match skeleton layout with real content
  • Disable animation for long-loading screens if performance sensitive
  • Use circle skeleton for avatars and icons
  • Use paragraph helper for text-heavy layouts
  • Combine helpers to mirror complex UI

Don’t

  • Use skeleton for extremely short loading durations
  • Animate excessively in data-dense views
  • Display skeleton after content is partially loaded
  • Replace error states with skeleton
  • Use mismatched skeleton sizes causing layout shift

API Reference

PropTypeDefaultDescription
sizeenummdThe predefined height mapping for the skeleton
widthstring | numberExplicit width override (supports numbers as px, or strings like '100%')
heightstring | numberExplicit height override (supports numbers as px, or strings like '50px')
animatedbooleantrueEnables or disables the sweeping shimmer animation. Defaults to true.
circlebooleanfalseForces the skeleton into a perfect circle, ignoring the size height
ariaHiddenbooleantrueHides the element from screen readers. Defaults to true (recommended).