Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Usando CSS transforms
Mudando coordenadas no espaço da tela oCSS transforms permite que a posição do conteúdo afetado seja alterada sem afetar o fluxo de informação da página. Elas são implementadas usando um conjunto de propriedades CSS que permitem alterações lineares em elementos HTML. Essas alterações incluem rotação, inclinações, alteração da escala e tradução tanto em 2D quanto em 3D.
In this article
Propriedades de CSS transforms
Duas propriedades principais são usadas para definir o CSS transforms:transform andtransform-origin
transform-originDefine a posição de origem do elemento. Por padrão esta posição é o canto superior esquerdo do elemento e pode ser movido. É utilizado para muitas alterações, como rotação, alteração de escala e inclinação, que precisam de um ponto especifico como parâmetro.
transformDefine qual alteração será feita no elemento. Pode-se usar mais de um efeito separado-os por um espaço. Tais efeitos serão aplicados um após o outro, na ordem determinada no código.
Exemplo: Rotação
Este exemplo cria um iframe que permite que a página inicial do Google seja utilizada com uma rotação de 90 graus a partir do canto inferior esquerdo
Veja um exemplo funcionandoVeja uma foto do exemplo
<div> <iframe src="http://www.google.com/" width="500" height="600"></iframe></div>Example: Inclinando e Movendo
Este exemplo cria um iframe que permite que você use a página inicial do Google inclinada em 10 graus no eixo X.
Veja um exemplo funcionandoView uma foto do exemplo
<div > <iframe src="http://www.google.com/" width="600" height="500"></iframe></div>Propriedades especificas 3D do CSS
Trabalhar com propriedades CSS em 3D é um pouco mais difícil. Você tem que começar configurando o espaço 3D dando perspectiva a ele, então você tem que configurar como os elementos 2D irão se comportar no espaço.
Configurando uma perspectiva
O primeiro elemento a ser configurado é a perspectiva. É ela a responsável pela sensação de 3D. Quanto mais longe o objeto estiver do usuário, menor ele é.
Quanto será a sensação de encolhimento é definida pela propriedadeperspective. Quanto menor o valor, mais profundidade terá o objeto.
HTML
O HTML abaixo cria quatro cópias da mesma caixa, com a perspectiva definida em valores diferentes.
<table> <tbody> <tr> <th><code>perspective: 250px;</code></th> <th><code>perspective: 350px;</code></th> </tr> <tr> <td> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </td> <td> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </td> </tr> <tr> <th><code>perspective: 500px;</code></th> <th><code>perspective: 650px;</code></th> </tr> <tr> <td> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </td> <td> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </td> </tr> </tbody></table>CSS
O CSS estabelece classes que podem ser usadas para definir a perspectiva a diferentes distâncias. Ele também inclui classes para a caixa do recipiente e o próprio cubo, bem como cada uma de suas faces.
/* Shorthand classes for different perspective values */.pers250 { perspective: 250px;}.pers350 { perspective: 350px;}.pers500 { perspective: 500px;}.pers650 { perspective: 650px;}/* Define the container div, the cube div, and a generic face */.container { width: 200px; height: 200px; margin: 75px 0 0 75px; border: none;}.cube { width: 100%; height: 100%; backface-visibility: visible; perspective-origin: 150% 150%; transform-style: preserve-3d;}.face { display: block; position: absolute; width: 100px; height: 100px; border: none; line-height: 100px; font-family: sans-serif; font-size: 60px; color: white; text-align: center;}/* Define each face based on direction */.front { background: rgba(0, 0, 0, 0.3); transform: translateZ(50px);}.back { background: rgba(0, 255, 0, 1); color: black; transform: rotateY(180deg) translateZ(50px);}.right { background: rgba(196, 0, 0, 0.7); transform: rotateY(90deg) translateZ(50px);}.left { background: rgba(0, 0, 196, 0.7); transform: rotateY(-90deg) translateZ(50px);}.top { background: rgba(196, 196, 0, 0.7); transform: rotateX(90deg) translateZ(50px);}.bottom { background: rgba(196, 0, 196, 0.7); transform: rotateX(-90deg) translateZ(50px);}/* Make the table a little nicer */th,p,td { background-color: #eeeeee; padding: 10px; font-family: sans-serif; text-align: left;}Resultado
O segundo elemento a ser configurado é a posição do espectador, com a propriedadeperspective-origin. Por padrão, a perspectiva está centrada no telespectador, o que nem sempre é adequado.
Mudando a origem da perspectiva
Este exemplo mostra cubos com valores populares doperspective-origin.
HTML
<section> <figure> <figcaption><code>perspective-origin: top left;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: top;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: top right;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: left;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: 50% 50%;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: right;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: bottom left;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: bottom;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: bottom right;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: -200% -200%;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: 200% 200%;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure> <figure> <figcaption><code>perspective-origin: 200% -200%;</code></figcaption> <div> <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> </div> </figure></section>CSS
/* perspective-origin values (unique per example) */.potl { perspective-origin: top left;}.potm { perspective-origin: top;}.potr { perspective-origin: top right;}.poml { perspective-origin: left;}.pomm { perspective-origin: 50% 50%;}.pomr { perspective-origin: right;}.pobl { perspective-origin: bottom left;}.pobm { perspective-origin: bottom;}.pobr { perspective-origin: bottom right;}.po200200neg { perspective-origin: -200% -200%;}.po200200pos { perspective-origin: 200% 200%;}.po200200 { perspective-origin: 200% -200%;}/* Define the container div, the cube div, and a generic face */.container { width: 100px; height: 100px; margin: 24px; border: none;}.cube { width: 100%; height: 100%; backface-visibility: visible; perspective: 300px; transform-style: preserve-3d;}.face { display: block; position: absolute; width: 100px; height: 100px; border: none; line-height: 100px; font-family: sans-serif; font-size: 60px; color: white; text-align: center;}/* Define each face based on direction */.front { background: rgba(0, 0, 0, 0.3); transform: translateZ(50px);}.back { background: rgba(0, 255, 0, 1); color: black; transform: rotateY(180deg) translateZ(50px);}.right { background: rgba(196, 0, 0, 0.7); transform: rotateY(90deg) translateZ(50px);}.left { background: rgba(0, 0, 196, 0.7); transform: rotateY(-90deg) translateZ(50px);}.top { background: rgba(196, 196, 0, 0.7); transform: rotateX(90deg) translateZ(50px);}.bottom { background: rgba(196, 0, 196, 0.7); transform: rotateX(-90deg) translateZ(50px);}/* Make the layout a little nicer */section { background-color: #eee; padding: 10px; font-family: sans-serif; text-align: left; display: grid; grid-template-columns: repeat(3, 1fr);}Resultado
Feito isso, você pode trabalhar com elementos 3D.