1 звезда на GitHub = 1 новый компонент.

Поставить звезду
Карточкиcardtilt3d

Interactive Tilt Card

Карточка с реалистичным 3D-наклоном в пространстве по положению курсора.

Живое превью

Использование

Скопируйте и вставьте этот код в ваш React-компонент:

tsx
import { InteractiveTiltCard } from 'react-component-kit-ui/cards';

<InteractiveTiltCard title="3D Hover" description="Move your mouse over me." />

Ручная установка

Если вы не используете пакет npm, создайте файл и вставьте следующий код: src/components/InteractiveTiltCard.tsx + InteractiveTiltCard.css:

InteractiveTiltCard.tsx
'use client';

import { useEffect, useRef } from 'react';
import './InteractiveTiltCard.css';

/**
 * InteractiveTiltCard — Card that tilts in 3D space based on mouse position.
 * 
 * @param {string} title - The card's heading text.
 * @param {string} description - The descriptive paragraph attached to the card.
 */
export interface InteractiveTiltCardProps {
  title: string;
  description: string;
}

export function InteractiveTiltCard({ title, description }: InteractiveTiltCardProps) {

  // Ported from the Astro <script>: runs once after mount (DOM logic kept as in the Astro kit).
  const mounted = useRef(false);
  useEffect(() => {
    if (mounted.current) return;
    mounted.current = true;
    document.querySelectorAll('.tilt-card-inner').forEach(card => {
        card.addEventListener('mousemove', e => {
          const rect = card.getBoundingClientRect();
          const x = ((e as MouseEvent).clientX - rect.left - rect.width/2) / 10;
          const y = ((e as MouseEvent).clientY - rect.top - rect.height/2) / -10;
          (card as HTMLElement).style.transform = `rotateY(${x}deg) rotateX(${y}deg)`;
        });
        card.addEventListener('mouseleave', () => {
          (card as HTMLElement).style.transform = 'rotateY(0deg) rotateX(0deg)';
        });
      });
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  return (
    <>
      <div className="tilt-card-wrap" data-rk-c53bbe="">
        <div className="tilt-card-inner" data-rk-c53bbe="">
          <h3 className="tilt-card__title" data-rk-c53bbe="">{title}</h3>
          <p className="tilt-card__desc" data-rk-c53bbe="">{description}</p>
        </div>
      </div>
    </>
  );
}

export default InteractiveTiltCard;
InteractiveTiltCard.css
/* InteractiveTiltCard — ported from astro-component-kit (cards/InteractiveTiltCard.astro) */

.tilt-card-wrap:where([data-rk-c53bbe]) { 
  perspective: 1000px; 
  width: 100%; 
  max-width: 300px; 
}
.tilt-card-inner:where([data-rk-c53bbe]) { 
  background: var(--c-bg-elev, #1e293b); 
  padding: var(--sp-12, 3rem); 
  border-radius: var(--r-xl, 24px); 
  color: var(--c-text-1, #fff); 
  text-align: center; 
  border: 1px solid var(--c-border, rgba(255,255,255,0.1)); 
  transform-style: preserve-3d; 
  transition: transform 0.1s; 
}
.tilt-card__title:where([data-rk-c53bbe]) { 
  transform: translateZ(50px); 
  font-size: 1.5rem; 
  color: var(--c-primary, #818cf8); 
  margin: 0;
}
.tilt-card__desc:where([data-rk-c53bbe]) { 
  transform: translateZ(30px); 
  color: var(--c-text-2, #94a3b8); 
  font-size: 0.9rem; 
  margin-top: 1rem; 
}

Краткая информация

Категория
Карточки
Имя файла
InteractiveTiltCard.tsx
Зависимости
Нет — чистый React + CSS
Теги
cardtilt3d