HomeGetting StartedColor SystemTypographySpacingIconographyLayoutInstallationUsageAngularBlazorReactSvelteVueThemingTypographyCustomizationCSS-Only ComponentsFormsIconsIllustrationsAccessibilityGlobal ConfigurationTailwind CSSSass LibraryForge MCP ServerDropdown OptionsFocus Indicator ClippingAll componentsButtonButton AreaChipFloating Action ButtonIcon ButtonSplit ButtonAutocompleteButton ToggleCalendarCheckboxChip FieldColor PickerDate PickerDate Range PickerFile PickerLabelRadioSelectSliderSwitchText FieldTime PickerApp BarApp LauncherDrawerMenuPaginatorSkip LinkStepperTabsView SwitcherAccordionApp LayoutCardDividerExpansion PanelScaffoldSplit ViewStackStructured CardToolbarBadgeBannerBusy IndicatorCircular ProgressDialogInline MessageLinear ProgressPage StateSkeletonToastTooltipAvatarIconKeyLabel ValueListMeterSecretTableTimelineTimestampTreeKeyboard ShortcutPopoverIntroductionColorTypographySpacingShapeBorderElevationLayeringAnimationUsageIcon LibraryBlocksRoadmapChangelogBlog

Skeleton

A skeleton screen is a low-fidelity placeholder that gradually loads into real content, giving users a visual cue that content is on its way.

Usage

forge-skeleton shapes itself to match the content it’s standing in for through text, avatar, listItem, chip, button, and formField, plus stretch. Use it whenever the size and shape of the incoming content is already known; when it isn’t, use a linear or circular progress indicator, or a busy indicator for a full-page load, instead.

Rules

Do
Use skeleton loading when the size and shape of the incoming content is already known and the wait is longer than a second.Match each skeleton shape to the specific piece of content it stands in for.For a list, two or three skeleton items are enough — they don't need to match the final loaded count.
Don't
Don't use a skeleton when the content's eventual size or shape is unknown — use a progress indicator instead.Don't leave a skeleton on screen once its real content is ready — swap it out immediately.Don't mix skeleton loading and a spinner for the same piece of content.

Basic usage

The default skeleton renders as a generic block; set a shape attribute to match specific content instead.

A generic skeleton block.

Profile layout

Combine avatar and text skeletons to stand in for a profile-style layout while its real content loads.

An avatar paired with text skeletons for a profile card.

List

Set listItem to match the height and spacing of a real list row.

A few list-item skeletons standing in for rows that haven't loaded yet.

Matching other components

Set chip, button, or formField to match the shape of those specific components while their real content loads.

Form field

Form-field skeletons standing in for fields that haven't loaded yet.

Chips

Chip skeletons standing in for chips that haven't loaded yet.

Skeletons are used to provide a placeholder for content that is loading. They have various styles to represent different types of content.

import "@tylertech/forge/skeleton";
Properties
PropertyAttributeTypeDefaultDescription
formFieldform-fieldbooleanfalseApplies form field styles to the skeleton.
buttonbuttonbooleanfalseApplies button styles to the skeleton.
chipchipbooleanfalseApplies chip styles to the skeleton.
listItemlist-itembooleanfalseApplies list item styles to the skeleton.
texttextbooleanfalseApplies text styles to the skeleton.
avataravatarbooleanfalseApplies avatar styles to the skeleton.
stretchstretchbooleanfalseApplies stretch styles to the skeleton.
CSS Parts
NameDescription
::part(root)The root element of the skeleton.
CSS Custom Properties
NameDescription
--forge-skeleton-animation-durationThe duration of the skeleton animation.
--forge-skeleton-widthThe width of the skeleton.
--forge-skeleton-heightThe height of the skeleton.
--forge-skeleton-backgroundThe background color of the skeleton.
--forge-skeleton-shapeThe shape of the skeleton.
--forge-skeleton-marginThe margin of the skeleton.
--forge-skeleton-button-heightThe height of the button skeleton.
--forge-skeleton-button-widthThe width of the button skeleton.
--forge-skeleton-form-field-heightThe height of the form field skeleton.
--forge-skeleton-form-field-widthThe width of the form field skeleton.
--forge-skeleton-chip-heightThe height of the chip skeleton.
--forge-skeleton-chip-widthThe width of the chip skeleton.
--forge-skeleton-chip-shapeThe shape of the chip skeleton.
--forge-skeleton-list-item-heightThe height of the list item skeleton.
--forge-skeleton-list-item-marginThe margin of the list item skeleton.
--forge-skeleton-text-heightThe height of the text skeleton.
--forge-skeleton-gradient-colorThe color of the gradient skeleton.
--forge-skeleton-avatar-sizeThe size of the avatar skeleton.
--forge-skeleton-avatar-shapeThe shape of the avatar skeleton.

Hide from assistive technology

A skeleton is a purely visual loading placeholder — add aria-hidden="true" so screen readers skip over it instead of announcing meaningless placeholder content.

Loading Forge chat…