No.154
BUTTON CSS

Pulsating Button

ボタンの外側に波紋のような輪が繰り返し広がる、脈打つボタン。疑似要素の box-shadow を広げながら透明にするだけの、CSSのみの実装です。

DEMO

CODE

HTML
<div class="demo-stage pls-stage">
  <button type="button" class="pls-btn">今すぐ予約する</button>
</div>
CSS
.pls-stage { display:flex; align-items:center; justify-content:center; padding:2rem; background:#0B0B10; min-height:280px; }
.pls-btn { --pls: 233,27,137;
  position:relative; padding:.95rem 2rem; border:0; border-radius:999px; cursor:pointer;
  background:rgb(var(--pls)); color:#fff; font-family:'Inter',sans-serif; font-weight:600; font-size:.95rem;
  transition: transform .2s ease;
}
.pls-btn::before, .pls-btn::after { content:''; position:absolute; inset:0; border-radius:inherit; pointer-events:none;
  animation: pls-ring 1.8s cubic-bezier(.22,1,.36,1) infinite; }
.pls-btn::after { animation-delay:.9s; }
@keyframes pls-ring {
  0% { box-shadow:0 0 0 0 rgba(var(--pls),.55); }
  100% { box-shadow:0 0 0 18px rgba(var(--pls),0); }
}
.pls-btn:hover { transform:translateY(-2px); }
.pls-btn:focus-visible { outline:2px solid #fff; outline-offset:4px; }
@media (prefers-reduced-motion: reduce) {
  .pls-btn::before, .pls-btn::after { animation:none; box-shadow:0 0 0 4px rgba(var(--pls),.35); }
  .pls-btn { transition-duration:.01ms; }
}

AI PROMPT

Claude Code Cursor v0
PROMPT
ボタンの外側に波紋のような輪が繰り返し広がる Pulsating Button をCSSだけで作って。ボタンの色を RGB の数値だけでカスタムプロパティ --pls(例: 233,27,137)に持たせ、背景は rgb(var(--pls))、波紋は rgba(var(--pls), 透明度) で書く(1か所変えるだけで色を差し替えられる)。::before と ::after を inset:0・border-radius: inherit で重ね、@keyframes で box-shadow を 0 0 0 0 rgba(色,.55) から 0 0 0 18px rgba(色,0) へ1.8秒で広げて無限ループさせる。::after だけ animation-delay を .9秒ずらすと、波紋が途切れず連続して見える。transform: scale ではなく box-shadow の広がりで作るのは、ボタン本体や文字を拡大させずに輪だけを広げるため。ホバーで translateY(-2px)、:focus-visible のアウトラインを残す。@media (prefers-reduced-motion: reduce) では波紋を止め、薄い輪を1本だけ静止表示する。

Acceptance criteria: works with prefers-reduced-motion (animation disabled), zero console errors, zero layout shift

AIエージェントでの実装ガイド → Claude Code でWebアニメーションを実装する

BOOKS · PR · AMAZON

📖 なかしまぁ先生のCSSアニメーション入門 📖 マイクロインタラクション ―UI/UXデザインの神が宿る細部 📖 Fundamentals of Web Animation with GSAP

※当サイトはAmazonアソシエイトプログラムの参加者です。リンクから商品をご購入いただくと、当方に紹介料が発生します。

学びを止めない · AMAZONサブスク

📚 Kindle Unlimited — 技術書・デザイン書が読み放題。30日無料体験 → 🎧 Audible — 移動中に耳で学ぶオーディオブック。30日無料体験 → 📦 Amazon Prime — Prime Reading・配送特典つき。30日無料体験 → 🎵 Music Unlimited — 作業用BGMに。1億曲が聴き放題・30日無料体験 →

※当サイトはAmazonアソシエイトプログラムの参加者です。リンクから商品をご購入いただくと、当方に紹介料が発生します。

RELATED EFFECTS

↗ MORE
→ TAILWIND PULSE CTA → RIPPLE EFFECT → RAINBOW BUTTON

Pulsating Button(パルスボタン)とは

ボタンの外側に波紋のような輪が一定の間隔で広がり続ける、脈打つボタンです。Magic UI にも同じ名前のコンポーネント(Pulsating Button)があり、予約・申し込みなど、画面の中で最も押してほしいボタンに使われます。

当サイトの Tailwind Pulse CTA は Tailwind のユーティリティで作る同系統の演出、Ripple Effect はクリックした位置から波紋が広がる演出です。本ページは押す前から輪が広がり続ける別テーマで、CSSの box-shadow だけで作る点が特徴です。

色をRGBの数値だけでカスタムプロパティに持たせておくと、ボタンの色と波紋の色を1か所で変えられます。ブランドカラーに合わせて使い回す部品として作っておくと便利です。

よくある質問

波紋を transform: scale ではなく box-shadow で作る理由は?

疑似要素を scale で拡大すると、角丸の比率や線の太さも一緒に拡大され、ボタンが横長のときに輪が楕円に歪みます。box-shadow の広がり(spread)はボタンの形に沿って等しい幅で外へ広がるため、どんな形のボタンでもきれいな輪になります。

常に脈打つボタンは使いすぎると逆効果ですか?

動くものは視線を強く引くため、1画面に1つ(予約・購入・登録など最も押してほしいボタン)に絞ると効果があります。複数のボタンが同時に脈打つと、どれが重要か分からなくなります。また、動きを減らす設定の利用者には必ず止めてください。

コードは無料で使えますか?

はい。Motion LabのコードスニペットとAIプロンプトは、クレジット表記なしで自由に使えます。コピーしてそのままプロジェクトに利用できます。