Ruotare un elemento
Due modi, stesso risultato: la funzione rotate() dentro transform, oppure la proprietà rotate da sola. Gli angoli positivi girano in senso orario:
Il riquadro blu e quello verde sono ruotati esattamente allo stesso modo, di 45 gradi in senso orario attorno al proprio centro. Il riquadro ambra ha un angolo negativo, quindi si inclina in senso antiorario. La rotazione non sposta mai il layout: ogni riquadro occupa ancora il suo spazio originale di 90 per 60, ed è per questo che gli elementi ruotati possono sovrapporsi ai vicini.
Unità degli angoli
| Unità | Giro completo | 90 gradi |
|---|---|---|
deg | 360deg | 90deg |
turn | 1turn | 0.25turn |
rad | 6.2832rad | 1.5708rad |
grad | 400grad | 100grad |
deg è la scelta abituale; turn si legge bene per le rotazioni continue (rotate: 1turn). Gli angoli oltre 360 sono ammessi e contano nelle animazioni: rotate(720deg) in un keyframe fa due giri. Scrivi sempre l'unità: rotate(45) non è valido e viene ignorato.
Trascina il cursore per vedere un angolo in ogni unità:
Ruotare attorno a un angolo: transform-origin
Per impostazione predefinita un elemento ruota attorno al suo centro. transform-origin sposta il perno. La lancetta di un orologio ruota attorno alla sua estremità, non al suo centro:
L'estremità inferiore della lancetta sta sul perno ambra al centro del quadrante, e rotate: 120deg la porta alle quattro. Togli la riga transform-origin e la lancetta gira invece attorno al proprio centro, fuori dal perno.
Ruotare il testo ed etichette verticali
Una piccola inclinazione con rotate va bene per un badge o un adesivo. Per un'etichetta davvero verticale è meglio writing-mode, perché cambia il layout: l'elemento diventa alto e stretto invece di sovrapporsi a ciò che ha accanto.
Il riquadro mostra la dimensione di layout di ogni etichetta. Quella ruotata occupa ancora il suo riquadro originale, largo e basso: lascia uno spazio vuoto accanto e sporge sopra e sotto la sua riga, su ciò che c'è lì. Quella con writing-mode occupa un riquadro alto e stretto. Aggiungere rotate: 180deg la fa leggere dal basso verso l'alto, la direzione abituale per un'etichetta verticale.
Ruotare un'icona al clic o in hover
Girare una freccia di 180 gradi è il modo standard per mostrare che una sezione è aperta. Combina rotate con una transizione:
La freccia è un quadrato con due bordi, ruotato di 45 gradi in modo che punti in basso. Quando il pulsante è espanso passa a 225 gradi, puntando in alto, e la transizione anima il mezzo giro. È l'attributo aria-expanded a guidare lo stile, quindi lo stato visivo e quello annunciato dagli screen reader non possono mai essere in disaccordo.
Un loader che gira
Una rotazione continua va da 0 a 360 gradi, ripetuta con timing linear perché la velocità non cambi mai:
Con il solo keyframe to, l'animazione parte dalla rotazione propria dell'elemento (nessuna) e finisce a 360deg, e infinite la ripete senza scatti perché 360deg ha lo stesso aspetto di 0. Per chi ha chiesto al sistema meno movimento, lo spinner gira tre volte più lentamente. Trovi altro sui keyframe nella pagina sulle animazioni.
Rotazione 3D: rotateX, rotateY
rotateX() inclina un elemento all'indietro attorno all'asse orizzontale e rotateY() lo gira attorno all'asse verticale, come una porta. Senza prospettiva sembrano solo schiacciati; perspective sul genitore aggiunge profondità:
.scene { perspective: 600px; }
.card { transform: rotateY(35deg); }
.flip { transform: rotateY(180deg); backface-visibility: hidden; } /* card flip */
Per specchiare un elemento invece di ruotarlo, usa scale: -1 1 (un ribaltamento orizzontale). Una rotazione di 180 gradi lo capovolge, che non è la stessa cosa.
Errori comuni
- Ruotare uno
<span>o un<a>che resta fermo. Gli elementi inline semplici ignorano le trasformazioni. Aggiungidisplay: inline-block. - Una rotazione che sparisce in hover. Una regola hover con
transform: scale(1.1)sostituiscetransform: rotate(...). Usa le proprietà separaterotateescale, oppure elenca entrambe le funzioni. - Aspettarsi che il layout faccia spazio. Un'immagine ruotata mantiene il suo riquadro non ruotato e si sovrappone ai vicini. Dai al contenitore la dimensione ruotata, oppure usa
writing-modeper il testo. - Spinner con
ease. Il timing predefinito accelera e rallenta a ogni giro. Usalinear. - Ruotare attorno al punto sbagliato. Imposta
transform-originprima di regolare l'angolo.
Domande frequenti
Come si ruota un elemento in CSS?
Usa transform: rotate(45deg); oppure la proprietà separata rotate: 45deg;. Gli angoli positivi girano in senso orario e quelli negativi in senso antiorario, attorno al centro dell'elemento, a meno che tu non cambi transform-origin.
Qual è la differenza tra transform: rotate() e la proprietà rotate?
Disegnano lo stesso risultato. La proprietà rotate è indipendente da transform, quindi una regola hover può cambiare scale o translate senza togliere la rotazione, e ognuna può avere la sua transizione. Insieme si comportano come transform: translate() rotate() scale(), in qualunque ordine le dichiari.
Come ruoto un'immagine di 90 gradi in CSS?
Aggiungi transform: rotate(90deg); (o rotate: 90deg;) all'img. L'immagine mantiene il suo spazio originale nel layout, quindi un'immagine verticale ruotata in orizzontale può sovrapporsi ai vicini; lascia al suo contenitore spazio per la dimensione ruotata.
Come faccio girare un elemento in CSS?
Definisci @keyframes spin { to { rotate: 360deg; } } e applica animation: spin 1s linear infinite;. Usa linear perché la velocità resti costante, e rallentalo o fermalo con prefers-reduced-motion: reduce.
Come ruoto il testo in verticale in CSS?
Per un'etichetta verticale, writing-mode: vertical-rl di solito è meglio di rotate(90deg), perché cambia anche il layout: l'elemento occupa spazio in verticale invece di sovrapporsi. Usa rotate per piccole inclinazioni decorative.