Ripple background

리플 배경

Rings that grow larger and fade from a central point, staggered so new ones keep spreading outward on a loop.

Also known as: Concentric ringsPulse rings background
···
html
<div class="rip">
  <span class="ring" style="animation-delay:0s"></span>
  <span class="ring" style="animation-delay:.9s"></span>
  <span class="ring" style="animation-delay:1.8s"></span>
  <span class="ring" style="animation-delay:2.7s"></span>
  <div class="core"></div>
</div>
css
.rip{position:relative;width:min(220px,80%);aspect-ratio:1;display:grid;place-items:center}
.ring{position:absolute;width:44px;height:44px;border-radius:50%;border:2px solid var(--accent);
  animation:ripple 3.6s cubic-bezier(.2,.6,.35,1) infinite}
.core{width:20px;height:20px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 30px 6px color-mix(in srgb,var(--accent) 65%,transparent)}
@keyframes ripple{0%{transform:scale(1);opacity:.7}100%{transform:scale(5.2);opacity:0}}

Animate a plain-bordered circle's transform: scale and opacity downward together, and that's one ripple. As it grows, the border-width stays fixed while the circle itself expands, so the ring reads as thinning out — the same fading you'd expect from a real ripple losing energy as it spreads.

Stack several identical circles and give each a different animation-delay, and new ripples appear to be born continuously, like drops falling into a pond. Anchoring a single glowing dot at the centre adds the sense that "a signal is originating here."

The ripple effect in the interaction category fires once at the point you click, as feedback; a ripple background is decorative and loops automatically on its own, independent of any user input — that's the distinction.

When to use

Use behind a "live" or "broadcasting now" indicator, or to signal an active real-time connection. Keep it as a standalone background element — overlapping content gets distracting.