16 CSS Fade In Animation Designs 08 / 16
Scale-Down Zoom In Fade
A premium hero that fades in from scale(1.4), shrinking to normal — a dramatic 'punch out' cinematic entrance where content arrives oversized then settles into place.
The code
<div class="fi-08">
<div class="fi-08__hero">
<span class="fi-08__crown">👑</span>
<h1 class="fi-08__title">Scale-Down<br><em>Entrance</em></h1>
<p class="fi-08__sub">Content arrives oversized and shrinks to fit — a cinematic "punch out" effect using scale(1.4) → scale(1) with opacity.</p>
<div class="fi-08__ribbon">
<div class="fi-08__ritem">Premium</div>
<div class="fi-08__ritem">Exclusive</div>
<div class="fi-08__ritem">Gold Tier</div>
</div>
</div>
</div> <div class="fi-08">
<div class="fi-08__hero">
<span class="fi-08__crown">👑</span>
<h1 class="fi-08__title">Scale-Down<br><em>Entrance</em></h1>
<p class="fi-08__sub">Content arrives oversized and shrinks to fit — a cinematic "punch out" effect using scale(1.4) → scale(1) with opacity.</p>
<div class="fi-08__ribbon">
<div class="fi-08__ritem">Premium</div>
<div class="fi-08__ritem">Exclusive</div>
<div class="fi-08__ritem">Gold Tier</div>
</div>
</div>
</div>.fi-08{
--bg:#100c1e;--gold:#f59e0b;--amber:#d97706;--text:#fffbeb;
font-family:'DM Sans',sans-serif;
min-height:340px;border-radius:20px;
display:grid;place-items:center;
padding:40px;overflow:hidden;position:relative;
}
.fi-08::before{
content:'';position:absolute;inset:0;
background:radial-gradient(circle 300px at 50% 50%,rgba(245,158,11,.07),transparent);
}
.fi-08 *,.fi-08 *::before,.fi-08 *::after{box-sizing:border-box;margin:0;padding:0}
.fi-08 ::selection{background:var(--gold);color:#000}
/* scale-down fade: scale(1.4) opacity:0 → scale(1) opacity:1 — dramatic zoom-in from large */
.fi-08__hero{
text-align:center;position:relative;z-index:1;
opacity:0;transform:scale(1.4);
animation:fi-08-zoom-in .9s cubic-bezier(.25,.46,.45,.94) .1s forwards;
}
.fi-08__crown{font-size:3rem;margin-bottom:12px;display:block}
.fi-08__title{
font-family:'Syne',sans-serif;font-size:clamp(2rem,5vw,3.5rem);font-weight:800;
color:var(--text);line-height:1;margin-bottom:8px;
}
.fi-08__title em{
font-style:normal;
background:linear-gradient(90deg,var(--gold),var(--amber));
-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.fi-08__sub{
font-size:1rem;color:rgba(255,251,235,.5);margin:16px 0 28px;max-width:360px;
margin-left:auto;margin-right:auto;line-height:1.6;
}
.fi-08__ribbon{
display:inline-flex;gap:20px;align-items:center;
background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.25);
border-radius:40px;padding:10px 24px;
}
.fi-08__ritem{font-size:.8rem;font-weight:600;color:var(--gold);display:flex;gap:6px;align-items:center}
.fi-08__ritem::before{content:'✦';font-size:.6rem;opacity:.7}
.fi-08__ritem + .fi-08__ritem{border-left:1px solid rgba(245,158,11,.2);padding-left:20px}
@keyframes fi-08-zoom-in{to{opacity:1;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){
.fi-08 *{animation:none!important;opacity:1!important;transform:scale(1)!important}
} .fi-08{
--bg:#100c1e;--gold:#f59e0b;--amber:#d97706;--text:#fffbeb;
font-family:'DM Sans',sans-serif;
min-height:340px;border-radius:20px;
display:grid;place-items:center;
padding:40px;overflow:hidden;position:relative;
}
.fi-08::before{
content:'';position:absolute;inset:0;
background:radial-gradient(circle 300px at 50% 50%,rgba(245,158,11,.07),transparent);
}
.fi-08 *,.fi-08 *::before,.fi-08 *::after{box-sizing:border-box;margin:0;padding:0}
.fi-08 ::selection{background:var(--gold);color:#000}
/* scale-down fade: scale(1.4) opacity:0 → scale(1) opacity:1 — dramatic zoom-in from large */
.fi-08__hero{
text-align:center;position:relative;z-index:1;
opacity:0;transform:scale(1.4);
animation:fi-08-zoom-in .9s cubic-bezier(.25,.46,.45,.94) .1s forwards;
}
.fi-08__crown{font-size:3rem;margin-bottom:12px;display:block}
.fi-08__title{
font-family:'Syne',sans-serif;font-size:clamp(2rem,5vw,3.5rem);font-weight:800;
color:var(--text);line-height:1;margin-bottom:8px;
}
.fi-08__title em{
font-style:normal;
background:linear-gradient(90deg,var(--gold),var(--amber));
-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.fi-08__sub{
font-size:1rem;color:rgba(255,251,235,.5);margin:16px 0 28px;max-width:360px;
margin-left:auto;margin-right:auto;line-height:1.6;
}
.fi-08__ribbon{
display:inline-flex;gap:20px;align-items:center;
background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.25);
border-radius:40px;padding:10px 24px;
}
.fi-08__ritem{font-size:.8rem;font-weight:600;color:var(--gold);display:flex;gap:6px;align-items:center}
.fi-08__ritem::before{content:'✦';font-size:.6rem;opacity:.7}
.fi-08__ritem + .fi-08__ritem{border-left:1px solid rgba(245,158,11,.2);padding-left:20px}
@keyframes fi-08-zoom-in{to{opacity:1;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){
.fi-08 *{animation:none!important;opacity:1!important;transform:scale(1)!important}
}How this works
The hero block starts at opacity: 0; transform: scale(1.4) and animates to opacity: 1; transform: scale(1). This is the inverse of the scale-up pattern: the element begins oversized and contracts to its natural size. The cubic-bezier(.25, .46, .45, .94) is a gentle ease-out — no overshoot — so the shrink feels like a settling, not a bounce.
The scale factor 1.4 is chosen carefully: anything above 1.6 causes the element to clip at container edges, and anything below 1.2 is barely perceptible. Because the element fills most of its container at 1.4×, the entrance reads as a dramatic 'zoom in from large' even with no positional offset. The radial gradient background glow reinforces the sense of depth.
Customize
- Reduce the start scale from
1.4to1.15for a subtle zoom — suits content-heavy hero sections. - Add a slight
translateY(-10px → 0)to the keyframe so the hero appears to drift down as it shrinks. - Change easing to
cubic-bezier(.34,1.2,.64,1)for a tiny overshoot — the hero settles with a bounce. - Add a second element (subtitle) with a
scale(1.2 → 1)reveal delayed 0.3s after the main headline.
Watch out for
- Starting scale(1.4) may cause the element to overflow its container — apply
overflow: hiddento the wrapper if the page doesn't have natural overflow clipping. - Using
easeinstead of the specified ease-out creates a visible acceleration at the end of the shrink — the element appears to slam into its final size. Always use an ease-out curve. - If the element is positioned inside a CSS
transformcontainer (e.g. a slide), the scale animation stacks with the parent transform, resulting in unexpected size at start.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 60+ | 12+ | 60+ | 60+ |
scale() animation is GPU-composited; no prefix required in modern browsers