Getting StartedComponentsDesign TokensThemingTheme SynthesizerFrameworksAccessibilityUtilitiesServer RenderingBrowser SupportContributingChangelogApp ShellAspect GridAuth ShellCenterContainerDashboard GridFloat BarInsetMasonryPage HeaderPage LayoutResizableResponsive SwitcherSectionSettings LayoutSplit PaneStatus BarStickyToolbarAnchor NavBottom NavBreadcrumbBreadcrumb MenuCommand BarDrawerFooterLinkMenubarNavigation MenuPage IndicatorPaginationRailScroll IndicatorScroll SpyScroll To TopSidebarSkip LinkStepper NavTabsTop BarTree ViewAccordionAspect RatioAvatarAvatar GroupCardCarouselCollapsibleColor SwatchCTA BannerDividerEmpty StateFeature CardIconImageImage CompareImage HotspotsInfinite ScrollLightboxMarqueeQR CodeScroll AreaSkeletonSpinnerStackVideoVirtual ListActivity HeatmapAnimated NumberBadgeBar ListChartClockComparisonCountdown TimerData GridDescription ListDiffGaugeJSON TreeKanbanLevel MeterListMeterSparklineStatStepperTagTimelineUptimeValue CardWaveformBlockquoteCode BlockCode GroupGradient TextHighlightKbdKeyboard MapMarkdownNumber FormatProseTerminalTextTime AgoTruncateTypewriterButtonButton GroupCalendarCheckboxChipColor PickerComboboxCopy ButtonDate PickerDate Range PickerField ListFieldsetFile UploadFormHotkeyIcon ButtonImage CropperInline EditInputInput GroupKnobLabelMasked InputMulti SelectNumber InputPassword InputPin InputRadio GroupRange SliderRatingSearchSegmented ControlSelectSignature PadSliderSortable ListSwitch GroupTag InputTextareaTheme ToggleTime PickerToggleTransfer ListTree SelectAlertAnnouncementBannerCommand PaletteConfirmConnection StatusContext MenuConversationDialogDropdown MenuHover CardLoading OverlayNotification PanelPopoverProgressSheetToastTooltip
ARC UIARC Radiant Components
v4.9DocsComponentsTokensSynthesizer
Getting StartedFrameworksServer RenderingDesign TokensThemingTheme SynthesizerTypographyUtilitiesAll ComponentsAccessibilityBrowser SupportChangelogContributingStatsApp ShellAspect GridAuth ShellCenterContainerDashboard GridFloat BarInsetMasonryPage HeaderPage LayoutResizableResponsive SwitcherSectionSettings LayoutSplit PaneStatus BarStickyToolbarAnchor NavBottom NavBreadcrumbBreadcrumb MenuCommand BarDrawerFooterLinkMenubarNavigation MenuPage IndicatorPaginationRailScroll IndicatorScroll SpyScroll To TopSidebarSkip LinkStepper NavTabsTop BarTree ViewAccordionAspect RatioAvatarAvatar GroupCardCarouselCollapsibleColor SwatchCTA BannerDividerEmpty StateFeature CardIconImageImage CompareImage HotspotsInfinite ScrollLightboxMarqueeQR CodeScroll AreaSkeletonSpinnerStackVideoVirtual ListActivity HeatmapAnimated NumberBadgeBar ListChartClockComparisonCountdown TimerData GridDescription ListDiffGaugeJSON TreeKanbanLevel MeterListMeterSparklineStatStepperTagTimelineUptimeValue CardWaveformBlockquoteCode BlockCode GroupGradient TextHighlightKbdKeyboard MapMarkdownNumber FormatProseTerminalTextTime AgoTruncateTypewriterButtonButton GroupCalendarCheckboxChipColor PickerComboboxCopy ButtonDate PickerDate Range PickerField ListFieldsetFile UploadFormHotkeyIcon ButtonImage CropperInline EditInputInput GroupKnobLabelMasked InputMulti SelectNumber InputPassword InputPin InputRadio GroupRange SliderRatingSearchSegmented ControlSelectSignature PadSliderSortable ListSwitch GroupTag InputTextareaTheme ToggleTime PickerToggleTransfer ListTree SelectAlertAnnouncementBannerCommand PaletteConfirmConnection StatusContext MenuConversationDialogDropdown MenuHover CardLoading OverlayNotification PanelPopoverProgressSheetToastTooltip

Skeleton

Loading placeholder with shimmer animation.

ComponentsSkeleton
contentstatic
<arc-skeleton>

Overview

Skeleton is a loading placeholder that mimics the shape of content before it arrives, reducing perceived wait times and preventing layout shift. It uses a shimmer animation (a linear gradient that sweeps left to right every 1.8 seconds) to signal that data is loading. It is less intrusive than a spinner and previews the page structure. Three variant shapes cover common content patterns: `text` renders a single-line bar (full width, 1em height) for paragraph placeholders, `circle` produces a perfect circle for avatar placeholders (height auto-matches width when not explicitly set), and `rect` creates a rectangular block for images, cards, or media thumbnails. Custom `width` and `height` properties let you match the exact dimensions of the content being loaded. The shimmer gradient uses `--bg-elevated` and `--border-subtle` tokens so the animation works in both light and dark themes. The component sets `role="status"`, `aria-label="Loading"`, and `aria-busy="true"` for screen reader users who cannot see the visual animation.

Guidelines

When to use

  • Match skeleton dimensions to the actual content they replace to prevent layout shift
  • Combine multiple skeletons to represent a full content layout (avatar + text lines)
  • Use the text variant in a stack with varying widths for realistic paragraph placeholders
  • Use the circle variant sized to match your avatar component dimensions
  • Remove skeletons immediately when content loads: do not add artificial delays

When not to use

  • Do not use skeletons for actions that take under 200ms: the flash is more distracting than helpful
  • Do not stack more than 5-6 skeleton lines: it looks like a broken page rather than a loading state
  • Do not use a rect skeleton without setting width and height: it will collapse to zero size
  • Do not mix skeletons with spinners on the same screen; choose one loading pattern
  • Do not animate skeleton opacity on top of the shimmer: the dual animation is visually noisy

Features

  • Three shape variants: text (line), circle (avatar), and rect (block)
  • Shimmer animation using a sweeping linear gradient at 1.8s intervals
  • Custom width and height properties to match the content being loaded
  • Circle variant auto-matches height to width when height is not set
  • Theme-aware shimmer using `--bg-elevated` and `--border-subtle` tokens
  • Accessibility attributes built in: `role="status"`, `aria-label`, and `aria-busy`
  • CSS part (skeleton) for external animation or style overrides

Preview

Usage

<arc-skeleton variant="text" width="200px"></arc-skeleton>
<arc-skeleton variant="circle" width="48px"></arc-skeleton>
<arc-skeleton variant="rect" width="300px" height="120px"></arc-skeleton>

API

widthstring''
CSS width value (e.g. "200px", "100%")
heightstring''
CSS height value; circle auto-matches width when omitted
variant'text' | 'circle' | 'rect''text'
Shape of the skeleton: text for lines, circle for avatars, rect for blocks
countnumber1
Renders multiple skeleton items stacked vertically with spacing. Useful for placeholder lists.

See Also