Transformaciones CSS: rotate, scale y translate
Los transform de CSS permiten modificar visualmente un elemento sin afectar su flujo de documento. Son la base de animaciones, efectos de UI y diseños responsivos. En este artículo profundizamos en los tres sub‑módulos más usados: rotate(), scale() y translate().
Comparativa rápida
rotate()
- Sintaxis:
rotate(<angle>) - Ángulo: grados (
deg), radianes (rad), turn, grad - Uso típico: iconos, flechas, tarjetas giratorias
- Impacto en rendimiento: bajo, GPU‑accelerated en navegadores modernos
scale()
- Sintaxis:
scale(<x>[, <y>]) - Valores: número decimal (1 = 100 %). Si
yse omite, se usaxpara ambos ejes. - Uso típico: zoom on hover, efectos de enfoque, tarjetas emergentes
- Impacto en rendimiento: bajo, pero combinar con
translateZ(0)garantiza aceleración por GPU.
translate()
- Sintaxis:
translate(<x>, <y>)otranslateX()/translateY() - Unidades:
px,%,vw/vh,rem - Uso típico: desplazar modales, crear carruseles, animaciones de entrada
- Impacto en rendimiento: muy bajo; es la única transformación que no crea un nuevo contexto de apilamiento.
Combinación
Se pueden encadenar múltiples funciones dentro del mismo transform separadas por espacios: transform: rotate(15deg) scale(1.2) translate(10px, -5px);. El orden importa, ya que cada transformación se aplica al resultado de la anterior.
Ejemplos prácticos
A continuación se presentan snippets listos para copiar y pegar.
1️⃣ Rotación simple de un ícono
.icon-rotate {
display: inline-block;
transition: transform 0.3s ease;
}
.icon-rotate:hover {
transform: rotate(45deg);
}
2️⃣ Zoom de tarjeta al pasar el mouse
.card:hover {
transform: scale(1.08);
box-shadow: 0 8px 20px rgba(0,0,0,.15);
}
3️⃣ Desplazamiento de un modal desde fuera de la pantalla
.modal-enter {
transform: translateY(100vh);
transition: transform .4s cubic-bezier(.25,.8,.25,1);
}
.modal-enter-active {
transform: translateY(0);
}
4️⃣ Combinación avanzada (hover card 3D)
.card-3d {
perspective: 800px;
}
.card-3d-inner {
transition: transform .5s;
transform-style: preserve-3d;
}
.card-3d:hover .card-3d-inner {
transform: rotateY(15deg) scale(1.05) translateZ(20px);
}
Compatibilidad, rendimiento y buenas prácticas
- Navegadores:
transformestá soportado desde IE9 (con prefijo-ms-). Los navegadores modernos (Chrome, Edge, Firefox, Safari) lo manejan sin prefijos. - GPU acceleration: Para forzar la composición por GPU, añada
transform: translateZ(0);owill-change: transform;. Úselo con moderación, pues crear demasiados contextos de capa puede agotar la memoria de la GPU. - Accesibilidad: Evite usar transformaciones que alteren la posición del foco del teclado. Si un elemento se desplaza fuera de la vista, asegúrese de que sigue siendo accesible mediante atributos ARIA o gestión de foco.
- SEO: Las transformaciones son puramente visuales; los motores de búsqueda siguen leyendo el DOM original, por lo que no afectan al SEO directamente.
Solución de problemas frecuente
- El elemento no se mueve con
translate - Compruebe que el elemento no tiene
position: static. En la mayoría de los navegadorestranslatefunciona con cualquier posición, pero si combinafloatodisplay: inlinepuede producir resultados inesperados. Cambie adisplay: inline-blockoblock. - El
rotatecausa que el elemento se corte - Asegúrese de que el contenedor tenga suficiente espacio o use
overflow: visible;. También puede envolver el elemento en undivconpaddingpara crear margen interno. - La animación es entrecortada
- Active
will-change: transform;en el elemento antes de iniciar la animación o reduzca la cantidad de capas simultáneas. Verifique la tasa de frames (FPS) con la herramienta de rendimiento del navegador.
Conclusión
Dominar rotate, scale y translate permite crear interfaces ricas, fluidas y modernas sin necesidad de JavaScript pesado. Combine estas funciones con transition o animation para lograr efectos profesionales, manteniendo la performance y la accesibilidad bajo control.
Guía completa de transformaciones CSS: rotate, scale y translate con ejemplos prácticos