18 / 33
All 33 in 33 Tailwind CSS Card Hover Effects
- 01Tailwind 3D Tilt & Parallax Card with Depth Layers
- 02Tailwind Glowing Gradient & Glassmorphic Border Card
- 03Tailwind Image Zoom Card with Slide-Up Content Reveal
- 04Tailwind 3D Flip Card (Front to Back) with backface-visibility
- 05Tailwind Sibling De-emphasis Pricing Grid with has-hover
- 06Tailwind Minimalist Elevation Card with Layered Dynamic Shadows
- 07Tailwind Elastic Lift Card with Spring Cubic-Bezier
- 08Tailwind Animated Conic Gradient Border Card with @property
- 09Tailwind Stacked Layer Reveal Card (Fanned Risograph Deck)
- 10Tailwind Holographic Foil Shimmer Card with mix-blend-mode
- 11Tailwind Curtain Reveal Card (Parting Velvet Halves)
- 12Tailwind Corner Peel Card with clip-path Triangles
- 13Tailwind Neon Sign Card with Layered Text-Shadow Glow
- 14Tailwind CRT Scanline Terminal Card with Sweeping Beam
- 15Tailwind Depth Parallax Landscape Card with Layer Multipliers
- 16Tailwind Cursor Spotlight Card with Masked Border Highlight
- 17Tailwind 3D Tilt Product Card with Specular Glare
- 18Tailwind Slide-Up Panel Card with Peek Header Swap
- 19Tailwind Credit Card Flip with Magnetic Strip & CVV
- 20Tailwind RGB Channel-Split Glitch Card
- 21Tailwind Rotating Conic Aura Card with Blurred Gradient Bloom
- 22Tailwind Blob-to-Rectangle Border Morph Card
- 23Tailwind Magnetic Float Orb Card with Pointer Attraction
- 24Tailwind Typewriter Reveal Card with Steps Animation & Caret
- 25Tailwind Magazine Overlay Slide Card (Full-Face Panel Takeover)
- 26Tailwind Breathing Film Grain Card with SVG Turbulence Noise
- 27Tailwind Frosted Glass Intensify Card with Deepening Backdrop Blur
- 28Tailwind Blueprint Reveal Card with Circular clip-path Wipe
- 29Tailwind Cursor-Anchored Shockwave Ripple Card
- 30Tailwind Color-Burn Ignition Card with Grayscale-to-Fire Hover
- 31Tailwind Prismatic Light Sweep Card with Screen Blend Bar
- 32Tailwind Book Cover Open Card with Hinged 3D Rotation
- 33Tailwind Drifting Aurora Ribbons Card with Blurred Gradient Bands
Tailwind Slide-Up Panel Card with Peek Header Swap
The pattern at its plainest: a hero image with a small label that slides away as an opaque detail panel rises to replace it. No zoom, no frost flourish — and that makes it the version to copy when the disclosure is the point.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tch-18 w-full min-h-svh grid place-items-center bg-tch18-bg font-tch18-sans p-8">
<article class="group relative w-[330px] h-[440px] rounded-[20px] overflow-hidden cursor-pointer shadow-[0_18px_40px_rgb(0_0_0/0.2)]">
<div class="absolute inset-0 bg-[linear-gradient(160deg,#ff6b4a,#c91f5f_60%,#5b1e6b)] after:content-[''] after:absolute after:inset-0 after:bg-[radial-gradient(circle_at_30%_25%,rgb(255_255_255/0.3),transparent_50%)]"></div>
<div class="absolute inset-x-0 bottom-0 z-3 p-7 text-white transition-[translate,opacity] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-32 group-hover:opacity-0 group-focus-within:-translate-y-32 group-focus-within:opacity-0 motion-reduce:transition-opacity">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase opacity-85">Travel · 12 min</span>
<h2 class="font-extrabold text-[1.9rem] leading-[1.05] mt-1">Sunset Over<br>Cartagena</h2>
</div>
<div class="absolute inset-x-0 bottom-0 z-4 p-7 bg-tch18-panel/95 backdrop-blur-[8px] text-tch18-ink translate-y-full transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:translate-y-0 group-focus-within:translate-y-0 motion-reduce:transition-none">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase text-tch18-acc">Travel · 12 min read</span>
<h3 class="font-extrabold text-[1.7rem] leading-[1.05] mt-1.5 mb-3">Sunset Over Cartagena</h3>
<p class="text-[0.85rem] leading-[1.6] text-tch18-body">Walled-city rooftops, fruit carts at dusk, and where to find the best ceviche after dark.</p>
<a href="#" class="inline-flex items-center min-h-11 mt-3 font-tch18-mono text-[0.78rem] tracking-[0.08em] text-tch18-acc no-underline rounded transition-colors duration-200 hover:text-white focus-visible:outline-2 focus-visible:outline-tch18-acc focus-visible:outline-offset-2">READ STORY →</a>
</div>
</article>
</section><section class="tch-18 w-full min-h-svh grid place-items-center bg-tch18-bg font-tch18-sans p-8">
<article class="group relative w-[330px] h-[440px] rounded-[20px] overflow-hidden cursor-pointer shadow-[0_18px_40px_rgb(0_0_0/0.2)]">
<div class="absolute inset-0 bg-[linear-gradient(160deg,#ff6b4a,#c91f5f_60%,#5b1e6b)] after:content-[''] after:absolute after:inset-0 after:bg-[radial-gradient(circle_at_30%_25%,rgb(255_255_255/0.3),transparent_50%)]"></div>
<div class="absolute inset-x-0 bottom-0 z-3 p-7 text-white transition-[translate,opacity] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-32 group-hover:opacity-0 group-focus-within:-translate-y-32 group-focus-within:opacity-0 motion-reduce:transition-opacity">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase opacity-85">Travel · 12 min</span>
<h2 class="font-extrabold text-[1.9rem] leading-[1.05] mt-1">Sunset Over<br>Cartagena</h2>
</div>
<div class="absolute inset-x-0 bottom-0 z-4 p-7 bg-tch18-panel/95 backdrop-blur-[8px] text-tch18-ink translate-y-full transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:translate-y-0 group-focus-within:translate-y-0 motion-reduce:transition-none">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase text-tch18-acc">Travel · 12 min read</span>
<h3 class="font-extrabold text-[1.7rem] leading-[1.05] mt-1.5 mb-3">Sunset Over Cartagena</h3>
<p class="text-[0.85rem] leading-[1.6] text-tch18-body">Walled-city rooftops, fruit carts at dusk, and where to find the best ceviche after dark.</p>
<a href="#" class="inline-flex items-center min-h-11 mt-3 font-tch18-mono text-[0.78rem] tracking-[0.08em] text-tch18-acc no-underline rounded transition-colors duration-200 hover:text-white focus-visible:outline-2 focus-visible:outline-tch18-acc focus-visible:outline-offset-2">READ STORY →</a>
</div>
</article>
</section>@import "tailwindcss";
@theme {
--color-tch18-bg: #e8e4dd;
--color-tch18-bg: oklch(0.92 0.008 85);
--color-tch18-panel: #0c0810;
--color-tch18-panel: oklch(0.12 0.015 300);
--color-tch18-ink: #f0ece6;
--color-tch18-ink: oklch(0.94 0.008 85);
--color-tch18-body: #c4bdb4;
--color-tch18-body: oklch(0.79 0.015 85);
--color-tch18-acc: #ff8a6b;
--color-tch18-acc: oklch(0.76 0.15 35);
--font-tch18-sans: 'Sora', system-ui, sans-serif;
--font-tch18-mono: 'JetBrains Mono', ui-monospace, monospace;
}
.tch-18 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tch18-bg: #e8e4dd;
--color-tch18-bg: oklch(0.92 0.008 85);
--color-tch18-panel: #0c0810;
--color-tch18-panel: oklch(0.12 0.015 300);
--color-tch18-ink: #f0ece6;
--color-tch18-ink: oklch(0.94 0.008 85);
--color-tch18-body: #c4bdb4;
--color-tch18-body: oklch(0.79 0.015 85);
--color-tch18-acc: #ff8a6b;
--color-tch18-acc: oklch(0.76 0.15 35);
--font-tch18-sans: 'Sora', system-ui, sans-serif;
--font-tch18-mono: 'JetBrains Mono', ui-monospace, monospace;
}
.tch-18 {
width: 100%;
min-height: 100svh;
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-tch18-bg: #e8e4dd;
--color-tch18-bg: oklch(0.92 0.008 85);
--color-tch18-panel: #0c0810;
--color-tch18-panel: oklch(0.12 0.015 300);
--color-tch18-ink: #f0ece6;
--color-tch18-ink: oklch(0.94 0.008 85);
--color-tch18-body: #c4bdb4;
--color-tch18-body: oklch(0.79 0.015 85);
--color-tch18-acc: #ff8a6b;
--color-tch18-acc: oklch(0.76 0.15 35);
--font-tch18-sans: 'Sora', system-ui, sans-serif;
--font-tch18-mono: 'JetBrains Mono', ui-monospace, monospace;
}
.tch-18 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tch18-bg: #e8e4dd;
--color-tch18-bg: oklch(0.92 0.008 85);
--color-tch18-panel: #0c0810;
--color-tch18-panel: oklch(0.12 0.015 300);
--color-tch18-ink: #f0ece6;
--color-tch18-ink: oklch(0.94 0.008 85);
--color-tch18-body: #c4bdb4;
--color-tch18-body: oklch(0.79 0.015 85);
--color-tch18-acc: #ff8a6b;
--color-tch18-acc: oklch(0.76 0.15 35);
--font-tch18-sans: 'Sora', system-ui, sans-serif;
--font-tch18-mono: 'JetBrains Mono', ui-monospace, monospace;
}
.tch-18 {
width: 100%;
min-height: 100svh;
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@400;600;800&family=JetBrains+Mono:wght@400;500&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@400;600;800&family=JetBrains+Mono:wght@400;500&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- The two-element swap is clearer in utilities than in CSS: both class lists sit side by side in the markup, so the overlap in their travel is visible while you write it.
- No stylesheet residue beyond tokens — this is one of the ports that ends up shorter than its source.
- UI change from the CSS original: the CTA is a real
<a href>with a 44px target (it was an anchor with no href), andgroup-focus-within:now drives the whole swap.
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Slide-Up Panel Card with Peek Header Swap
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-slide-up-panel-card-peek-swap/
The pattern at its plainest: a hero image with a small label that slides away as an opaque detail panel rises to replace it. No zoom, no frost flourish — and that makes it the version to copy when the disclosure is the point.
## HTML
```html
<section class="tch-18 w-full min-h-svh grid place-items-center bg-tch18-bg font-tch18-sans p-8">
<article class="group relative w-[330px] h-[440px] rounded-[20px] overflow-hidden cursor-pointer shadow-[0_18px_40px_rgb(0_0_0/0.2)]">
<div class="absolute inset-0 bg-[linear-gradient(160deg,#ff6b4a,#c91f5f_60%,#5b1e6b)] after:content-[''] after:absolute after:inset-0 after:bg-[radial-gradient(circle_at_30%_25%,rgb(255_255_255/0.3),transparent_50%)]"></div>
<div class="absolute inset-x-0 bottom-0 z-3 p-7 text-white transition-[translate,opacity] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-32 group-hover:opacity-0 group-focus-within:-translate-y-32 group-focus-within:opacity-0 motion-reduce:transition-opacity">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase opacity-85">Travel · 12 min</span>
<h2 class="font-extrabold text-[1.9rem] leading-[1.05] mt-1">Sunset Over<br>Cartagena</h2>
</div>
<div class="absolute inset-x-0 bottom-0 z-4 p-7 bg-tch18-panel/95 backdrop-blur-[8px] text-tch18-ink translate-y-full transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:translate-y-0 group-focus-within:translate-y-0 motion-reduce:transition-none">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase text-tch18-acc">Travel · 12 min read</span>
<h3 class="font-extrabold text-[1.7rem] leading-[1.05] mt-1.5 mb-3">Sunset Over Cartagena</h3>
<p class="text-[0.85rem] leading-[1.6] text-tch18-body">Walled-city rooftops, fruit carts at dusk, and where to find the best ceviche after dark.</p>
<a href="#" class="inline-flex items-center min-h-11 mt-3 font-tch18-mono text-[0.78rem] tracking-[0.08em] text-tch18-acc no-underline rounded transition-colors duration-200 hover:text-white focus-visible:outline-2 focus-visible:outline-tch18-acc focus-visible:outline-offset-2">READ STORY →</a>
</div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tch18-bg: #e8e4dd;
--color-tch18-bg: oklch(0.92 0.008 85);
--color-tch18-panel: #0c0810;
--color-tch18-panel: oklch(0.12 0.015 300);
--color-tch18-ink: #f0ece6;
--color-tch18-ink: oklch(0.94 0.008 85);
--color-tch18-body: #c4bdb4;
--color-tch18-body: oklch(0.79 0.015 85);
--color-tch18-acc: #ff8a6b;
--color-tch18-acc: oklch(0.76 0.15 35);
--font-tch18-sans: 'Sora', system-ui, sans-serif;
--font-tch18-mono: 'JetBrains Mono', ui-monospace, monospace;
}
.tch-18 {
width: 100%;
min-height: 100svh;
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Slide-Up Panel Card with Peek Header Swap
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-slide-up-panel-card-peek-swap/
The pattern at its plainest: a hero image with a small label that slides away as an opaque detail panel rises to replace it. No zoom, no frost flourish — and that makes it the version to copy when the disclosure is the point.
## HTML
```html
<section class="tch-18 w-full min-h-svh grid place-items-center bg-tch18-bg font-tch18-sans p-8">
<article class="group relative w-[330px] h-[440px] rounded-[20px] overflow-hidden cursor-pointer shadow-[0_18px_40px_rgb(0_0_0/0.2)]">
<div class="absolute inset-0 bg-[linear-gradient(160deg,#ff6b4a,#c91f5f_60%,#5b1e6b)] after:content-[''] after:absolute after:inset-0 after:bg-[radial-gradient(circle_at_30%_25%,rgb(255_255_255/0.3),transparent_50%)]"></div>
<div class="absolute inset-x-0 bottom-0 z-3 p-7 text-white transition-[translate,opacity] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-32 group-hover:opacity-0 group-focus-within:-translate-y-32 group-focus-within:opacity-0 motion-reduce:transition-opacity">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase opacity-85">Travel · 12 min</span>
<h2 class="font-extrabold text-[1.9rem] leading-[1.05] mt-1">Sunset Over<br>Cartagena</h2>
</div>
<div class="absolute inset-x-0 bottom-0 z-4 p-7 bg-tch18-panel/95 backdrop-blur-[8px] text-tch18-ink translate-y-full transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:translate-y-0 group-focus-within:translate-y-0 motion-reduce:transition-none">
<span class="font-tch18-mono text-[0.7rem] tracking-[0.18em] uppercase text-tch18-acc">Travel · 12 min read</span>
<h3 class="font-extrabold text-[1.7rem] leading-[1.05] mt-1.5 mb-3">Sunset Over Cartagena</h3>
<p class="text-[0.85rem] leading-[1.6] text-tch18-body">Walled-city rooftops, fruit carts at dusk, and where to find the best ceviche after dark.</p>
<a href="#" class="inline-flex items-center min-h-11 mt-3 font-tch18-mono text-[0.78rem] tracking-[0.08em] text-tch18-acc no-underline rounded transition-colors duration-200 hover:text-white focus-visible:outline-2 focus-visible:outline-tch18-acc focus-visible:outline-offset-2">READ STORY →</a>
</div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tch18-bg: #e8e4dd;
--color-tch18-bg: oklch(0.92 0.008 85);
--color-tch18-panel: #0c0810;
--color-tch18-panel: oklch(0.12 0.015 300);
--color-tch18-ink: #f0ece6;
--color-tch18-ink: oklch(0.94 0.008 85);
--color-tch18-body: #c4bdb4;
--color-tch18-body: oklch(0.79 0.015 85);
--color-tch18-acc: #ff8a6b;
--color-tch18-acc: oklch(0.76 0.15 35);
--font-tch18-sans: 'Sora', system-ui, sans-serif;
--font-tch18-mono: 'JetBrains Mono', ui-monospace, monospace;
}
.tch-18 {
width: 100%;
min-height: 100svh;
}
```How this works
Two elements trade places. The peek (category + title over the image) rises and fades; the panel (full detail) rises into the space it vacates. Both are driven by the same group-hover:, both use the same curve, and the small overlap in their travel is what makes it feel like a swap rather than two animations.
The panel is opaque on purpose. Demo 03 frosts its sheet so the product photo reads through. Here the copy is the payload, so the panel is a near-solid dark plate — the more legible choice for article text.
Nothing is hidden from assistive tech. The panel is translated, never display:none or visibility:hidden, so its content is in the accessibility tree at rest.
Make it yours
- Direction: swap
translate-y-fullfor-translate-x-fullto slide in from the left. - Speed: 500ms is the default; 250ms feels utilitarian, 700ms editorial.
- Cascade the CTA in with
delay-100for a two-beat reveal.
Gotchas — read before shipping
overflow-hiddenon the card, or the panel is visible parked below it.- Transform, never
bottom. The transform composites; the offset relayouts. group-focus-within:is required, not optional — the panel holds the link and the summary.- Under
motion-reduce:fade rather than snap; a 440px panel appearing instantly is jarring.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Transforms, transitions and :focus-within are universally supported; the floor is Tailwind v4's generated sheet.