No.133
BACKGROUND CSS

Progressive Blur

下に向かって徐々に強くぼけていくプログレッシブブラー。backdrop-filter をマスクで段階的に重ね、画面端のコンテンツを自然に溶かすiOS風の質感を再現。

DEMO

PROGRESSIVE BLUR

CODE

HTML
<div class="demo-stage prb-stage">
  <div class="prb-content" aria-hidden="true">
    <span class="prb-row">MOTION LAB — SEE IT. COPY IT. BUILD IT.</span>
    <span class="prb-row">MOTION LAB — SEE IT. COPY IT. BUILD IT.</span>
    <span class="prb-row">MOTION LAB — SEE IT. COPY IT. BUILD IT.</span>
    <span class="prb-row">MOTION LAB — SEE IT. COPY IT. BUILD IT.</span>
    <span class="prb-row">MOTION LAB — SEE IT. COPY IT. BUILD IT.</span>
    <span class="prb-row">MOTION LAB — SEE IT. COPY IT. BUILD IT.</span>
  </div>
  <div class="prb-blur prb-b1" aria-hidden="true"></div>
  <div class="prb-blur prb-b2" aria-hidden="true"></div>
  <div class="prb-blur prb-b3" aria-hidden="true"></div>
  <div class="prb-blur prb-b4" aria-hidden="true"></div>
  <p class="prb-label">PROGRESSIVE BLUR</p>
</div>
CSS
.prb-stage { position:relative; display:flex; align-items:flex-end; justify-content:center; padding:0; background:linear-gradient(135deg,#2B1040 0%,#0B0B10 60%); min-height:280px; overflow:hidden; }
.prb-content { position:absolute; inset:0; display:flex; flex-direction:column; justify-content:center; gap:.7rem; padding:1.5rem; }
.prb-row { font-family:'Oswald',sans-serif; font-size:1.05rem; letter-spacing:.14em; color:rgba(255,255,255,.82); white-space:nowrap; }
.prb-blur { position:absolute; left:0; right:0; bottom:0; pointer-events:none; }
.prb-b1 { height:60%; backdrop-filter:blur(1px);  -webkit-backdrop-filter:blur(1px);
  -webkit-mask-image:linear-gradient(180deg, transparent 0%, #000 32%); mask-image:linear-gradient(180deg, transparent 0%, #000 32%); }
.prb-b2 { height:45%; backdrop-filter:blur(3px);  -webkit-backdrop-filter:blur(3px);
  -webkit-mask-image:linear-gradient(180deg, transparent 0%, #000 40%); mask-image:linear-gradient(180deg, transparent 0%, #000 40%); }
.prb-b3 { height:30%; backdrop-filter:blur(7px);  -webkit-backdrop-filter:blur(7px);
  -webkit-mask-image:linear-gradient(180deg, transparent 0%, #000 50%); mask-image:linear-gradient(180deg, transparent 0%, #000 50%); }
.prb-b4 { height:16%; backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  -webkit-mask-image:linear-gradient(180deg, transparent 0%, #000 60%); mask-image:linear-gradient(180deg, transparent 0%, #000 60%);
  background:linear-gradient(180deg, transparent, rgba(11,11,16,.55)); }
.prb-label { position:relative; z-index:2; padding:0 0 1.4rem; font-family:'Oswald',sans-serif; font-size:.78rem; letter-spacing:.3em; color:#fff; }
@media (prefers-reduced-motion: reduce) {
  .prb-blur { transition:none; }
}

AI PROMPT

Claude Code Cursor v0
PROMPT
下に向かって徐々に強くぼけていくプログレッシブブラーを作って。単一の backdrop-filter に mask を掛けても「ぼけ量そのもの」は変化しないため、ぼかし強度の違うレイヤーを複数重ねるのが正解。手順は、ぼかし 1px / 3px / 7px / 14px の4枚を position: absolute; left:0; right:0; bottom:0 で下端に固定し、高さを 60% / 45% / 30% / 16% と内側ほど小さくする。各レイヤーに mask-image: linear-gradient(180deg, transparent 0%, #000 32%〜60%) を掛けて、上端が透明・下へ行くほど不透明になるようにする。これで下へ行くほど強いぼかしが積み重なり、連続的なグラデーションブラーに見える。-webkit-backdrop-filter と -webkit-mask-image も必ず併記する。最前面のレイヤーには薄い背景色のグラデーションを重ねると、文字の可読性が上がる。全レイヤーに pointer-events: none を付けて操作を邪魔しないこと。用途は、固定ヘッダーやボトムナビの背後、スクロールコンテナの端、ヒーロー下端のフェードアウト。

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

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

BOOKS · PR · AMAZON

📖 なかしまぁ先生のCSSアニメーション入門 📖 UIデザインの心理学 ―わかりやすさ・使いやすさの法則 📖 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
→ GLASSMORPHISM CARD → LIQUID GLASS CARD → BLUR FADE IN

Progressive Blur(段階的ぼかし)とは

下端や上端に向かってぼけ量が連続的に強くなっていく表現です。iOS のコントロールセンターやミュージックアプリで使われて広まり、固定ヘッダーやボトムナビの背後でコンテンツを自然に溶かす目的で採用が増えています。

当サイトの Glassmorphism Card と Liquid Glass Card は、要素の内側を一定のぼかしで曇らせる表現です。本ページは「ぼかしの強度そのものが位置によって変化する」別テーマで、境界線を感じさせずに情報を減衰させたい場面に使います。Blur Fade In はぼかしを解除して現れる出現アニメーションで、こちらとは目的が異なります。

backdrop-filter は1要素につき1強度しか持てないため、強度違いのレイヤーを重ねる以外に実装方法がありません。負荷が高い機能なので、適用面積を画面の2〜3割に抑えるのが実務的な運用です。

よくある質問

なぜレイヤーを4枚も重ねるのですか?

backdrop-filter: blur() の強度は1つの要素につき1つしか指定できず、mask を掛けても「見える範囲」が変わるだけでぼけ量は一定のままです。ぼけ量を連続的に変化させるには、強度の違うレイヤーを段階的に重ねて合成するしかありません。4枚あれば階段が目立たず、実用上は3〜5枚が目安です。

負荷は大きくないですか?

backdrop-filter は背後の描画結果を都度合成するため、通常のフィルターより負荷が高い部類です。全画面に敷き詰めるのではなく、ヘッダー背後やコンテンツ下端など画面の一部(高さの2〜3割)に限定してください。スクロールと同時に動かす場合は特に、レイヤー数を減らす方向で調整します。

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

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