14 / 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 CRT Scanline Terminal Card with Sweeping Beam
A phosphor-green cold-storage terminal with static scanlines, a refresh beam that sweeps top to bottom, a blinking block cursor and a CRT vignette. Four stacked overlays, two keyframes, and every one of them addressed from the markup.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tch-14 w-full min-h-svh grid place-items-center bg-tch14-bg font-tch14-mono p-8">
<article tabindex="0" class="group relative w-[340px] h-[430px] rounded-[10px] overflow-hidden cursor-pointer outline-none bg-tch14-card border border-tch14-green/60 shadow-[0_0_25px_rgb(0_255_120/0.12),inset_0_0_30px_rgb(0_255_120/0.05)] focus-visible:outline-2 focus-visible:outline-tch14-green focus-visible:outline-offset-4">
<div class="relative z-1 h-full p-[2.2rem] flex flex-col justify-between text-tch14-green [text-shadow:0_0_4px_rgb(56_255_142/0.6)]">
<span class="text-[0.8rem] tracking-[0.1em] opacity-70">> SYSTEM/READY_</span>
<h2 class="font-tch14-display text-[3.4rem] leading-[0.95]">VAULT<br>OS 9<span class="inline-block w-[0.6ch] bg-tch14-green animate-tch14-blink motion-reduce:animate-none"> </span></h2>
<p class="text-[0.85rem] leading-[1.6] opacity-85">Cold-storage terminal for archival data. Phosphor-green display, zero network exposure.</p>
<div class="flex justify-between text-[0.75rem] border-t border-dashed border-tch14-green/40 pt-3 opacity-70"><span>UPTIME 4096d</span><span>MEM 64K OK</span></div>
</div>
<div class="absolute inset-0 z-2 pointer-events-none bg-[repeating-linear-gradient(0deg,rgb(0_0_0/0.25)_0_1px,transparent_1px_3px)]"></div>
<div class="absolute inset-x-0 -top-20 h-20 z-3 pointer-events-none opacity-0 transition-opacity duration-300 bg-linear-to-b from-transparent via-tch14-green/20 to-transparent group-hover:opacity-100 group-hover:animate-tch14-sweep group-focus-visible:opacity-100 group-focus-visible:animate-tch14-sweep motion-reduce:animate-none motion-reduce:group-hover:animate-none"></div>
<div class="absolute inset-0 z-4 pointer-events-none bg-[radial-gradient(ellipse_at_center,transparent_60%,rgb(0_0_0/0.5))]"></div>
</article>
</section><section class="tch-14 w-full min-h-svh grid place-items-center bg-tch14-bg font-tch14-mono p-8">
<article tabindex="0" class="group relative w-[340px] h-[430px] rounded-[10px] overflow-hidden cursor-pointer outline-none bg-tch14-card border border-tch14-green/60 shadow-[0_0_25px_rgb(0_255_120/0.12),inset_0_0_30px_rgb(0_255_120/0.05)] focus-visible:outline-2 focus-visible:outline-tch14-green focus-visible:outline-offset-4">
<div class="relative z-1 h-full p-[2.2rem] flex flex-col justify-between text-tch14-green [text-shadow:0_0_4px_rgb(56_255_142/0.6)]">
<span class="text-[0.8rem] tracking-[0.1em] opacity-70">> SYSTEM/READY_</span>
<h2 class="font-tch14-display text-[3.4rem] leading-[0.95]">VAULT<br>OS 9<span class="inline-block w-[0.6ch] bg-tch14-green animate-tch14-blink motion-reduce:animate-none"> </span></h2>
<p class="text-[0.85rem] leading-[1.6] opacity-85">Cold-storage terminal for archival data. Phosphor-green display, zero network exposure.</p>
<div class="flex justify-between text-[0.75rem] border-t border-dashed border-tch14-green/40 pt-3 opacity-70"><span>UPTIME 4096d</span><span>MEM 64K OK</span></div>
</div>
<div class="absolute inset-0 z-2 pointer-events-none bg-[repeating-linear-gradient(0deg,rgb(0_0_0/0.25)_0_1px,transparent_1px_3px)]"></div>
<div class="absolute inset-x-0 -top-20 h-20 z-3 pointer-events-none opacity-0 transition-opacity duration-300 bg-linear-to-b from-transparent via-tch14-green/20 to-transparent group-hover:opacity-100 group-hover:animate-tch14-sweep group-focus-visible:opacity-100 group-focus-visible:animate-tch14-sweep motion-reduce:animate-none motion-reduce:group-hover:animate-none"></div>
<div class="absolute inset-0 z-4 pointer-events-none bg-[radial-gradient(ellipse_at_center,transparent_60%,rgb(0_0_0/0.5))]"></div>
</article>
</section>@import "tailwindcss";
@keyframes tch14-sweep {
0% {
top: -80px;
}
100% {
top: 100%;
}
}
@keyframes tch14-blink {
50% {
opacity: 0;
}
}
@theme {
--color-tch14-bg: #04110a;
--color-tch14-bg: oklch(0.14 0.03 155);
--color-tch14-card: #021006;
--color-tch14-card: oklch(0.12 0.03 155);
--color-tch14-green: #38ff8e;
--color-tch14-green: oklch(0.88 0.21 152);
--font-tch14-mono: 'Share Tech Mono', ui-monospace, monospace;
--font-tch14-display: 'VT323', ui-monospace, monospace;
--animate-tch14-sweep: tch14-sweep 2s linear infinite;
--animate-tch14-blink: tch14-blink 1s steps(1) infinite;
}
.tch-14 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@keyframes tch14-sweep {
0% {
top: -80px;
}
100% {
top: 100%;
}
}
@keyframes tch14-blink {
50% {
opacity: 0;
}
}
@theme {
--color-tch14-bg: #04110a;
--color-tch14-bg: oklch(0.14 0.03 155);
--color-tch14-card: #021006;
--color-tch14-card: oklch(0.12 0.03 155);
--color-tch14-green: #38ff8e;
--color-tch14-green: oklch(0.88 0.21 152);
--font-tch14-mono: 'Share Tech Mono', ui-monospace, monospace;
--font-tch14-display: 'VT323', ui-monospace, monospace;
--animate-tch14-sweep: tch14-sweep 2s linear infinite;
--animate-tch14-blink: tch14-blink 1s steps(1) infinite;
}
.tch-14 {
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";
@keyframes tch14-sweep {
0% {
top: -80px;
}
100% {
top: 100%;
}
}
@keyframes tch14-blink {
50% {
opacity: 0;
}
}
@theme {
--color-tch14-bg: #04110a;
--color-tch14-bg: oklch(0.14 0.03 155);
--color-tch14-card: #021006;
--color-tch14-card: oklch(0.12 0.03 155);
--color-tch14-green: #38ff8e;
--color-tch14-green: oklch(0.88 0.21 152);
--font-tch14-mono: 'Share Tech Mono', ui-monospace, monospace;
--font-tch14-display: 'VT323', ui-monospace, monospace;
--animate-tch14-sweep: tch14-sweep 2s linear infinite;
--animate-tch14-blink: tch14-blink 1s steps(1) infinite;
}
.tch-14 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@keyframes tch14-sweep {
0% {
top: -80px;
}
100% {
top: 100%;
}
}
@keyframes tch14-blink {
50% {
opacity: 0;
}
}
@theme {
--color-tch14-bg: #04110a;
--color-tch14-bg: oklch(0.14 0.03 155);
--color-tch14-card: #021006;
--color-tch14-card: oklch(0.12 0.03 155);
--color-tch14-green: #38ff8e;
--color-tch14-green: oklch(0.88 0.21 152);
--font-tch14-mono: 'Share Tech Mono', ui-monospace, monospace;
--font-tch14-display: 'VT323', ui-monospace, monospace;
--animate-tch14-sweep: tch14-sweep 2s linear infinite;
--animate-tch14-blink: tch14-blink 1s steps(1) infinite;
}
.tch-14 {
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=VT323&family=Share+Tech+Mono&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=VT323&family=Share+Tech+Mono&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- Two keyframes, two
--animate-*entries, and the rest of the demo is utilities — a good illustration of where the v4 line falls: motion definitions in CSS, motion application in markup. - The sweep animates
top, which this collection otherwise forbids. Inside a clipped card with one 80px strip it is both cheap and clearer than a transform; the rule exists for layout that has siblings to push around. - UI change from the CSS original: focusable card, beam sweeps on
group-focus-visible:, and the dashed stat rule uses a token-derived alpha rather than a hard-coded rgba.
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 CRT Scanline Terminal Card with Sweeping Beam
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-crt-scanline-terminal-card/
A phosphor-green cold-storage terminal with static scanlines, a refresh beam that sweeps top to bottom, a blinking block cursor and a CRT vignette. Four stacked overlays, two keyframes, and every one of them addressed from the markup.
## HTML
```html
<section class="tch-14 w-full min-h-svh grid place-items-center bg-tch14-bg font-tch14-mono p-8">
<article tabindex="0" class="group relative w-[340px] h-[430px] rounded-[10px] overflow-hidden cursor-pointer outline-none bg-tch14-card border border-tch14-green/60 shadow-[0_0_25px_rgb(0_255_120/0.12),inset_0_0_30px_rgb(0_255_120/0.05)] focus-visible:outline-2 focus-visible:outline-tch14-green focus-visible:outline-offset-4">
<div class="relative z-1 h-full p-[2.2rem] flex flex-col justify-between text-tch14-green [text-shadow:0_0_4px_rgb(56_255_142/0.6)]">
<span class="text-[0.8rem] tracking-[0.1em] opacity-70">> SYSTEM/READY_</span>
<h2 class="font-tch14-display text-[3.4rem] leading-[0.95]">VAULT<br>OS 9<span class="inline-block w-[0.6ch] bg-tch14-green animate-tch14-blink motion-reduce:animate-none"> </span></h2>
<p class="text-[0.85rem] leading-[1.6] opacity-85">Cold-storage terminal for archival data. Phosphor-green display, zero network exposure.</p>
<div class="flex justify-between text-[0.75rem] border-t border-dashed border-tch14-green/40 pt-3 opacity-70"><span>UPTIME 4096d</span><span>MEM 64K OK</span></div>
</div>
<div class="absolute inset-0 z-2 pointer-events-none bg-[repeating-linear-gradient(0deg,rgb(0_0_0/0.25)_0_1px,transparent_1px_3px)]"></div>
<div class="absolute inset-x-0 -top-20 h-20 z-3 pointer-events-none opacity-0 transition-opacity duration-300 bg-linear-to-b from-transparent via-tch14-green/20 to-transparent group-hover:opacity-100 group-hover:animate-tch14-sweep group-focus-visible:opacity-100 group-focus-visible:animate-tch14-sweep motion-reduce:animate-none motion-reduce:group-hover:animate-none"></div>
<div class="absolute inset-0 z-4 pointer-events-none bg-[radial-gradient(ellipse_at_center,transparent_60%,rgb(0_0_0/0.5))]"></div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@keyframes tch14-sweep {
0% {
top: -80px;
}
100% {
top: 100%;
}
}
@keyframes tch14-blink {
50% {
opacity: 0;
}
}
@theme {
--color-tch14-bg: #04110a;
--color-tch14-bg: oklch(0.14 0.03 155);
--color-tch14-card: #021006;
--color-tch14-card: oklch(0.12 0.03 155);
--color-tch14-green: #38ff8e;
--color-tch14-green: oklch(0.88 0.21 152);
--font-tch14-mono: 'Share Tech Mono', ui-monospace, monospace;
--font-tch14-display: 'VT323', ui-monospace, monospace;
--animate-tch14-sweep: tch14-sweep 2s linear infinite;
--animate-tch14-blink: tch14-blink 1s steps(1) infinite;
}
.tch-14 {
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 CRT Scanline Terminal Card with Sweeping Beam
Source: https://codefronts.com/motion/tailwind-css-card-hover-effects/tailwind-crt-scanline-terminal-card/
A phosphor-green cold-storage terminal with static scanlines, a refresh beam that sweeps top to bottom, a blinking block cursor and a CRT vignette. Four stacked overlays, two keyframes, and every one of them addressed from the markup.
## HTML
```html
<section class="tch-14 w-full min-h-svh grid place-items-center bg-tch14-bg font-tch14-mono p-8">
<article tabindex="0" class="group relative w-[340px] h-[430px] rounded-[10px] overflow-hidden cursor-pointer outline-none bg-tch14-card border border-tch14-green/60 shadow-[0_0_25px_rgb(0_255_120/0.12),inset_0_0_30px_rgb(0_255_120/0.05)] focus-visible:outline-2 focus-visible:outline-tch14-green focus-visible:outline-offset-4">
<div class="relative z-1 h-full p-[2.2rem] flex flex-col justify-between text-tch14-green [text-shadow:0_0_4px_rgb(56_255_142/0.6)]">
<span class="text-[0.8rem] tracking-[0.1em] opacity-70">> SYSTEM/READY_</span>
<h2 class="font-tch14-display text-[3.4rem] leading-[0.95]">VAULT<br>OS 9<span class="inline-block w-[0.6ch] bg-tch14-green animate-tch14-blink motion-reduce:animate-none"> </span></h2>
<p class="text-[0.85rem] leading-[1.6] opacity-85">Cold-storage terminal for archival data. Phosphor-green display, zero network exposure.</p>
<div class="flex justify-between text-[0.75rem] border-t border-dashed border-tch14-green/40 pt-3 opacity-70"><span>UPTIME 4096d</span><span>MEM 64K OK</span></div>
</div>
<div class="absolute inset-0 z-2 pointer-events-none bg-[repeating-linear-gradient(0deg,rgb(0_0_0/0.25)_0_1px,transparent_1px_3px)]"></div>
<div class="absolute inset-x-0 -top-20 h-20 z-3 pointer-events-none opacity-0 transition-opacity duration-300 bg-linear-to-b from-transparent via-tch14-green/20 to-transparent group-hover:opacity-100 group-hover:animate-tch14-sweep group-focus-visible:opacity-100 group-focus-visible:animate-tch14-sweep motion-reduce:animate-none motion-reduce:group-hover:animate-none"></div>
<div class="absolute inset-0 z-4 pointer-events-none bg-[radial-gradient(ellipse_at_center,transparent_60%,rgb(0_0_0/0.5))]"></div>
</article>
</section>
```
## CSS
```css
@import "tailwindcss";
@keyframes tch14-sweep {
0% {
top: -80px;
}
100% {
top: 100%;
}
}
@keyframes tch14-blink {
50% {
opacity: 0;
}
}
@theme {
--color-tch14-bg: #04110a;
--color-tch14-bg: oklch(0.14 0.03 155);
--color-tch14-card: #021006;
--color-tch14-card: oklch(0.12 0.03 155);
--color-tch14-green: #38ff8e;
--color-tch14-green: oklch(0.88 0.21 152);
--font-tch14-mono: 'Share Tech Mono', ui-monospace, monospace;
--font-tch14-display: 'VT323', ui-monospace, monospace;
--animate-tch14-sweep: tch14-sweep 2s linear infinite;
--animate-tch14-blink: tch14-blink 1s steps(1) infinite;
}
.tch-14 {
width: 100%;
min-height: 100svh;
}
```How this works
Four overlays, four jobs. Scanlines (static texture), beam (the moving refresh line), vignette (the tube's curved falloff), and the content layer that sits under all of them. Each is an absolutely positioned div with pointer-events-none, so the stack is inert.
The beam animates top on purpose. It is the one place in this collection where a layout property is animated instead of a transform — an 80px absolutely positioned strip inside an overflow-hidden card costs nothing to relayout, and animating top from -80px to 100% is the clearest expression of the sweep.
The cursor is a styled span. A 0.6ch-wide green block with animate-tch14-blink on a steps(1) curve — on, off, nothing between.
Make it yours
- Scanline density is the repeat unit:
0_1px,transparent_1px_3pxis fine phosphor; widen to 6px for blocky retro. - Beam speed and height pair — a taller beam wants a slower sweep or it reads as a flash.
- Retint the phosphor from
--color-tch14-green; amber reads as an older terminal.
Gotchas — read before shipping
- Make the scanline gradient's repeat unit and any scroll distance match exactly, or the loop shows a seam every cycle.
- All overlays need
pointer-events-none. A full-bleed vignette that eats clicks is a genuinely confusing bug. motion-reduce:freezes the beam and the cursor but keeps the scanlines — the texture is the identity, the motion is the flourish.- On OLED the scanlines disappear below ~0.2 opacity; test peak visibility rather than trusting the value.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Repeating gradients, keyframes and steps() timing are universally supported; the floor is Tailwind v4's generated sheet.