1. Tecnologia Web para desenvolvedores
  2. CSS
  3. Guides
  4. Transforms
  5. Usando CSS transforms

Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.

View in English Always switch to English

Usando CSS transforms

Mudando coordenadas no espaço da tela o CSS 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.

Propriedades de CSS transforms

Duas propriedades principais são usadas para definir o CSS transforms: transform and transform-origin

transform-origin

Define 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.

transform

Define 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 funcionando Veja uma foto do exemplo

html
<div style="transform: rotate(90deg); transform-origin: bottom left;">
 <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 funcionando View uma foto do exemplo

html
<div
 style="transform: skewx(10deg) translatex(150px);
 transform-origin: bottom left;">
 <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 propriedade perspective. 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.

html
<table>
 <tbody>
 <tr>
 <th><code>perspective: 250px;</code></th>
 <th><code>perspective: 350px;</code></th>
 </tr>
 <tr>
 <td>
 <div class="container">
 <div class="cube pers250">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </td>
 <td>
 <div class="container">
 <div class="cube pers350">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </td>
 </tr>
 <tr>
 <th><code>perspective: 500px;</code></th>
 <th><code>perspective: 650px;</code></th>
 </tr>
 <tr>
 <td>
 <div class="container">
 <div class="cube pers500">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </td>
 <td>
 <div class="container">
 <div class="cube pers650">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">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.

css
/* 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 propriedade perspective-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 do perspective-origin.

HTML
html
<section>
 <figure>
 <figcaption><code>perspective-origin: top left;</code></figcaption>
 <div class="container">
 <div class="cube potl">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: top;</code></figcaption>
 <div class="container">
 <div class="cube potm">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: top right;</code></figcaption>
 <div class="container">
 <div class="cube potr">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: left;</code></figcaption>
 <div class="container">
 <div class="cube poml">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: 50% 50%;</code></figcaption>
 <div class="container">
 <div class="cube pomm">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: right;</code></figcaption>
 <div class="container">
 <div class="cube pomr">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: bottom left;</code></figcaption>
 <div class="container">
 <div class="cube pobl">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: bottom;</code></figcaption>
 <div class="container">
 <div class="cube pobm">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: bottom right;</code></figcaption>
 <div class="container">
 <div class="cube pobr">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: -200% -200%;</code></figcaption>
 <div class="container">
 <div class="cube po200200neg">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: 200% 200%;</code></figcaption>
 <div class="container">
 <div class="cube po200200pos">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
 <figure>
 <figcaption><code>perspective-origin: 200% -200%;</code></figcaption>
 <div class="container">
 <div class="cube po200200">
 <div class="face front">1</div>
 <div class="face back">2</div>
 <div class="face right">3</div>
 <div class="face left">4</div>
 <div class="face top">5</div>
 <div class="face bottom">6</div>
 </div>
 </div>
 </figure>
</section>
CSS
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.

Elementos 2D em espaço 3D

Veja também

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.

AltStyle によって変換されたページ (->オリジナル) /