Browse Components

Components

Skeleton

A skeleton is a low-fidelity visual placeholder that represents the loading of interface elements.

DesignUsageAccessibilityUpdates

Purpose

Show loading structure

Skeletons preview the shape of content while data is loading.

Reduce perceived waiting

A matching placeholder reassures users that the page is still working.

Prevent layout jumps

Use skeletons sized like the final content to keep the page stable.

Anatomy

1

Shape (text)

Configuration

Sheen animation

Toggle the animated sheen that signals an active loading state.

Adds the sheening effect to communicate ongoing data loading.

Shape

Use borderRadius to match the shape of the content that will replace the skeleton.

Rounded rectangle. Use for cards, buttons, and inputs.

Rows

Render multiple stacked rows within the skeleton's height to mimic paragraphs of text.

One row. Represents a single line of text.

Dimensions

Skeleton supports custom width and height for matching the loading placeholder to the final content.

Use a simple line-sized skeleton for text placeholders.

Border radius

Border radius lets the skeleton match rounded controls or media shapes.

Use default radius for text-like placeholders.

Structure

Design tokens used

Each row is a colour, spacing, or size value the component uses, and the right-most column tells you where in the component you'll see it.

CategoryTokenValueWhere it's usedGapsgds-gap-xs8pxSpacing between items of the skeletonBordersgds-border-radius-smCorner radius of the skeleton; corner radius of the div

Usage

When to use

  • Use skeleton while content is loading and the final layout is already known.
  • Use it to preserve structure and reduce layout shift while data arrives.

When not to use

  • Do not use skeleton when the wait is too short to notice.
  • Do not leave skeleton visible after real content is ready.

Best practices

Match the skeleton to the shape of the incoming content

Size each placeholder to the element it stands in for so nothing shifts when the real content arrives.

Do not use skeletons for very brief waits

If content loads in under a second, a skeleton flashes in and out. Use a spinner for short waits instead.

Use the sheen animation for active loading

Turn on sheen so loading reads as in progress. A static placeholder looks like a permanent element.

No results found.

Do not use skeletons as decorative placeholders

Skeletons signal loading, showing them in empty states misleads users into thinking content is on the way.

Accessibility considerations

Built-in accessibility

  • Skeletons are loading placeholders.
  • The component does not add custom keyboard behaviour.

Labels and content

  • Use skeletons only while content is loading.
  • Replace the skeleton with real content as soon as it is available.

Focus and interaction

  • Skeleton placeholders should not receive focus.
  • Do not use skeletons as the only status message for long waits.

Keyboard interaction

This component does not have a separate keyboard interaction table because:

  • Skeletons are loading placeholders and should not receive focus.
  • If loading takes time, provide status text or a related control outside the skeleton.

Updates

DateVersionDescription12 Nov 2025v3.5.6Th/fix skeleton ssr in #470.04 Apr 2025v3.0.0- **Skeleton** – Useful for loading states and improving user experience.

Roadmap

Planned itemStatusTargetFuture enhancements for skeletonPlannedTBD

Feedback

Have suggestions or feedback?

Share them with us on Slack → #ask-sgds-v3

Bug Reports

Found a bug or issue?

Report it on GitHub Issues → sgds/components/skeleton

Singapore Government Design System

The Singapore Government Design System was developed to empower teams in creating fast, accessible and mobile-friendly digital services.

Past VersionsSGDS v1SGDS v2