Skeleton

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

DesignUsageAccessibilityUpdates

Purpose

Signal content is coming

Skeleton screens replace blank states with a low-fidelity layout preview, so users see the page structure before the data arrives.

Reduce perceived load time

When users see a skeleton that matches the shape of the incoming content, the wait feels shorter and the transition feels smoother.

Avoid layout shift

Placeholders sized to the actual content prevent the page from jumping around when data loads in, keeping the experience stable.

Anatomy

1

Placeholder surface

2

Loading animation

Configuration

Rows

Skeleton screens use animated placeholder blocks that match the shape of the incoming content.

Renders animated placeholder rows. Use to preserve the page layout and reduce perceived loading time while data is being fetched.

Playground

BETA

Structure

Component tokens

Component tokens are specific to each component. Use the table title as the prefix: gap-xs under sgds/skeleton means sgds/skeleton/gap-xs.

sgds/skeleton
CategoryComponent tokenSemantic tokenValueGapgap-xssgds/gap/xs8pxBorderborder-radius-smsgds/border-radius/smColourbg-translucentsgds/bg-translucentbg-translucent-subtlesgds/bg-translucent-subtleoklch(from #0E0E0E l c h / 0.05)

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 final layout

Skeleton works best when it closely reflects the content that will replace it.

Do not let loading states linger

A loading placeholder should disappear as soon as real content is ready to read.

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

DateVersionDescriptionLoading updates…

Roadmap

Planned itemStatusTargetFuture enhancements for skeletonPlannedTBD

Feedback

Have suggestions or feedback?

Share them with us on Slack → #design-system-feedback

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.