Luca Perullo
Components

Component

LiveNew

Tilt Card

perspective + rotateX/rotateY calcolati in pointermove via CSS variables. Glare overlay con mix-blend-mode opzionale. Restraint: 8° max di tilt, scale 1.02. Mai "cartoon".

Card3DHoverClient
Open in ClaudeSorgente

Esempio01

tilt-card.tsx

Hover

3D parallax + glare

More tilt

No glare, dramatic

Note Tilt > 12° fa stare male l'occhio. Su touch il tilt è inerte (no pointermove) ma lo scale-on-press funziona via :active. Il figlio dovrebbe avere rounded-[inherit] se vuoi che il glare segua i corners.

Prompt LLM02

Incolla in Claude o ChatGPT per generare la tua variante. Include il contesto del brand, i token e i vincoli del progetto.

Prompt · tilt-card
Open in Claude
Sei un senior frontend engineer. Stai lavorando su un sito Next.js 16 + React 19 + Tailwind v4 in italiano, look chanhdai-inspired: colonna stretta 672px, Geist Sans + Geist Mono, hairline 1px, divisori a stripe diagonale, palette zinc.

Token CSS disponibili: --bg, --bg-alt, --fg, --fg-muted, --fg-soft, --border, --border-strong, --accent. Usa SEMPRE queste variabili tramite le utility tailwind generate (bg-bg, text-fg-muted, border-border, ecc.). Helper "cn" da "@/lib/utils". Niente librerie UI extra: solo lucide-react e tailwind-merge.

Genera un componente <TiltCard> per parallax 3D pointer-tracked.
Props:
- children: ReactNode.
- maxTilt?: number deg (default 8).
- scale?: number (default 1.02).
- glare?: boolean (default true).
- className?: string.

Implementazione:
- "use client".
- Wrapper con perspective: 1000px (Tailwind: [perspective:1000px]).
- Figlio inner: transform-style preserve-3d, transform rotateX(var(--rx)) rotateY(var(--ry)) scale(var(--s)), transition transform 300ms cubic-bezier(.16,1,.3,1).
- onPointerMove sulla wrapper: calcola px/py 0-1, --rx = (0.5-py)*maxTilt*2, --ry = (px-0.5)*maxTilt*2, --gx/gy in % per il glare.
- onPointerLeave: --rx 0, --ry 0.
- Glare overlay: pointer-events-none, mix-blend-overlay, opacity 0 → 100 group-hover, background radial-gradient(280px circle at var(--gx) var(--gy), rgba(255,255,255,0.55), transparent 60%).

Output: file completo src/components/tilt-card.tsx.

Uso tipico03

tsx
<TiltCard maxTilt={8} scale={1.02} glare>
  <div className="rounded-[10px] border ...">card content</div>
</TiltCard>

Dipendenze04

npm
  • tailwind-merge
  • clsx
Interno
  • @/lib/utils#cn

Ti è servito? Dimmelo, oppure proponi il prossimo componente.