Função translate(): Movendo elementos (X, Y, Z)

Aprenda a deslocar elementos horizontalmente, verticalmente e em profundidade.

A função translate() é uma das mais fundamentais e frequentemente usadas dentro da propriedade transform. Ela permite que você desloque um elemento de sua posição original no layout, sem afetar a posição dos elementos vizinhos. É como se você pegasse o elemento e o "empurrasse" para um lado, para cima ou para baixo, ou até mesmo para frente e para trás em um espaço 3D.

Pense na função translate() como um "teletransporte visual" para seus elementos. O elemento ainda ocupa o mesmo espaço no fluxo do documento, mas sua representação visual é movida para outro lugar.

Como funciona translate()

A função translate() aceita um ou mais valores que representam o deslocamento ao longo dos eixos X (horizontal), Y (vertical) e Z (profundidade).

1. translate(X, Y) (2D)

Esta é a forma mais comum e permite mover o elemento em duas dimensões.

  • X: Valor para o deslocamento horizontal.
    • Valores positivos movem para a direita.
    • Valores negativos movem para a esquerda.
  • Y: Valor para o deslocamento vertical.
    • Valores positivos movem para baixo.
    • Valores negativos movem para cima.

Sintaxe: transform: translate(<valor-X>, <valor-Y>);

Exemplos:

  • transform: translate(50px, 100px);
    • Move o elemento 50 pixels para a direita e 100 pixels para baixo.
  • transform: translate(-20px, -30px);
    • Move o elemento 20 pixels para a esquerda e 30 pixels para cima.
  • transform: translate(50%, 0);
    • Move o elemento 50% da sua própria largura para a direita. (Útil para centralização).

2. translateX(X) (2D)

Move o elemento apenas ao longo do eixo horizontal (X).

Sintaxe: transform: translateX(<valor-X>);

Exemplo:

  • transform: translateX(75px);
    • Move o elemento 75 pixels para a direita.

3. translateY(Y) (2D)

Move o elemento apenas ao longo do eixo vertical (Y).

Sintaxe: transform: translateY(<valor-Y>);

Exemplo:

  • transform: translateY(-40px);
    • Move o elemento 40 pixels para cima.

4. translateZ(Z) (3D)

Move o elemento ao longo do eixo de profundidade (Z). Para que translateZ() tenha um efeito visível, o elemento pai (ou um ancestral) precisa ter a propriedade perspective definida.

  • Z: Valor para o deslocamento em profundidade.
    • Valores positivos movem o elemento para mais perto do observador (parece maior).
    • Valores negativos movem o elemento para mais longe do observador (parece menor).

Sintaxe: transform: translateZ(<valor-Z>);

Exemplo:

  • transform: translateZ(100px);
    • Move o elemento 100 pixels para mais perto.

5. translate3d(X, Y, Z) (3D)

Esta é a forma 3D completa, permitindo mover o elemento em todos os três eixos de uma vez.

Sintaxe: transform: translate3d(<valor-X>, <valor-Y>, <valor-Z>);

Exemplo:

  • transform: translate3d(50px, 20px, 80px);
    • Move 50px para a direita, 20px para baixo e 80px para mais perto.

Exemplo Prático:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <title>Função translate()</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      display: flex;
      flex-wrap: wrap;
      gap: 30px;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      background-color: #f4f4f4;
      padding: 20px;
      /* Para ver o efeito 3D, precisamos de perspectiva no pai */
      perspective: 1000px; /* Define a profundidade da perspectiva */
    }

    .box {
      width: 120px;
      height: 120px;
      background-color: #FF5733;
      border: 2px solid #C70039;
      display: flex;
      justify-content: center;
      align-items: center;
      color: white;
      font-weight: bold;
      font-size: 1.1em;
      transition: transform 0.4s ease-out; /* Transição suave */
      cursor: pointer;
      position: relative; /* Para que o z-index funcione se houver sobreposição */
    }

    .box:hover {
      background-color: #FFC300;
    }

    /* --- Exemplos de translate() --- */

    .translate-xy-box:hover {
      transform: translate(30px, 30px); /* Move direita e para baixo */
    }

    .translate-x-box:hover {
      transform: translateX(-40px); /* Move para a esquerda */
    }

    .translate-y-box:hover {
      transform: translateY(50px); /* Move para baixo */
    }

    .translate-z-box {
      /* Para ver o efeito de translateZ, o elemento precisa de um contexto 3D */
      /* O body já tem perspective, mas o elemento precisa de transform-style */
      transform-style: preserve-3d;
    }
    .translate-z-box:hover {
      transform: translateZ(150px); /* Move para frente (parece maior) */
    }

    .translate3d-box {
      transform-style: preserve-3d;
    }
    .translate3d-box:hover {
      transform: translate3d(20px, -20px, 100px); /* Move em X, Y e Z */
    }

    .centralize-box {
      position: absolute; /* Para demonstrar centralização com translate */
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%); /* Centraliza o elemento */
      background-color: #33FF57;
      border-color: #008000;
      width: 150px;
      height: 150px;
      z-index: 10; /* Para ficar acima dos outros */
    }
    .centralize-box:hover {
      transform: translate(-50%, -50%) scale(1.1); /* Combina centralização com escala */
    }
  </style>
</head>
<body>
  <div class="box translate-xy-box">translate(X,Y)</div>
  <div class="box translate-x-box">translateX(X)</div>
  <div class="box translate-y-box">translateY(Y)</div>
  <div class="box translate-z-box">translateZ(Z)</div>
  <div class="box translate3d-box">translate3d(X,Y,Z)</div>
  <div class="box centralize-box">Centralizar com translate</div>
</body>
</html>

Resultado:

  • Passe o mouse sobre cada caixa para ver o efeito de translate() em ação.
  • Observe como a caixa translate-z-box parece "saltar" para fora da tela quando você passa o mouse, devido ao perspective no body.
  • A caixa centralize-box demonstra uma técnica comum para centralizar elementos.

Pontos Chave:

  • Unidades: Você pode usar qualquer unidade CSS válida (px, %, em, rem, vw, vh).
  • Centralização: translate(-50%, -50%) é uma técnica poderosa para centralizar elementos quando combinada com top: 50%; left: 50%; em um elemento posicionado (absolute, fixed, relative).
  • Contexto 3D: Para que translateZ() e translate3d() tenham um efeito visual de profundidade, um elemento ancestral (geralmente o pai) precisa ter a propriedade perspective definida.
  • Não afeta o layout: Lembre-se que translate() move o elemento visualmente, mas o espaço que ele ocupa no layout permanece o mesmo.

A função translate() é um bloco de construção essencial para criar animações e interações, permitindo que você controle o posicionamento visual dos seus elementos de forma precisa e eficiente.