リップルエフェクトボタン

インタラクション Medium #js #ripple #animation #button

ボタンをクリックした位置から波紋が広がる「リップルエフェクト」です。マテリアルデザイン風の触感を、軽いJavaScriptとCSSアニメーションだけで再現しています。クリックされた座標を getBoundingClientRect でボタン内の相対位置に変換し、その地点を中心に円の span を生成。

▶ プレビュー

解説

ボタンをクリックした位置から波紋が広がる「リップルエフェクト」です。マテリアルデザイン風の触感を、軽いJavaScriptとCSSアニメーションだけで再現しています。クリックされた座標を getBoundingClientRect でボタン内の相対位置に変換し、その地点を中心に円の span を生成。CSSの @keyframesscale を大きくしながら opacity を0にして消し、アニメーション後は setTimeout で要素を取り除いてDOMをきれいに保ちます。

使う場面

  • 送信やCTAなど「押した実感」を出したいボタン
  • アプリ風のタップフィードバックが欲しいUI
  • シンプルなボタンに一手間の動きを足したい時

波紋の色は rgba(255,255,255,.35)、広がる速さは animation:rpl .5s で調整します。ボタン側に overflow:hidden が必要で、これで円が枠からはみ出さずに収まります。複数回連打しても都度生成・削除するので破綻しません。注意点として、動きを抑えたい利用者のために prefers-reduced-motion の時は波紋を出さない分岐を足すとより丁寧です。クリック領域は十分な大きさを確保し、押し心地と分かりやすさを両立させましょう。

使用例・適したシーン

  • お問い合わせフォームの送信ボタン
  • 資料ダウンロードの CTA
  • ヒーローセクションの主要 CTA
  • サブスク・申込ボタン

よくある質問

波紋の色や速さは変えられますか?
波紋の色はCSSのrgba値、広がる速さはrplアニメーションの秒数を変更します。明るい背景のボタンでは波紋を濃い色にすると見やすくなります。
波紋がボタンからはみ出してしまいます。
ボタンにoverflow:hiddenが付いているか確認してください。これがないと円が枠の外まで広がってしまいます。また波紋要素はアニメーション後に自動削除されるので、連打してもDOMに溜まりません。
追加日:2026-05-19
← すべてのスニペットへ戻る