Função skew(): Distorcendo elementos

Aprenda a inclinar elementos em diferentes direções.

A função skew() da propriedade transform é usada para distorcer um elemento em um ângulo específico, ao longo do eixo X (horizontal) ou Y (vertical), ou ambos. É como se você estivesse "empurrando" um lado do elemento, fazendo-o inclinar. Isso pode ser usado para criar efeitos de perspectiva, sombras estilizadas ou designs gráficos interessantes.

Pense na função skew() como se você estivesse pegando um retângulo de papel e empurrando um de seus cantos, fazendo com que ele se incline e se transforme em um paralelogramo.

Como funciona skew()

A função skew() aceita um ou dois valores de ângulo que representam a distorção ao longo dos eixos X e Y.

1. skew(anguloX, anguloY) (2D)

Esta é a forma completa e permite distorcer o elemento em ambos os eixos.

  • anguloX: Valor do ângulo para distorcer o elemento ao longo do eixo horizontal (X).
    • Valores positivos inclinam a parte superior para a direita e a parte inferior para a esquerda.
    • Valores negativos inclinam a parte superior para a esquerda e a parte inferior para a direita.
  • anguloY: Valor do ângulo para distorcer o elemento ao longo do eixo vertical (Y).
    • Valores positivos inclinam a parte esquerda para baixo e a parte direita para cima.
    • Valores negativos inclinam a parte esquerda para cima e a parte direita para baixo.

Sintaxe: transform: skew(<anguloX>, <anguloY>);

Exemplos:

  • transform: skew(20deg, 0);
    • Distorce o elemento 20 graus horizontalmente.
  • transform: skew(10deg, 15deg);
    • Distorce o elemento 10 graus horizontalmente e 15 graus verticalmente.

2. skewX(angulo) (2D)

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

Sintaxe: transform: skewX(<angulo>);

Exemplo:

  • transform: skewX(30deg);
    • Distorce o elemento 30 graus horizontalmente.

3. skewY(angulo) (2D)

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

Sintaxe: transform: skewY(-15deg);

Exemplo:

  • transform: skewY(-15deg);
    • Distorce o elemento 15 graus verticalmente, inclinando a parte esquerda para cima.

Exemplo Prático:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <title>Função skew()</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;
    }

    .box {
      width: 150px;
      height: 100px;
      background-color: #FFC107;
      border: 2px solid #FFA000;
      display: flex;
      justify-content: center;
      align-items: center;
      color: #333;
      font-weight: bold;
      font-size: 1.1em;
      transition: transform 0.3s ease-out; /* Transição suave */
      cursor: pointer;
    }

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

    /* --- Exemplos de skew() --- */

    .skew-xy-box:hover {
      transform: skew(15deg, 10deg); /* Distorce em X e Y */
    }

    .skew-x-box:hover {
      transform: skewX(25deg); /* Distorce apenas em X */
    }

    .skew-y-box:hover {
      transform: skewY(-20deg); /* Distorce apenas em Y */
    }

    .skew-text-effect {
      background-color: #2196F3;
      border-color: #1976D2;
      color: white;
      font-size: 1.5em;
      width: 200px;
      height: 80px;
      transform: skewX(-10deg); /* Efeito de texto inclinado */
    }
    .skew-text-effect:hover {
      transform: skewX(-10deg) scale(1.05); /* Combina skew com scale */
    }
  </style>
</head>
<body>
  <div class="box skew-xy-box">skew(X,Y)</div>
  <div class="box skew-x-box">skewX(X)</div>
  <div class="box skew-y-box">skewY(Y)</div>
  <div class="box skew-text-effect">Texto Inclinado</div>
</body>
</html>

Resultado:

  • Passe o mouse sobre cada caixa para ver o efeito de skew() em ação.
  • Observe como os elementos se inclinam, criando uma sensação de distorção ou perspectiva.

Pontos Chave:

  • Ângulos: Os valores são ângulos, geralmente em deg (graus).
  • Não afeta o layout: Assim como outras funções de transform, skew() é uma transformação visual e não altera o espaço que o elemento ocupa no fluxo do documento.
  • Ponto de Pivô: Por padrão, a distorção ocorre em torno do centro do elemento. Você pode mudar isso com a propriedade transform-origin, que veremos em uma lição futura.
  • Uso Criativo: skew() é frequentemente usado para criar efeitos gráficos estilizados, como botões com aparência de "corte" ou elementos que parecem estar em movimento rápido.

A função skew() adiciona uma camada extra de criatividade às suas transformações, permitindo que você crie designs mais dinâmicos e com personalidade.