Tarjetascardglass
Glass Card
Tarjeta versátil con estética glassmorphism, desenfoque de fondo y borde iluminado.
Vista Previa en Vivo
Analytics
Last 30 days
Hover over this card to see the lift effect.
24,891
Status
✓ All systems operational
Non-hoverable card with small padding.
Uso
Copia y pega este código directamente en tu componente React:
tsx
import { GlassCard } from 'react-component-kit-ui/cards';
<GlassCard title="Analytics Dashboard" subtitle="Last 30 days performance" padding="lg">
<div className="stat-group">
<span className="stat-label">Active Users</span>
<span className="stat-value">2,841</span>
</div>
<p>Your workspace is performing 15% better than last month.</p>
</GlassCard>Instalación Manual
Si no estás usando el paquete npm, crea un archivo nuevo y pega el siguiente código: src/components/GlassCard.tsx + GlassCard.css:
GlassCard.tsx
'use client';
import type { ReactNode } from 'react';
import './GlassCard.css';
/** class:list → className */
function cx(...args: unknown[]): string {
const out: string[] = [];
const walk = (v: unknown) => {
if (!v) return;
if (typeof v === 'string' || typeof v === 'number') out.push(String(v));
else if (Array.isArray(v)) v.forEach(walk);
else if (typeof v === 'object') for (const [k, on] of Object.entries(v as Record<string, unknown>)) if (on) out.push(k);
};
args.forEach(walk);
return out.join(' ');
}
/**
* GlassCard — A versatile glassmorphism card with hover lift effect and gradient border.
*
* @param {string} title - Optional title for the glass card header.
* @param {string} subtitle - Optional description below the title.
* @param {boolean} hoverable - Whether the card lifts on hover. Default is true.
* @param {'sm'|'md'|'lg'} padding - Internal padding control. Default is 'md'.
*/
export interface GlassCardProps {
title?: string;
subtitle?: string;
hoverable?: boolean;
padding?: 'sm' | 'md' | 'lg';
children?: ReactNode;
}
export function GlassCard({ title, subtitle, hoverable = true, padding = 'md',
children
}: GlassCardProps) {
return (
<>
<div className={cx(['glass-card', `glass-card--p${padding}`, { 'glass-card--hoverable': hoverable }])} data-rk-30e66c="">
{title && (<div className="glass-card__header" data-rk-30e66c=""><h3 className="glass-card__title" data-rk-30e66c="">{title}</h3>{subtitle && <p className="glass-card__subtitle" data-rk-30e66c="">{subtitle}</p>}</div>)}
<div className="glass-card__body" data-rk-30e66c="">{children}</div>
</div>
</>
);
}
export default GlassCard;GlassCard.css
/* GlassCard — ported from astro-component-kit (cards/GlassCard.astro) */
.glass-card:where([data-rk-30e66c]) { background: rgba(255, 255, 255, 0.04); backdrop-filter: blur(16px); border: 1px solid rgba(255, 255, 255, 0.09); border-radius: 20px; position: relative; overflow: hidden; transition: 0.3s; }
.glass-card:where([data-rk-30e66c])::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); }
.glass-card--hoverable:hover:where([data-rk-30e66c]) { transform: translateY(-4px); box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4); border-color: rgba(99, 102, 241, 0.25); }
.glass-card__header:where([data-rk-30e66c]) { border-bottom: 1px solid rgba(255, 255, 255, 0.07); margin-bottom: 1rem; padding-bottom: 0.75rem; }
.glass-card__title:where([data-rk-30e66c]) { margin: 0 0 0.25rem; font-size: 1.05rem; font-weight: 600; color: #f1f5f9; }
.glass-card__subtitle:where([data-rk-30e66c]) { margin: 0; font-size: 0.82rem; color: #64748b; }
.glass-card--psm:where([data-rk-30e66c]) { padding: 1rem; } .glass-card--pmd:where([data-rk-30e66c]) { padding: 1.5rem; } .glass-card--plg:where([data-rk-30e66c]) { padding: 2rem; }Información Rápida
- Categoría
- Tarjetas
- Nombre de archivo
GlassCard.tsx- Dependencias
- Ninguna — React + CSS puro
- Etiquetas
- cardglass