(85) 99645-7140 nelclassico@gmail.com Praça Coronel Melquiades, 124
Tecnologia transform

traduzirZ()

A função CSS translateZ() adiciona profundidade a um elemento, aproximando-o ou afastando-o no espaço. Em outras palavras, desloca um elemento ao longo do eixo Z em um espaço 3D.

.box:hover {
  transform: translateZ(100px);
}

.box.perspective:hover {
  transform: perspective(500px) translateZ(100px);
}

A função perspective() ou a propriedade ###CODE_2318c478d102bf81d4c199196d5cf964### são necessárias para translateZ() para funcionar. Sem qualquer um deles, não há efeito.

Ative a chave na demonstração a seguir e passe o mouse sobre a caixa para vê-la mais próxima:

CodePen Incorporar Fallback

Embora pareça que o elemento .box está ficando maior” ao passar o mouse, não é isso que está acontecendo. Quando você passa o mouse sobre a caixa, ela na verdade se move mais perto de você por um comprimento de 100 pixels, fazendo com que parece maior. Falaremos mais sobre isso em breve, para que fique mais óbvio o que está acontecendo lá.

translateZ() não deve ser confundido com uma alternativa à função scale() ou ###CODE_05ecc15aa3064af6bedcbb9c366a1dc6### propriedade. Perspectiva e escala são dois conceitos diferentes.

A função translateZ() é definida na especificação  CSS Transform Module Nível 2  

Sintaxe

translateZ() = translateZ(<length>)

A função translateZ() recebe um único argumento <length> que define a que distância o elemento está da frente da tela. É usado com a propriedade transform 

Argumentos

/* Positive lengths */
transform: translateZ(100px);
transform: translateZ(5rem);

/* Negative lengths */
transform: translateZ(-50px);
transform: translateZ(-8em);

A função translateZ() recebe um único argumento:

  • <length>: a distância do elemento da frente da tela. Quando é positivo, o elemento se aproxima do usuário e se afasta quando é negativo.

Como funciona

A função translateZ() é complicada porque move um elemento ao longo do eixo Z, o que não é visualmente perceptível em um navegador por padrão. Como os navegadores renderizam elementos apenas pela altura e largura, e não pela profundidade, a função translateZ() pode parecer não fazer nada.

A three-dimensional plane on top of a grid with perspective, showing the X, Y, and Z axes.

Para mostrar sua profundidade e projeção, precisamos usar a propriedade ###CODE_2318c478d102bf81d4c199196d5cf964### ou a função perspective() . Além disso, podemos definir o valor transform-style como preserve-3d em seu pai, o que permite ao CSS saber que os elementos filhos devem ser posicionados em 3D.

Projeção e perspectiva

Em um site, não há uma sensação de profundidade — isto é, “proximidade” ou “afastamento” — já que os elementos são achatados em uma tela 2D. Seja translate(200px) ou translate(20px), percebemos o elemento à mesma distância, portanto, não há perspectiva alguma, a menos que o habilitemos explicitamente. Para mostrar isso, tome por exemplo o seguinte HTML:

<div class="scene">
  <div class="parent">
    <div class="box">translateZ(100px)</div>
  </div>
</div>

Primeiramente, vamos permitir alguma perspectiva em toda a cena:

.scene {
  perspective: 800px;
}

Em seguida, definiremos ###CODE_76adce438c9a4b713f43a71465177608### para preserve-3d no pai, para que os filhos também sejam transformados em 3D:

.parent {
  transform-style: preserve-3d;
}

Agora movemos o .box 100px para mais perto do usuário usando translateZ().

.box {
  transform: translateZ(100px);
}
CodePen Incorporar Fallback

Embora pareça que a caixa cresceu 100px de tamanho, ao girar o pai para o lado, você verá que o .box tamanho não aumentou, mas é a distância entre o .parent e o .box que fez isso.

A tall blue rectangle rotated left along the Y-axis adding perspective.

perspective vs.

Ambos fazem o mesmo trabalho: definem a projeção do elemento. A propriedade perspective é aplicada ao pai para todos os elementos 3D, enquanto a função perspective() só pode ser aplicada a um único 3D elemento e deve ser declarado antes da função de transformação 3D.

A propriedade perspective

.parent {
  perspective: 800px;
}

.child-1 {
  transform: translateZ(200px); /* Defined within a projection of 800px */
}

.child-2 {
  transform: translate3D(100px, 200px, 150px); /* Defined within a projection of 800px */
}

A perspective() função

.element {
  transform: translateZ(100px) perspective(800px); /* Nope ❌ */
}

.element {
  transform: perspective(800px) translateZ(100px); /* Yep ✅ */
}

Também pode ser usado para otimizar o desempenho da web

Você sabia que pode usar a função translateZ() para aumentar o desempenho do nosso site? As funções de transformação CSS 3D usam a GPU , que é mais rápida e superior à CPU para renderização de elementos. Este hack de desempenho evita oscilações durante as animações e torna as transições mais suaves.

Os desenvolvedores adicionam translateZ(0) para mudar a renderização da CPU para a GPU, melhorando o desempenho. Se você está enfrentando problemas com uma animação, agora você tem uma maneira de consertá-la!

Demonstração

CodePen Incorporar Fallback

Especificação

A função translateZ() é definida na especificação  CSS Transform Module Level 2  .

Suporte ao navegador

A função translateZ() está disponível em todos os navegadores modernos.

Referências

Mais sobre transformações 3D!


translateZ() originalmente escrito à mão e publicado com amor em CSS-Tricks . Você realmente deveria receber o boletim informativo também.

Deixe um comentário

Seu email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.