<div class = "skeleton-overview" >
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
.skeleton-overview header {
.skeleton-overview header ods-skeleton:last-child {
.skeleton-overview ods-skeleton {
.skeleton-overview ods-skeleton:nth-child ( 1 ) {
.skeleton-overview ods-skeleton:nth-child ( 3 ) {
.skeleton-overview ods-skeleton:nth-child ( 4 ) {
import { OdsSkeleton } from '@ods/components/react.skeleton' ;
.skeleton-overview header {
.skeleton-overview header ods-skeleton:last-child {
.skeleton-overview ods-skeleton {
.skeleton-overview ods-skeleton:nth-child(1) {
.skeleton-overview ods-skeleton:nth-child(3) {
.skeleton-overview ods-skeleton:nth-child(4) {
<div className = "skeleton-overview" >
There are two built-in effects, sheen and pulse. Effects are intentionally subtle, as they can be distracting when used extensively. The default is none, which displays a static, non-animated skeleton.
<div class = "skeleton-effects" >
<ods-skeleton effect = "none" ></ods-skeleton>
<ods-skeleton effect = "sheen" ></ods-skeleton>
<ods-skeleton effect = "pulse" ></ods-skeleton>
font-size : var ( --ods-sys-font-size-sm );
.skeleton-effects ods-skeleton:not ( :first-child ) {
import { OdsSkeleton } from '@ods/components/react.skeleton' ;
font-size: var(--sl-font-size-small);
.skeleton-effects ods-skeleton:not(:first-child) {
<div className = "skeleton-effects" >
< OdsSkeleton effect = "none" />
< OdsSkeleton effect = "sheen" />
< OdsSkeleton effect = "pulse" />
Use multiple skeletons and some clever styles to simulate paragraphs.
<div class = "skeleton-paragraphs" >
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
.skeleton-paragraphs ods-skeleton {
.skeleton-paragraphs ods-skeleton:nth-child ( 2 ) {
.skeleton-paragraphs ods-skeleton:nth-child ( 4 ) {
.skeleton-paragraphs ods-skeleton:last-child {
import { OdsSkeleton } from '@ods/components/react.skeleton' ;
.skeleton-paragraphs ods-skeleton {
.skeleton-paragraphs ods-skeleton:nth-child(2) {
.skeleton-paragraphs ods-skeleton:nth-child(4) {
.skeleton-paragraphs ods-skeleton:last-child {
<div className = "skeleton-paragraphs" >
Set a matching width and height to make a circle, square, or rounded avatar skeleton.
<div class = "skeleton-avatars" >
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
<ods-skeleton></ods-skeleton>
.skeleton-avatars ods-skeleton {
margin-right : var ( --ods-sys-space-16 );
.skeleton-avatars ods-skeleton:nth-child ( 1 ) {
.skeleton-avatars ods-skeleton:nth-child ( 2 ) {
--border-radius : var ( --ods-sys-border-radius-md );
import { OdsSkeleton } from '@ods/components/react.skeleton' ;
.skeleton-avatars ods-skeleton {
margin-right: var(--ods-sys-space-16);
.skeleton-avatars ods-skeleton:nth-child(1) {
.skeleton-avatars ods-skeleton:nth-child(2) {
--border-radius: var(--ods-sys-border-radius-md);
<div className = "skeleton-avatars" >
import '@ods/components/web.skeleton' ;
import { OdsSkeleton } from '@ods/components/react.skeleton' ;
Note: You only need to import a web component once in your code , as it registers itself globally when defined, allowing you to use it anywhere within your application without needing to re-import it each time you want to use the component.
import { OdsSkeleton } from '@ods/components/react.skeleton' ;
This component is still in development and cannot be imported at this time.
Properties Please note, both and are shown in the table below. Unless otherwise specified, the property and attribute names are identical.
Property/Attribute Reflects Type Default effect
'pulse' | 'sheen' | 'none' 'none'
Parts Name Description base The component's base wrapper. indicator The skeleton's indicator which is responsible for its color and animation.