Skip to main content Home
About About the Design SystemRoadmap
Get started OverviewDesignersDevelopers
Foundations OverviewColorGridIconographyInteractionsSpacingTypography
Tokens Overview Global colorbox shadowTypographyborderopacityspacelengthIconBreakpointsMedia Queries
Elements All elements Accordion Alert Announcement Audio player Avatar Back to top Badge Blockquote Breadcrumb Button Card Chip Code block Call to action Dialog Disclosure Footer Health index Icon Jump links Navigation (primary) Navigation (secondary) Pagination PopoverPlanned Progress stepper Scheme toggle Site status Skeleton Skip link Spinner Statistic Subnavigation Surface Switch Table Tabs Tag Tile Timestamp Tooltip Video embed
Theming OverviewColor PalettesCustomizingDevelopers
Patterns All PatternsCardFilterFormLink with iconLogo wallSearch barSticky bannerSticky cardTabsTagTile
Personalization All Personalization PatternsAnnouncement
Accessibility FundamentalsAccessibility toolsAssistive technologiesCI/CDContentContributorsDesignDevelopmentManual testingResourcesScreen readers
Design/code status Release notes Get support

Skeleton

OverviewStyleGuidelinesCodeAccessibilityDemos
UsageAnimationBest practicesUsageAnimationBest practices

Usage

Use a skeleton to convey a page or section’s structure while it’s loading.

Types

The five types of skeleton loaders are body text, heading, circle, square, and rectangle. The type of skeleton used should closely reflect the type or shape of the content that is loading. For example, if you’re loading a round avatar, use the circle skeleton.

A circle skeleton next to a stack of two text skeletons are used to represent an avatar image with account information.

Body text skeleton sizes

Body text skeleton sizes match the amount of space occupied by a line of text, which is calculated by multiplying their font size token by their line height token. The widths of these skeletons are customizable. The table below shows which body text skeleton size corresponds to each font size token.

Body text skeleton size Token names
xs --rh-font-size-body-text-xs
--rh-font-size-body-code-xs
sm --rh-font-size-body-text-sm
--rh-font-size-body-code-sm
md --rh-font-size-body-text-md
--rh-font-size-body-code-md
lg --rh-font-size-body-text-lg
--rh-font-size-body-code-lg
xl --rh-font-size-body-text-xl
--rh-font-size-body-code-xl
2xl --rh-font-size-body-text-2xl
--rh-font-size-code-2xl

Heading skeleton sizes

Heading skeleton sizes work similarly to body text skeletons, and the widths of these skeletons are also customizable. The table below shows which heading skeleton size pairs with each font size token.

Body text skeleton size Token names
xs --rh-font-size-heading-xs
sm --rh-font-size-heading-sm
md --rh-font-size-heading-md
lg --rh-font-size-heading-lg
xl --rh-font-size-heading-xl
2xl --rh-font-size-heading-2xl

Shape skeleton sizes

While the default size for a shape skeleton uses --rh-length-4xl for its height, most shape skeletons will need to use a custom size, and any length token or pixel value can be used to change their dimensions. Choose a size that matches the element or graphic that the skeleton represents.

Animation

The skeleton’s gradient animation will loop until the data is retrieved and disappears when it loads.

Each group of skeletons should have their gradients moving at the same speed to avoid the animation from being too distracting. It’s also recommended to avoid speeding up the animation for the same reason.

Best practices

When not to use

Support cases table with body text skeletons in every row and column, except for the header row.

Do use skeletons when loading content takes longer than a couple seconds.

Text that says, 'Downloading...80% complete' above a medium circle skeleton.

Do not use skeleton loaders for loading times under two seconds or for loading times longer than ten seconds.

Skeleton layouts

Site status table shows websites and statuses. Body text skeletons appear in the status column.

Do mimic the structure of the actual content and use shapes that match the layout elements as closely as possible.

Site status table shows websites and statuses. Three square skeletons appear in the status column for each row.

Do not use shapes that don’t correspond with the elements used in a layout. For example, a circle skeleton should not be used for a line of text.

Progressive loading

Wireframe of a redhat.com page with skeletons only in three cards.

Do use skeleton loaders for parts of a page that take more time to load.

Wireframe of a redhat.com page with only a navigation and a rectangle skeleton that spans the rest of the wireframe.

Do not use one skeleton loader for an entire screen. (Try a spinner or another method instead.)

© 2025 Red Hat Deploys by Netlify