Skeleton
Display a placeholder preview of your content before the data gets loaded to reduce load-time frustration.
The data for your components might not be immediately available. You can increase the perceived performance for users by using skeletons. It feels like things are happening immediately, then the information is incrementally displayed on the screen (Cf. Avoid The Spinner).
The component is designed to be used directly in your components. For instance:
{item ? (
<img style={{ width: 210, height: 118 }} alt={item.title} src={item.src} />
) : (
<Skeleton variant="rect" width={210} height={118} />
)}
Variants
The component supports 3 shape variants.
<Skeleton variant="text" />
<Skeleton variant="circle" width={40} height={40} />
<Skeleton variant="rect" width={210} height={118} />
Animations
By default, the skeleton pulsate, but you can change the animation for a wave or disable it entirely.
<Skeleton />
<Skeleton animation={false} />
<Skeleton animation="wave" />
Don Diablo @ Tomorrowland Main Stage 2019 | Official…
Queen - Greatest Hits
Calvin Harris, Sam Smith - Promises (Official Video)
Why First Minister of Scotland Nicola Sturgeon thinks GDP is the wrong measure of a country's success:
Inferring dimensions
In addition to accepting width
and height
props, the component can also infer the dimensions.
It works well when it comes to typography as its height is set using em
units.
<Typography variant="h1">
{loading ? <Skeleton /> : 'h1'}
</Typography>
h1
h3
body1
But when it comes to other components, you may not want to repeat the width and
height. In these instances, you can pass children
and it will
infer its width and height from them.
loading
? <Skeleton><Avatar /></Skeleton>
: <Avatar src={data.avatar} />
.
Ted