Loading ripple
An example of creating a ripple loading animation with Motion for React.
Tutorial
Introduction
The Ripple example shows how to create an expanding ripple loading animation. Three circles scale outward while fading, creating a continuous pulsing effect that's perfect for loading indicators.
This example uses the animate prop to create looping animations with staggered delays, making each ripple start at a different time.
Get started
Let's start with the basic structure. We need three overlapping circles:
"use client"
function LoadingRipple() {
return (
<div className="container">
<div className="ripple-container">
<div className="ripple" />
<div className="ripple" />
<div className="ripple" />
</div>
<StyleSheet />
</div>
)
}
function StyleSheet() {
return (
<style>
{`
.container {
display: flex;
justify-content: center;
align-items: center;
}
.ripple-container {
position: relative;
width: 100px;
height: 100px;
}
.ripple {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border-radius: 50%;
border: 5px solid var(--hue-1);
will-change: transform, opacity;
opacity: 0;
}
`}
</style>
)
}
export default LoadingRipple
The ripples are positioned absolutely so they stack on top of each other.
Related examples
Latest in React
Motion+
Unlock all 400+ examples
- Source code for every Plus example.
- Provide examples direct to your agent via Motion's MCP.
- Lifetime access to new examples and APIs.








