Tema
Hover en tarjetas e imágenes
Tarjetas de producto, portafolios, planes de precios, equipos… Las tarjetas están en casi todos los sitios para clientes. Un buen efecto de hover las hace sentir interactivas y premium sin sacrificar legibilidad.
Concepto: transform y el espacio 3D
transform modifica cómo se dibuja un elemento sin cambiar el espacio que ocupa en el layout. Por eso es perfecto para animar:
| Función | Efecto |
|---|---|
translate(x, y) | Mover |
scale(n) | Agrandar / reducir |
rotate(deg) | Girar en 2D |
rotateX() / rotateY() | Girar en 3D (necesita perspectiva) |
skew() | Inclinar |
Para que un giro 3D se vea con profundidad necesitas perspectiva:
css
.escena { perspective: 900px; } /* en el padre: distancia del "ojo" */
.tarjeta { transform: rotateY(20deg); } /* el hijo gira en 3D */Cuanto menor el valor de perspective, más exagerado el efecto 3D.
Otras dos propiedades 3D que verás aquí:
transform-style: preserve-3d: los hijos también viven en el espacio 3D (necesario para la flip card).backface-visibility: hidden: oculta la cara trasera de un elemento cuando está girado más de 90°.
Tarjeta con tilt 3D
La tarjeta se inclina siguiendo al mouse y un reflejo de luz recorre su superficie.
Cómo funciona: JavaScript sólo actualiza variables CSS (--rx, --ry, --mx, --my) y el CSS hace el resto:
css
.tilt { transform: rotateX(var(--rx)) rotateY(var(--ry)); }
.tilt::after {
background: radial-gradient(circle at var(--mx) var(--my), rgb(255 255 255 / .35), transparent 50%);
}Los elementos internos usan translateZ() para "flotar" sobre la tarjeta, lo que da un efecto de capas muy vistoso. Con prefers-reduced-motion se conserva el brillo pero no la inclinación.
Flip card (tarjeta que se voltea)
Ideal para planes de precios, preguntas de un quiz o tarjetas de equipo con la bio detrás.
La estructura siempre es la misma:
html
<div class="flip"> <!-- perspective -->
<div class="flip-interior"> <!-- preserve-3d + transition -->
<div class="cara frente">…</div>
<div class="cara atras">…</div> <!-- ya girada 180° -->
</div>
</div>Error común: no funciona en móviles
En pantallas táctiles no hay hover real. El demo añade un pequeño script que alterna la clase .volteada con un toque, y :focus-within permite voltearla con el teclado.
Efectos de hover en imágenes
Zoom, overlay con texto que sube, de gris a color y "levantar" con sombra.
El secreto del zoom es que el contenedor tenga overflow: hidden y que lo que se escale sea la imagen interior:
css
figure { overflow: hidden; border-radius: 16px; }
figure img {
width: 100%; height: 100%; object-fit: cover;
transition: transform .5s ease;
}
figure:hover img { transform: scale(1.15); }Imágenes en los demos
Para que los demos no dependan de archivos externos, las "imágenes" son degradados CSS en un <div class="img">. En tu proyecto reemplázalos por <img src="…" alt="…">: los estilos funcionan igual gracias a object-fit: cover.
Borde degradado giratorio
Un borde con un degradado cónico que gira sin parar. Muy usado en tarjetas destacadas ("Plan recomendado") y en sitios de IA/tecnología.
Cómo funciona:
@propertyregistra--angulocomo un ángulo real. Sin esto, el navegador no sabe interpolar una variable y la animación "salta".- El elemento tiene dos fondos: uno sólido limitado a
padding-boxy el degradado cónico enborder-box. El borde transparente deja ver el degradado. - Una animación cambia
--angulode0dega360deg.
css
@property --angulo { syntax: "<angle>"; initial-value: 0deg; inherits: false; }
.borde-giratorio {
border: 3px solid transparent;
background:
linear-gradient(#111827, #111827) padding-box,
conic-gradient(from var(--angulo), #f43f5e, #8b5cf6, #22d3ee, #f43f5e) border-box;
animation: girar 4s linear infinite;
}
@keyframes girar { to { --angulo: 360deg; } }@property funciona en todos los navegadores modernos. En uno antiguo, el borde simplemente se ve estático: una degradación elegante.
Ejercicios
- Haz que la flip card gire al hacer clic en un botón "Ver más" en lugar de con hover.
- Añade al efecto overlay un botón que aparezca con retraso de
.15sdespués del texto. - Cambia los colores del borde giratorio por los de tu marca y reduce la velocidad a 8 s.
Ver solución del ejercicio 2
css
.overlay figcaption a {
opacity: 0; transform: translateY(10px);
transition: opacity .4s .15s, transform .4s .15s;
}
.overlay:hover figcaption a { opacity: 1; transform: none; }Resumen
transformno afecta al layout: es la propiedad estrella para animar.- 3D =
perspectiveen el padre +rotateX/Yen el hijo (+preserve-3dybackface-visibilitypara flips). - Zoom de imagen =
overflow: hiddenen el contenedor +scaleen la imagen. - Actualizar variables CSS desde JS es la forma más limpia de conectar el mouse con el CSS.
@propertypermite animar variables personalizadas (ángulos, colores, porcentajes).