Rotacionar um elemento
Dois jeitos, o mesmo resultado: a função rotate() dentro de transform, ou a propriedade rotate sozinha. Ângulos positivos giram no sentido horário:
As caixas azul e verde estão giradas exatamente do mesmo jeito, 45 graus no sentido horário em volta do centro. A caixa âmbar tem um ângulo negativo, então inclina no sentido anti-horário. A rotação nunca mexe no layout: cada caixa continua ocupando o espaço original de 90 por 60, e é por isso que elementos girados podem ficar por cima dos vizinhos.
Unidades de ângulo
| Unidade | Volta completa | 90 graus |
|---|---|---|
deg | 360deg | 90deg |
turn | 1turn | 0.25turn |
rad | 6.2832rad | 1.5708rad |
grad | 400grad | 100grad |
deg é a escolha comum; turn fica mais legível para giros (rotate: 1turn). Ângulos acima de 360 são permitidos e fazem diferença em animações: rotate(720deg) em um keyframe gira duas vezes. Escreva sempre a unidade: rotate(45) é inválido e ignorado.
Arraste o controle deslizante para ver um ângulo em cada unidade:
Girar em volta de um canto: transform-origin
Um elemento gira em volta do centro por padrão. O transform-origin muda o ponto de giro. O ponteiro de um relógio gira pela ponta, não pelo meio:
A ponta de baixo do ponteiro fica sobre o pino âmbar no centro do mostrador, e rotate: 120deg o leva até as quatro horas. Remova a linha do transform-origin e o ponteiro passa a girar em volta do próprio meio, fora do pino.
Rotacionar texto e rótulos verticais
Uma pequena inclinação com rotate serve para um badge ou um adesivo. Para um rótulo realmente vertical, o writing-mode é melhor, porque ele muda o layout: o elemento fica alto e estreito em vez de ficar por cima do que está ao lado.
O painel mostra o tamanho de layout de cada rótulo. O girado continua ocupando a caixa original, larga e baixa: deixa um vão vazio ao lado e sai para cima e para baixo da linha, invadindo o que estiver ali. O do writing-mode ocupa uma caixa alta e estreita. Acrescentar rotate: 180deg faz ele ser lido de baixo para cima, que é a direção comum de um rótulo vertical.
Girar um ícone no clique ou no hover
Girar uma seta 180 graus é o jeito padrão de mostrar que uma seção está aberta. Combine rotate com uma transition:
O chevron é um quadrado com duas bordas, girado 45 graus para apontar para baixo. Quando o botão está expandido, ele vai para 225 graus, apontando para cima, e a transition anima a meia-volta. O atributo aria-expanded comanda o estilo, então o estado visual e o estado que os leitores de tela anunciam nunca discordam.
Um loader girando
Um giro é uma rotação de 0 a 360 graus, repetida com a função de tempo linear para a velocidade nunca mudar:
Com só um keyframe to, a animação parte da rotação do próprio elemento (nenhuma) e termina em 360deg, e o infinite a repete sem salto porque 360deg fica igual a 0. Para quem pediu ao sistema movimento reduzido, o loader gira três vezes mais devagar. Mais sobre keyframes na página de animação.
Rotação 3D: rotateX, rotateY
rotateX() inclina um elemento para trás em volta do eixo horizontal, e rotateY() o gira em volta do eixo vertical, como uma porta. Sem perspectiva eles só parecem achatados; o perspective no pai acrescenta profundidade:
.scene { perspective: 600px; }
.card { transform: rotateY(35deg); }
.flip { transform: rotateY(180deg); backface-visibility: hidden; } /* card flip */
Para espelhar um elemento em vez de girá-lo, use scale: -1 1 (uma virada horizontal). Uma rotação de 180 graus o deixa de cabeça para baixo, o que não é a mesma coisa.
Erros comuns
- Rotacionar um
<span>ou<a>que não sai do lugar. Elementos inline simples ignoram transforms. Acrescentedisplay: inline-block. - Uma rotação que some no hover. Uma regra de hover com
transform: scale(1.1)substituitransform: rotate(...). Use as propriedades separadasrotateescale, ou liste as duas funções. - Esperar que o layout abra espaço. Uma imagem girada mantém a caixa sem rotação e fica por cima dos vizinhos. Dê ao contêiner o tamanho girado, ou use
writing-modepara texto. - Loaders com
ease. A função de tempo padrão acelera e desacelera a cada volta. Uselinear. - Girar em volta do ponto errado. Defina o
transform-originantes de ajustar o ângulo.
Perguntas frequentes
Como rotacionar um elemento no CSS?
Use transform: rotate(45deg); ou a propriedade separada rotate: 45deg;. Ângulos positivos giram no sentido horário e ângulos negativos no anti-horário, em volta do centro do elemento, a menos que você mude o transform-origin.
Qual a diferença entre transform: rotate() e a propriedade rotate?
Elas desenham o mesmo resultado. A propriedade rotate é independente do transform, então uma regra de hover pode mudar scale ou translate sem remover a rotação, e cada uma pode ter a própria transition. Juntas, elas agem como transform: translate() rotate() scale(), seja qual for a ordem em que você as declara.
Como rotacionar uma imagem 90 graus no CSS?
Acrescente transform: rotate(90deg); (ou rotate: 90deg;) ao img. A imagem mantém o espaço original no layout, então uma imagem em retrato girada para paisagem pode ficar por cima dos vizinhos; dê ao contêiner espaço para o tamanho girado.
Como fazer um elemento girar sem parar no CSS?
Defina @keyframes spin { to { rotate: 360deg; } } e aplique animation: spin 1s linear infinite;. Use linear para a velocidade ficar constante, e deixe mais lento ou pare com prefers-reduced-motion: reduce.
Como deixar um texto na vertical no CSS?
Para um rótulo vertical, writing-mode: vertical-rl costuma ser melhor que rotate(90deg), porque também muda o layout: o elemento ocupa espaço na vertical em vez de ficar por cima dos outros. Use rotate para pequenas inclinações decorativas.