Tarjeta de vidrio
Vidrio esmerilado con borde de luz y brillo superior.
Código completo
Es exactamente el archivo que se descarga. Cópialo a tu proyecto y úsalo.
/**
* Tarjeta de vidrio esmerilado con borde de luz y brillo superior.
* Necesita un fondo con color o imagen detrás para que el desenfoque se note.
*
* <div style={{ background: "linear-gradient(135deg, #3a1c8c, #0ea5e9)", padding: 40 }}>
* <GlassCard style={{ width: 320, height: 200 }}>Tu contenido</GlassCard>
* </div>
*/
import type { HTMLAttributes } from "react";
export type GlassCardProps = HTMLAttributes<HTMLDivElement> & {
/** Qué tan opaco es el vidrio, de 0 a 1. */
frost?: number;
};
const CSS = `
.gcv-card { position: relative; box-sizing: border-box; padding: 24px; overflow: hidden; border-radius: 24px; color: #fff; font-family: inherit; isolation: isolate;
background: linear-gradient(140deg, rgba(255, 255, 255, calc(.26 * var(--gcv-frost, 1))), rgba(255, 255, 255, calc(.06 * var(--gcv-frost, 1))));
-webkit-backdrop-filter: blur(22px) saturate(180%); backdrop-filter: blur(22px) saturate(180%);
box-shadow: 0 30px 60px -18px rgba(20, 8, 70, .55), inset 0 1px 0 rgba(255, 255, 255, .55), inset 0 0 0 1px rgba(255, 255, 255, .16); }
.gcv-card::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit; pointer-events: none;
background: linear-gradient(115deg, rgba(255, 255, 255, .22) 0%, transparent 38%), radial-gradient(90% 60% at 100% 100%, rgba(255, 255, 255, .12), transparent 70%); }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { .gcv-card { background: rgba(70, 40, 140, .72); } }
`;
export function GlassCard({ frost = 1, className, style, children, ...props }: GlassCardProps) {
return (
<>
<style>{CSS}</style>
<div {...props} className={["gcv-card", className].filter(Boolean).join(" ")} style={{ ["--gcv-frost" as string]: frost, ...style } as React.CSSProperties}>
{children}
</div>
</>
);
}
Úsalo en tu proyecto
Instálalo con la CLI de shadcn.
npx shadcn@latest add https://www.gassierconsulting.com/r/tarjeta-vidrioEjemplo de uso de Tarjeta de vidrio
Después de copiar glass-card.tsx a tu proyecto, impórtalo y colócalo donde lo necesites.
import { GlassCard } from "./glass-card";
export default function Ejemplo() {
return <GlassCard />;
}Personaliza Tarjeta de vidrio con variables CSS
Define estas variables en el contenedor o en tu hoja de estilos para cambiar los colores sin tocar el componente. Si no las defines, se usa el valor por defecto.
| Variable | Valor por defecto |
|---|---|
--gcv-frost | 1 |
Accesibilidad y rendimiento
El archivo tiene 37 líneas (2 KB) y no necesita @keyframes. Esto es lo que hace Tarjeta de vidrio por quien lo usa:
- Usa backdrop-filter para el efecto de vidrio; en navegadores sin soporte el panel se ve sin desenfoque.
Acerca del producto
Una tarjeta de vidrio esmerilado: desenfoque del fondo, borde interior de luz, brillo diagonal y sombra profunda. Pensada para ir sobre degradados o imágenes con color; trae una alternativa para navegadores sin backdrop-filter.
Incluye
Un solo archivo React + TypeScript, con los estilos dentro. No usa Tailwind ni bibliotecas externas.
- Opacidad del vidrio ajustable (frost)
- Alternativa sin backdrop-filter
- Contenido libre
- Sin JavaScript
Cómo usarlo
Necesita color o imagen detrás. Dale tamaño con style y usa texto blanco o muy claro dentro.