09 / 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 Stacked Layer Reveal Card (Fanned Risograph Deck)
Three coloured plates that fan out and rotate on hover like spreading a deck of risograph prints. The port trades CSS's pseudo-element layers for real <div>s — more markup, but each plate's rest state, fanned state and stagger delay are now readable in one place.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tch-09 w-full min-h-svh grid place-items-center bg-tch09-bg bg-[repeating-linear-gradient(45deg,rgb(0_0_0/0.02)_0_12px,transparent_12px_24px)] font-tch09-sans p-8">
<article tabindex="0" class="group relative w-[320px] h-[410px] cursor-pointer outline-none">
<div class="absolute inset-0 z-1 rounded-2xl bg-tch09-a transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-150 group-hover:-translate-x-7 group-hover:translate-y-5 group-hover:-rotate-6 group-focus-visible:-translate-x-7 group-focus-visible:translate-y-5 group-focus-visible:-rotate-6 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-2 rounded-2xl bg-tch09-b transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-75 group-hover:translate-x-6 group-hover:-translate-y-2 group-hover:rotate-5 group-focus-visible:translate-x-6 group-focus-visible:-translate-y-2 group-focus-visible:rotate-5 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-3 rounded-2xl bg-tch09-c shadow-[0_18px_40px_rgb(0_0_0/0.25)] transition-[translate,box-shadow] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-1.5 group-hover:shadow-[0_30px_60px_rgb(0_0_0/0.35)] group-focus-visible:-translate-y-1.5 motion-reduce:transition-none"></div>
<div class="relative z-4 h-full p-[2.2rem] flex flex-col justify-between text-tch09-ink pointer-events-none">
<span class="text-[0.7rem] tracking-[0.28em] uppercase text-tch09-b">Vinyl Press · 2025</span>
<h2 class="font-tch09-display text-[2.6rem] leading-[0.95] uppercase">Paper<br>Cities</h2>
<p class="text-[0.85rem] leading-[1.6] text-tch09-body">Limited run pressing. Three layers of risograph artwork fan out across the gatefold sleeve.</p>
</div>
</article>
</section><section class="tch-09 w-full min-h-svh grid place-items-center bg-tch09-bg bg-[repeating-linear-gradient(45deg,rgb(0_0_0/0.02)_0_12px,transparent_12px_24px)] font-tch09-sans p-8">
<article tabindex="0" class="group relative w-[320px] h-[410px] cursor-pointer outline-none">
<div class="absolute inset-0 z-1 rounded-2xl bg-tch09-a transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-150 group-hover:-translate-x-7 group-hover:translate-y-5 group-hover:-rotate-6 group-focus-visible:-translate-x-7 group-focus-visible:translate-y-5 group-focus-visible:-rotate-6 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-2 rounded-2xl bg-tch09-b transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-75 group-hover:translate-x-6 group-hover:-translate-y-2 group-hover:rotate-5 group-focus-visible:translate-x-6 group-focus-visible:-translate-y-2 group-focus-visible:rotate-5 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-3 rounded-2xl bg-tch09-c shadow-[0_18px_40px_rgb(0_0_0/0.25)] transition-[translate,box-shadow] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-1.5 group-hover:shadow-[0_30px_60px_rgb(0_0_0/0.35)] group-focus-visible:-translate-y-1.5 motion-reduce:transition-none"></div>
<div class="relative z-4 h-full p-[2.2rem] flex flex-col justify-between text-tch09-ink pointer-events-none">
<span class="text-[0.7rem] tracking-[0.28em] uppercase text-tch09-b">Vinyl Press · 2025</span>
<h2 class="font-tch09-display text-[2.6rem] leading-[0.95] uppercase">Paper<br>Cities</h2>
<p class="text-[0.85rem] leading-[1.6] text-tch09-body">Limited run pressing. Three layers of risograph artwork fan out across the gatefold sleeve.</p>
</div>
</article>
</section>@import "tailwindcss";
@theme {
--color-tch09-bg: #ebe4d8;
--color-tch09-bg: oklch(0.92 0.017 85);
--color-tch09-a: #d94f30;
--color-tch09-a: oklch(0.58 0.18 33);
--color-tch09-b: #f2b138;
--color-tch09-b: oklch(0.8 0.15 78);
--color-tch09-c: #1a1a1a;
--color-tch09-c: oklch(0.2 0 0);
--color-tch09-ink: #f4efe6;
--color-tch09-ink: oklch(0.95 0.01 85);
--color-tch09-body: #c9c2b6;
--color-tch09-body: oklch(0.81 0.015 85);
--font-tch09-sans: 'Archivo', system-ui, sans-serif;
--font-tch09-display: 'Archivo Black', system-ui, sans-serif;
}
.tch-09 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tch09-bg: #ebe4d8;
--color-tch09-bg: oklch(0.92 0.017 85);
--color-tch09-a: #d94f30;
--color-tch09-a: oklch(0.58 0.18 33);
--color-tch09-b: #f2b138;
--color-tch09-b: oklch(0.8 0.15 78);
--color-tch09-c: #1a1a1a;
--color-tch09-c: oklch(0.2 0 0);
--color-tch09-ink: #f4efe6;
--color-tch09-ink: oklch(0.95 0.01 85);
--color-tch09-body: #c9c2b6;
--color-tch09-body: oklch(0.81 0.015 85);
--font-tch09-sans: 'Archivo', system-ui, sans-serif;
--font-tch09-display: 'Archivo Black', system-ui, sans-serif;
}
.tch-09 {
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-tch09-bg: #ebe4d8;
--color-tch09-bg: oklch(0.92 0.017 85);
--color-tch09-a: #d94f30;
--color-tch09-a: oklch(0.58 0.18 33);
--color-tch09-b: #f2b138;
--color-tch09-b: oklch(0.8 0.15 78);
--color-tch09-c: #1a1a1a;
--color-tch09-c: oklch(0.2 0 0);
--color-tch09-ink: #f4efe6;
--color-tch09-ink: oklch(0.95 0.01 85);
--color-tch09-body: #c9c2b6;
--color-tch09-body: oklch(0.81 0.015 85);
--font-tch09-sans: 'Archivo', system-ui, sans-serif;
--font-tch09-display: 'Archivo Black', system-ui, sans-serif;
}
.tch-09 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tch09-bg: #ebe4d8;
--color-tch09-bg: oklch(0.92 0.017 85);
--color-tch09-a: #d94f30;
--color-tch09-a: oklch(0.58 0.18 33);
--color-tch09-b: #f2b138;
--color-tch09-b: oklch(0.8 0.15 78);
--color-tch09-c: #1a1a1a;
--color-tch09-c: oklch(0.2 0 0);
--color-tch09-ink: #f4efe6;
--color-tch09-ink: oklch(0.95 0.01 85);
--color-tch09-body: #c9c2b6;
--color-tch09-body: oklch(0.81 0.015 85);
--font-tch09-sans: 'Archivo', system-ui, sans-serif;
--font-tch09-display: 'Archivo Black', system-ui, sans-serif;
}
.tch-09 {
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=Archivo+Black&family=Archivo:wght@400;600&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=Archivo+Black&family=Archivo:wght@400;600&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- Pseudo-element layers became real elements. That is usually the wrong trade, but here it buys a third plate, per-plate delays and per-plate colour tokens — all of which the two-pseudo ceiling forbade.
delay-150/delay-75/ no delay is the cascade. Three utilities replace what would otherwise be three transition declarations.- UI change from the CSS original: the card is focusable and fans on
group-focus-visible:, and the front plate lifts separately so the deck has a clear top card.
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 Stacked Layer Reveal Card (Fanned Risograph Deck)
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-stacked-layer-reveal-card/
Three coloured plates that fan out and rotate on hover like spreading a deck of risograph prints. The port trades CSS's pseudo-element layers for real <div>s — more markup, but each plate's rest state, fanned state and stagger delay are now readable in one place.
## HTML
```html
<section class="tch-09 w-full min-h-svh grid place-items-center bg-tch09-bg bg-[repeating-linear-gradient(45deg,rgb(0_0_0/0.02)_0_12px,transparent_12px_24px)] font-tch09-sans p-8">
<article tabindex="0" class="group relative w-[320px] h-[410px] cursor-pointer outline-none">
<div class="absolute inset-0 z-1 rounded-2xl bg-tch09-a transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-150 group-hover:-translate-x-7 group-hover:translate-y-5 group-hover:-rotate-6 group-focus-visible:-translate-x-7 group-focus-visible:translate-y-5 group-focus-visible:-rotate-6 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-2 rounded-2xl bg-tch09-b transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-75 group-hover:translate-x-6 group-hover:-translate-y-2 group-hover:rotate-5 group-focus-visible:translate-x-6 group-focus-visible:-translate-y-2 group-focus-visible:rotate-5 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-3 rounded-2xl bg-tch09-c shadow-[0_18px_40px_rgb(0_0_0/0.25)] transition-[translate,box-shadow] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-1.5 group-hover:shadow-[0_30px_60px_rgb(0_0_0/0.35)] group-focus-visible:-translate-y-1.5 motion-reduce:transition-none"></div>
<div class="relative z-4 h-full p-[2.2rem] flex flex-col justify-between text-tch09-ink pointer-events-none">
<span class="text-[0.7rem] tracking-[0.28em] uppercase text-tch09-b">Vinyl Press · 2025</span>
<h2 class="font-tch09-display text-[2.6rem] leading-[0.95] uppercase">Paper<br>Cities</h2>
<p class="text-[0.85rem] leading-[1.6] text-tch09-body">Limited run pressing. Three layers of risograph artwork fan out across the gatefold sleeve.</p>
</div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tch09-bg: #ebe4d8;
--color-tch09-bg: oklch(0.92 0.017 85);
--color-tch09-a: #d94f30;
--color-tch09-a: oklch(0.58 0.18 33);
--color-tch09-b: #f2b138;
--color-tch09-b: oklch(0.8 0.15 78);
--color-tch09-c: #1a1a1a;
--color-tch09-c: oklch(0.2 0 0);
--color-tch09-ink: #f4efe6;
--color-tch09-ink: oklch(0.95 0.01 85);
--color-tch09-body: #c9c2b6;
--color-tch09-body: oklch(0.81 0.015 85);
--font-tch09-sans: 'Archivo', system-ui, sans-serif;
--font-tch09-display: 'Archivo Black', system-ui, sans-serif;
}
.tch-09 {
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 Stacked Layer Reveal Card (Fanned Risograph Deck)
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-stacked-layer-reveal-card/
Three coloured plates that fan out and rotate on hover like spreading a deck of risograph prints. The port trades CSS's pseudo-element layers for real <div>s — more markup, but each plate's rest state, fanned state and stagger delay are now readable in one place.
## HTML
```html
<section class="tch-09 w-full min-h-svh grid place-items-center bg-tch09-bg bg-[repeating-linear-gradient(45deg,rgb(0_0_0/0.02)_0_12px,transparent_12px_24px)] font-tch09-sans p-8">
<article tabindex="0" class="group relative w-[320px] h-[410px] cursor-pointer outline-none">
<div class="absolute inset-0 z-1 rounded-2xl bg-tch09-a transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-150 group-hover:-translate-x-7 group-hover:translate-y-5 group-hover:-rotate-6 group-focus-visible:-translate-x-7 group-focus-visible:translate-y-5 group-focus-visible:-rotate-6 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-2 rounded-2xl bg-tch09-b transition-transform duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] delay-75 group-hover:translate-x-6 group-hover:-translate-y-2 group-hover:rotate-5 group-focus-visible:translate-x-6 group-focus-visible:-translate-y-2 group-focus-visible:rotate-5 motion-reduce:transition-none motion-reduce:group-hover:translate-x-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-hover:rotate-0"></div>
<div class="absolute inset-0 z-3 rounded-2xl bg-tch09-c shadow-[0_18px_40px_rgb(0_0_0/0.25)] transition-[translate,box-shadow] duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:-translate-y-1.5 group-hover:shadow-[0_30px_60px_rgb(0_0_0/0.35)] group-focus-visible:-translate-y-1.5 motion-reduce:transition-none"></div>
<div class="relative z-4 h-full p-[2.2rem] flex flex-col justify-between text-tch09-ink pointer-events-none">
<span class="text-[0.7rem] tracking-[0.28em] uppercase text-tch09-b">Vinyl Press · 2025</span>
<h2 class="font-tch09-display text-[2.6rem] leading-[0.95] uppercase">Paper<br>Cities</h2>
<p class="text-[0.85rem] leading-[1.6] text-tch09-body">Limited run pressing. Three layers of risograph artwork fan out across the gatefold sleeve.</p>
</div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tch09-bg: #ebe4d8;
--color-tch09-bg: oklch(0.92 0.017 85);
--color-tch09-a: #d94f30;
--color-tch09-a: oklch(0.58 0.18 33);
--color-tch09-b: #f2b138;
--color-tch09-b: oklch(0.8 0.15 78);
--color-tch09-c: #1a1a1a;
--color-tch09-c: oklch(0.2 0 0);
--color-tch09-ink: #f4efe6;
--color-tch09-ink: oklch(0.95 0.01 85);
--color-tch09-body: #c9c2b6;
--color-tch09-body: oklch(0.81 0.015 85);
--font-tch09-sans: 'Archivo', system-ui, sans-serif;
--font-tch09-display: 'Archivo Black', system-ui, sans-serif;
}
.tch-09 {
width: 100%;
min-height: 100svh;
}
```How this works
Plates are elements now. The CSS original used ::before and ::after, which caps you at two extra layers and hides their state in a stylesheet. Three real divs cost three lines of markup and give each plate an independent transform, delay and colour.
Each plate states its own fan. group-hover:-translate-x-7 group-hover:translate-y-5 group-hover:-rotate-6 on the back plate, a mirrored pair on the middle one, and a simple lift on the front. The transform origin stays central, so the rotation reads as a shuffle.
The content sits above and out of the way. relative z-4 pointer-events-none keeps the type over the plates without stealing the hover.
Make it yours
- Fan spread: scale each plate's translate pair together, or the deck stops looking like one gesture.
- Add a fourth plate by copying a layer and bumping its
z-anddelay-. - Retheme from
--color-tch09-a/b/c; desaturating them reads as photocopies rather than prints.
Gotchas — read before shipping
- Leave room in the grid — a fanned card is visually wider than its box and will collide with neighbours at tight gaps.
- Each plate needs an explicit
z-; without it, DOM order decides and the front plate can end up behind. - Keep the plates decorative. Anything focusable belongs in the content layer, not in a transformed plate a keyboard user cannot see move.
motion-reduce:should drop the translates and rotations and keep nothing else — there is no informational content in the fan.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Transforms, transitions and stacking contexts are universally supported; the floor is Tailwind v4's generated sheet.