Menu

Rotate CSS: rotacionar com rotate() e fazer girar

Rotacione um elemento com transform: rotate(45deg) ou com a propriedade rotate, mais nova. Veja as unidades de ângulo (deg, turn, rad), como girar em volta de um canto com transform-origin, rotacionar texto e ícones, um loader girando e a rotação 3D com rotateX e rotateY.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

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

UnidadeVolta completa90 graus
deg360deg90deg
turn1turn0.25turn
rad6.2832rad1.5708rad
grad400grad100grad

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. Acrescente display: inline-block.
  • Uma rotação que some no hover. Uma regra de hover com transform: scale(1.1) substitui transform: rotate(...). Use as propriedades separadas rotate e scale, 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-mode para texto.
  • Loaders com ease. A função de tempo padrão acelera e desacelera a cada volta. Use linear.
  • Girar em volta do ponto errado. Defina o transform-origin antes 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.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR