Luca Perullo
Components

Component

LiveNew

Border Beam

Un singolo elemento posizionato via CSS offset-path lungo il rettangolo del bordo, con animazione offset-distance 0 → 100%. Aggiungi una seconda <BorderBeam delay={0.5}/> per il dual-beam premium.

CardBorderAnimationClient
Open in ClaudeSorgente

Esempio01

border-beam.tsx

Single beam

8s loop, accent.

Dual beam

Two comets, 180° apart.

Note Il parent DEVE avere overflow-hidden + position-relative + border-radius matchato a borderRadius prop. Su browser senza offset-path support, il beam non appare ma il layout regge.

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 · border-beam
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 <BorderBeam>: cometa luminosa che percorre il bordo del parent.
Props:
- size?: number % perimetro (default 18).
- duration?: number sec (default 8).
- delay?: number 0–1 frazione del loop (default 0).
- colorFrom?: string (default "var(--accent)").
- colorTo?: string (default "transparent").
- borderRadius?: number (default 10).
- className?: string.

Implementazione:
- "use client".
- Inline <style> con keyframe border-beam: offset-distance to 100%.
- Render: div con offsetPath rect(0 100% 100% 0 round border-radius), offsetDistance 0%, animation border-beam duration linear infinite, animationDelay -delay*duration.
- Width = size%, aspectRatio 1, background linear-gradient(90deg colorTo, colorFrom, colorTo), filter blur(6px).
- Media (prefers-reduced-motion: reduce) blocca animation.

Output: file completo src/components/border-beam.tsx.

Uso tipico03

tsx
<div className="relative overflow-hidden rounded-[10px] border ...">
  ...
  <BorderBeam />
  <BorderBeam delay={0.5} colorFrom="#ff7ad9" />
</div>

Dipendenze04

npm
  • tailwind-merge
  • clsx
Interno
  • @/lib/utils#cn
  • browser: Chrome 116+ / Safari 16+ / Firefox 122+ for offset-path on rect()

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