Criar Animações CSS3 com Keyframes

CSSCSSBeginner
Pratique Agora

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Neste laboratório, os alunos mergulharão no mundo das animações CSS3, dominando a poderosa regra @keyframes e as técnicas de animação. O curso oferece uma exploração abrangente da criação de animações web dinâmicas, com foco na compreensão da sintaxe de keyframes, na definição de propriedades de animação e na implementação de efeitos de animação avançados sem depender de JavaScript.

Os participantes aprenderão a criar animações suaves e complexas, definindo estágios de animação usando keyframes baseados em porcentagem e propriedades de transformação (transform properties). Através de exemplos práticos e exercícios práticos, os alunos descobrirão como mover, redimensionar e colorir elementos dinamicamente, adquirindo as habilidades para criar experiências web envolventes e interativas usando técnicas de animação CSS3 puras.

Entendendo a Sintaxe de Keyframes de Animação CSS3

Nesta etapa, você aprenderá a sintaxe fundamental dos keyframes de animação CSS3, que são os blocos de construção para criar animações web dinâmicas. As animações CSS permitem transformar suavemente elementos de um estilo para outro sem usar JavaScript.

Vamos começar entendendo a sintaxe básica dos keyframes CSS. Abra o WebIDE e crie um novo arquivo chamado styles.css no diretório ~/project.

As animações de keyframe CSS são definidas usando a regra @keyframes, que especifica o comportamento da animação em diferentes estágios da sequência de animação. Aqui está um exemplo simples para demonstrar a sintaxe:

@keyframes moveRight {
  /* Estado inicial (0% ou "from") */
  from {
    transform: translateX(0);
  }

  /* Estado final (100% ou "to") */
  to {
    transform: translateX(300px);
  }
}

Neste exemplo, moveRight é o nome da animação, e define como um elemento se moverá de sua posição original para 300 pixels para a direita.

Você também pode usar keyframes baseados em porcentagem para animações mais complexas:

@keyframes colorChange {
  0% {
    background-color: red;
  }
  50% {
    background-color: green;
  }
  100% {
    background-color: blue;
  }
}

Esta animação demonstra como você pode especificar múltiplos estágios de uma animação usando valores de porcentagem, permitindo efeitos mais intrincados e dinâmicos.

Pontos-chave para lembrar sobre a sintaxe de keyframe:

  • Use @keyframes seguido por um nome de animação único
  • Defina estados usando from/to ou valores de porcentagem
  • Especifique as propriedades CSS a serem animadas em cada estágio

Exemplo de saída de uma animação simples:

[Um elemento div movendo-se suavemente da esquerda para a direita]
[Um elemento div mudando de cor de vermelho para verde para azul]

Definindo Animação Básica Usando a Regra @keyframes

Nesta etapa, você aprenderá como criar uma animação básica usando a regra @keyframes, construindo uma animação simples de um elemento em movimento. Vamos expandir o conhecimento da etapa anterior e criar um exemplo mais prático.

Primeiro, vamos criar um arquivo HTML para demonstrar nossa animação. Abra o WebIDE e crie um novo arquivo chamado index.html no diretório ~/project:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Basic CSS Animation</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <div class="animated-box"></div>
  </body>
</html>

Agora, atualize o arquivo styles.css que criamos anteriormente com uma animação mais detalhada:

.animated-box {
  width: 100px;
  height: 100px;
  background-color: blue;
  position: relative;
}

@keyframes moveAndResize {
  0% {
    /* Estado inicial */
    transform: translateX(0) scale(1);
    background-color: blue;
  }

  50% {
    /* Ponto médio da animação */
    transform: translateX(200px) scale(1.5);
    background-color: green;
  }

  100% {
    /* Estado final */
    transform: translateX(400px) scale(1);
    background-color: red;
  }
}

Vamos detalhar a regra @keyframes:

  • Definimos uma animação chamada moveAndResize
  • Em 0% (início), a caixa está em sua posição original
  • Em 50% (ponto médio), a caixa se move 200px para a direita e aumenta de tamanho
  • Em 100% (fim), a caixa se move 400px para a direita e retorna ao tamanho original

Exemplo de saída:

[Uma caixa azul que:
 - Move-se da esquerda para a direita
 - Muda de tamanho de normal para maior e volta
 - Muda de cor de azul para verde para vermelho]

Este exemplo demonstra como:

  • Criar uma animação de múltiplos estágios
  • Usar keyframes baseados em porcentagem
  • Combinar múltiplas transformações (translação e escala)
  • Mudar a cor durante a animação

Aplicando Propriedades de Animação a Elementos HTML

Nesta etapa, você aprenderá como aplicar propriedades de animação a elementos HTML, dando vida às suas animações de keyframe. Modificaremos o arquivo styles.css anterior para adicionar propriedades de animação específicas que controlam como a animação se comporta.

Atualize o arquivo styles.css com o seguinte CSS:

.animated-box {
  width: 100px;
  height: 100px;
  background-color: blue;
  position: relative;

  /* Propriedades de animação */
  animation-name: moveAndResize; /* Nome da animação keyframe */
  animation-duration: 3s; /* Tempo total de um ciclo de animação */
  animation-timing-function: ease-in-out; /* Aceleração e desaceleração suaves */
  animation-delay: 1s; /* Aguarda 1 segundo antes de iniciar */
}

@keyframes moveAndResize {
  0% {
    transform: translateX(0) scale(1);
    background-color: blue;
  }

  50% {
    transform: translateX(200px) scale(1.5);
    background-color: green;
  }

  100% {
    transform: translateX(400px) scale(1);
    background-color: red;
  }
}

Propriedades-chave de animação explicadas:

  • animation-name: Liga o elemento a uma regra @keyframes específica
  • animation-duration: Define o tempo total para um ciclo de animação completo
  • animation-timing-function: Controla a curva de velocidade da animação
  • animation-delay: Especifica um período de espera antes do início da animação

Você também pode usar a propriedade abreviada animation para combinar estas:

.animated-box {
  animation: moveAndResize 3s ease-in-out 1s;
}

Exemplo de saída:

[Uma caixa azul que:
 - Espera 1 segundo antes de começar
 - Move-se suavemente da esquerda para a direita
 - Muda de tamanho e cor gradualmente
 - Leva 3 segundos para completar um ciclo de animação]

Personalizando o Tempo e a Iteração da Animação

Nesta etapa, você aprenderá como ajustar suas animações CSS controlando seu tempo, iteração e direção. Vamos expandir o exemplo anterior para demonstrar a personalização avançada da animação.

Atualize o arquivo styles.css com o seguinte CSS:

.animated-box {
  width: 100px;
  height: 100px;
  background-color: blue;
  position: relative;

  /* Personalizar propriedades de animação */
  animation-name: moveAndResize;
  animation-duration: 3s;
  animation-timing-function: cubic-bezier(0.5, 0.1, 0.3, 1);
  animation-iteration-count: 3; /* Repete a animação 3 vezes */
  animation-direction: alternate; /* Inverte a direção em cada iteração */
  animation-fill-mode: forwards; /* Mantém o estado final após a animação */
}

@keyframes moveAndResize {
  0% {
    transform: translateX(0) scale(1);
    background-color: blue;
  }

  100% {
    transform: translateX(400px) scale(1.5);
    background-color: red;
  }
}

Propriedades-chave de personalização da animação:

  • animation-timing-function: Controla a curva de velocidade (por exemplo, cubic-bezier() para aceleração personalizada)
  • animation-iteration-count: Define quantas vezes a animação se repete
  • animation-direction: Determina a direção da reprodução da animação
  • animation-fill-mode: Especifica como os estilos são aplicados antes/depois da animação

Você também pode usar a propriedade abreviada animation:

.animated-box {
  animation: moveAndResize 3s cubic-bezier(0.5, 0.1, 0.3, 1) 3 alternate forwards;
}

Exemplo de saída:

[Uma caixa azul que:
 - Move-se e redimensiona 3 vezes
 - Muda de direção a cada iteração
 - Usa uma curva de velocidade personalizada
 - Permanece na posição final após a animação]

Experimentando com Efeitos de Animação Avançados

Nesta etapa, você explorará técnicas avançadas de animação CSS, criando uma animação complexa com múltiplos elementos que demonstra o poder dos keyframes e transformações CSS.

Atualize o arquivo index.html para incluir múltiplos elementos animados:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Advanced CSS Animations</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <div class="container">
      <div class="circle circle1"></div>
      <div class="circle circle2"></div>
      <div class="circle circle3"></div>
    </div>
  </body>
</html>

Substitua o conteúdo de styles.css pela seguinte animação avançada:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #f0f0f0;
}

.circle {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  position: absolute;
  opacity: 0.7;
}

.circle1 {
  background-color: #ff6b6b;
  animation: orbit1 4s infinite linear;
}

.circle2 {
  background-color: #4ecdc4;
  animation: orbit2 4s infinite linear;
}

.circle3 {
  background-color: #45b7d1;
  animation: orbit3 4s infinite linear;
}

@keyframes orbit1 {
  0% {
    transform: rotate(0deg) translateX(150px) rotate(0deg);
  }
  100% {
    transform: rotate(360deg) translateX(150px) rotate(-360deg);
  }
}

@keyframes orbit2 {
  0% {
    transform: rotate(120deg) translateX(200px) rotate(-120deg);
  }
  100% {
    transform: rotate(480deg) translateX(200px) rotate(-480deg);
  }
}

@keyframes orbit3 {
  0% {
    transform: rotate(240deg) translateX(250px) rotate(-240deg);
  }
  100% {
    transform: rotate(600deg) translateX(250px) rotate(-600deg);
  }
}

Técnicas avançadas de animação demonstradas:

  • Múltiplas animações simultâneas
  • Rotação e translação complexas
  • Animação infinita com tempo linear
  • Movimento orbital escalonado
  • Variações de opacidade e cor

Exemplo de saída:

[Três círculos coloridos orbitando em torno de um ponto central
 - Círculos se movem a diferentes distâncias
 - Rotação contínua e suave
 - Efeito sobreposto e translúcido]

Resumo

Neste laboratório, os participantes exploraram os fundamentos dos keyframes de animação CSS3, aprendendo a criar animações web dinâmicas sem usar JavaScript. O laboratório focou na compreensão da sintaxe da regra @keyframes, que permite aos desenvolvedores definir sequências de animação complexas usando estados baseados em porcentagem ou de/para. Os participantes aprenderam a especificar comportamentos de animação transformando propriedades CSS, como posição, cor e tamanho, em diferentes estágios de uma sequência de animação.

Os exercícios práticos guiaram os alunos na criação de efeitos de animação básicos e avançados, incluindo a movimentação de elementos pela tela, a mudança de cores e a personalização do tempo e das iterações da animação. Ao experimentar diferentes configurações de keyframe, os participantes ganharam experiência prática na criação de animações web suaves e envolventes que aprimoram a interatividade da interface do usuário e o apelo visual.

OSZAR »