波紋のようなアニメーション

モーション種別
  • フワッと系
コンポーネント
  • 背景
トリガー
  • 常時
技術
  • CSSのみ

概要

背景が波紋のように広がるアニメーションです。

実装は、波紋を入れたい背景の擬似要素before, afterを使っています。

擬似要素に--ripple-colortransparent(透明)を交互にグラデーションさせることで波を表現しています。
波の中心はbackground-positionで調整が可能です。

アニメーションは透明→表示→透明とすることで、アニメーションの継ぎ目をなめらかにしています。

擬似要素afterのアニメーションの開始をずらすことで、継続的な波を表現しています。

ポイントは--ripple-colorに背景色の明度が明るい色を指定することで、自然な波を表現している点です。

また、テキストなどを入れる場合は、spanタグなどで囲みz-indexで波(擬似要素)よりも前面に持ってくる必要があります。

コードサンプル

HTML

<div class="ripple">
  <span class="ripple-text">TEXT</span>
</div>

CSS

.ripple {
  --anim-time: 8s;
  --ripple-color: #0e4694;
  
  position: relative;
  display: grid;
  place-items: center;
  width: 70%;
  height: 70%;
  color: #f4f5f9;
  background: #08254f;
  overflow: hidden;
}

.ripple::before,
.ripple::after {
  content: "";
  position: absolute;
  left: 20%;
  top: 5%;
  width: 200%;
  aspect-ratio: 1 /1;
  background: radial-gradient(
    circle,
    var(--ripple-color) 5%,
    transparent 10%,
    var(--ripple-color) 15%,
    transparent 20%,
    var(--ripple-color) 30%,
    transparent 40%,
    var(--ripple-color) 60%,
    transparent 70%
  );
  border-radius: 50%;
  transform: translate(-50%, -50%) scale(1);
  opacity: 0;
  animation: ripple-effect var(--anim-time) linear infinite;
}
.ripple::after {
  animation-delay: calc(var(--anim-time) / 2);
}
.ripple-text {
  position: relative;
  z-index: 1;
}
@keyframes ripple-effect {
  0% {
    transform: translate(-50%, -50%) scale(0.5);
    opacity: 0;
  }
  50% {
    opacity: 0.6;
  }
  100% {
    transform: translate(-50%, -50%) scale(1);
    opacity: 0;
  }
}

お問い合わせ Contact

制作のご依頼やその他ご相談は、お問い合わせフォームにて受け付けております。

お問い合わせフォームへ