No.150
BUTTON CSS

Moving Border

ボタンの縁に沿って小さな光が一周し続ける Moving Border。@property で角度を型付きの変数にし、conic-gradient を回転させることで、CSSだけで光を走らせます。

DEMO

CODE

HTML
<div class="demo-stage mvb-stage">
  <button type="button" class="mvb-btn"><span class="mvb-inner">Borders are cool</span></button>
</div>
CSS
@property --mvb-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
.mvb-stage { display:flex; align-items:center; justify-content:center; padding:2rem; background:#0B0B10; min-height:280px; }
.mvb-btn {
  position:relative; padding:2px; border:0; border-radius:14px; cursor:pointer;
  background: conic-gradient(from var(--mvb-angle), transparent 0 72%, #E91B89 82%, #fff 88%, #5BAADE 94%, transparent 100%), rgba(255,255,255,.12);
  animation: mvb-spin 3.2s linear infinite;
  transition: transform .2s ease;
}
.mvb-inner { display:block; padding:.9rem 1.8rem; border-radius:12px; background:#121216; color:#fff; font-family:'Inter',sans-serif; font-weight:600; font-size:.95rem; }
.mvb-btn:hover { transform:translateY(-2px); }
.mvb-btn:focus-visible { outline:2px solid #E91B89; outline-offset:4px; }
@keyframes mvb-spin { to { --mvb-angle: 360deg; } }
@media (prefers-reduced-motion: reduce) {
  .mvb-btn { animation:none; --mvb-angle: 220deg; transition-duration:.01ms; }
}

AI PROMPT

Claude Code Cursor v0
PROMPT
ボタンの縁に沿って小さな光が一周し続ける Moving Border ボタンをCSSだけで作って。@property --mvb-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; } で角度を型付きのカスタムプロパティとして登録する(登録しないとカスタムプロパティは補間されず、アニメーションが途中を飛ばして切り替わる)。外側の button に padding: 2px を取り、background に conic-gradient(from var(--mvb-angle), transparent 0 72%, ピンク 82%, 白 88%, 水色 94%, transparent 100%) と薄い白の2層を敷く。内側の span を濃い色で塗ると、外側の2pxだけが枠として見え、光の帯がその上を回る。@keyframes で --mvb-angle を 360deg まで3.2秒 linear で無限ループさせる。border-radius は外側14px・内側12px(外側 − padding)にして角の太さをそろえる。@media (prefers-reduced-motion: reduce) では回転を止め、光を固定位置に置いたままにする。

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
→ BORDER BEAM → SHIMMER BUTTON → RAINBOW BUTTON

Moving Border(ムービングボーダー)とは

ボタンやカードの縁に沿って、細い光が一定の速さで周回し続ける演出です。Aceternity UI の Moving Border で広まり、ダークテーマのサイトで主要なボタンを控えめに、しかし確実に目立たせる用途に使われます。

当サイトの Border Beam はカードの縁を光線が走る演出、Shimmer Button は表面を光が横切る演出です。本ページはボタンの縁を光の帯が一周する別テーマで、@property を使った conic-gradient の回転という仕組みの違いがあります。

@property による型付きのカスタムプロパティは、グラデーションの角度や色の位置をアニメーションさせる現代的な方法です。JavaScriptもSVGも使わずに済むため、同じ仕組みでカードや入力欄の縁にも応用できます。

よくある質問

@property を使わないとどうなりますか?

未登録のカスタムプロパティは型が分からないため、ブラウザは中間の値を計算できず、アニメーションの最初と最後だけを切り替えます。@property で syntax: '<angle>' と宣言すると角度として補間され、conic-gradient の開始角が滑らかに回ります。Chrome・Edge・Safari・Firefox の現行版で対応しています。

枠の太さや光の長さはどこで変えますか?

枠の太さは外側 button の padding です。2pxを3pxにすれば太くなりますが、内側の border-radius も「外側 − padding」に合わせてください。光の長さは conic-gradient の色の区間で、transparent が終わる 72% を小さくするほど長い光になります。

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

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