Menu

Rotar con CSS: rotate(), la propiedad rotate y giros

Rota un elemento con transform: rotate(45deg) o con la propiedad más nueva rotate. Aprende las unidades de ángulo (deg, turn, rad), a rotar alrededor de una esquina con transform-origin, a rotar texto e íconos, un loader que gira y la rotación 3D con rotateX y rotateY.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Rotar un elemento

Dos formas, el mismo resultado: la función rotate() dentro de transform, o la propiedad rotate sola. Los ángulos positivos giran en el sentido de las agujas del reloj:

Las cajas azul y verde están giradas exactamente igual, 45 grados en el sentido de las agujas del reloj alrededor de su centro. La caja ámbar tiene un ángulo negativo, así que se inclina en sentido contrario. La rotación nunca mueve el layout: cada caja sigue ocupando su hueco original de 90 por 60, y por eso los elementos rotados pueden superponerse a sus vecinos.

Unidades de ángulo

UnidadCírculo completo90 grados
deg360deg90deg
turn1turn0.25turn
rad6.2832rad1.5708rad
grad400grad100grad

deg es la opción habitual; turn se lee bien para los giros (rotate: 1turn). Los ángulos mayores de 360 están permitidos e importan en las animaciones: rotate(720deg) en un keyframe gira dos veces. Escribe siempre la unidad: rotate(45) es inválido y se ignora.

Arrastra el control deslizante para ver un ángulo en cada unidad:

Rotar alrededor de una esquina: transform-origin

Un elemento gira alrededor de su centro por defecto. transform-origin mueve el pivote. La aguja de un reloj pivota sobre su extremo, no sobre su centro:

El extremo inferior de la aguja queda sobre el pasador ámbar en el centro de la esfera, y rotate: 120deg la gira hasta las cuatro. Quita la línea de transform-origin y la aguja gira alrededor de su propio centro, fuera del pasador.

Rotar texto y etiquetas verticales

Una pequeña inclinación con rotate está bien para una insignia o una etiqueta adhesiva. Para una etiqueta realmente vertical es mejor writing-mode, porque cambia el layout: el elemento se vuelve alto y angosto en lugar de superponerse a lo que tiene al lado.

El indicador muestra el tamaño de layout de cada etiqueta. La rotada sigue ocupando su caja original, ancha y baja: deja un hueco vacío a su lado y sobresale por arriba y por abajo de su fila, sobre lo que haya ahí. La de writing-mode ocupa una caja alta y angosta. Agregar rotate: 180deg hace que se lea de abajo arriba, que es la dirección habitual de una etiqueta vertical.

Rotar un ícono al hacer clic o hover

Girar una flecha 180 grados es la forma estándar de mostrar que una sección está abierta. Combina rotate con una transición:

El chevron es un cuadrado con dos bordes, girado 45 grados para que apunte hacia abajo. Cuando el botón está expandido pasa a 225 grados, apuntando hacia arriba, y la transición anima la media vuelta. El atributo aria-expanded controla el estilo, así que el estado visual y el estado que anuncian los lectores de pantalla nunca pueden contradecirse.

Un loader que gira

Un giro es una rotación de 0 a 360 grados, repetida con una función de tiempo linear para que la velocidad nunca cambie:

Con solo un keyframe to, la animación empieza en la rotación propia del elemento (ninguna) y termina en 360deg, e infinite la repite sin saltos porque 360deg se ve igual que 0. Para las personas que pidieron a su sistema movimiento reducido, el spinner gira tres veces más lento. Hay más sobre keyframes en la página de animaciones.

Rotación 3D: rotateX, rotateY

rotateX() inclina un elemento hacia atrás alrededor del eje horizontal y rotateY() lo gira alrededor del eje vertical, como una puerta. Sin perspectiva solo se ven aplastados; perspective en el padre agrega profundidad:

.scene { perspective: 600px; }
.card  { transform: rotateY(35deg); }
.flip  { transform: rotateY(180deg); backface-visibility: hidden; } /* card flip */

Para reflejar un elemento en lugar de girarlo, usa scale: -1 1 (un volteo horizontal). Una rotación de 180 grados lo pone cabeza abajo, que no es lo mismo.

Errores comunes

  • Rotar un <span> o un <a> que no se mueve. Los elementos inline simples ignoran las transformaciones. Agrega display: inline-block.
  • Una rotación que desaparece en hover. Una regla de hover con transform: scale(1.1) reemplaza a transform: rotate(...). Usa las propiedades separadas rotate y scale, o enumera las dos funciones.
  • Esperar que el layout deje espacio. Una imagen rotada conserva su caja sin rotar y se superpone a sus vecinos. Dale al contenedor el tamaño rotado, o usa writing-mode para el texto.
  • Spinners con ease. La función de tiempo por defecto acelera y frena en cada vuelta. Usa linear.
  • Rotar alrededor del punto equivocado. Define transform-origin antes de ajustar el ángulo.

Preguntas frecuentes

¿Cómo se rota un elemento en CSS?

Usa transform: rotate(45deg); o la propiedad separada rotate: 45deg;. Los ángulos positivos giran en el sentido de las agujas del reloj y los negativos en sentido contrario, alrededor del centro del elemento salvo que cambies transform-origin.

¿Qué diferencia hay entre transform: rotate() y la propiedad rotate?

Dibujan el mismo resultado. La propiedad rotate es independiente de transform, así que una regla de hover puede cambiar scale o translate sin quitar la rotación, y cada una puede tener su propia transición. Juntas actúan como transform: translate() rotate() scale(), sin importar en qué orden las declares.

¿Cómo roto una imagen 90 grados en CSS?

Agrega transform: rotate(90deg); (o rotate: 90deg;) al img. La imagen conserva su espacio original en el layout, así que una imagen vertical rotada a horizontal puede superponerse a sus vecinos; dale a su contenedor espacio para el tamaño rotado.

¿Cómo hago que un elemento gire con CSS?

Define @keyframes spin { to { rotate: 360deg; } } y aplica animation: spin 1s linear infinite;. Usa linear para que la velocidad sea constante, y hazlo más lento o detenlo con prefers-reduced-motion: reduce.

¿Cómo pongo un texto en vertical con CSS?

Para una etiqueta vertical, writing-mode: vertical-rl suele ser mejor que rotate(90deg), porque también cambia el layout: el elemento ocupa espacio vertical en lugar de superponerse. Usa rotate para pequeñas inclinaciones decorativas.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR