Animações básicas com CSS e SVG

SVG e sua estrutura

Um SVG é composto por paths

Cada path representa um elemento do SVG

Podemos criar grupos com esses elementos, representando uma parte do SVG

E, por fim, podemos animar essas partes de maneira separada :)

Agrupando e lendo um SVG

1) Abra o SVG no navegador e em um editor

2) Identifique os paths que pretende agrupar

3) Adicione esses paths dentro de um <g></g>

4) Adicione id ou classe para esse <g></g>

Obs: você pode encontrar alguns svgs aqui: https://undraw.co/illustrations

5) Crie as animações para esse id ou classe :)

Animações com CSS no SVG

É possível animar os elementos do SVG da mesma forma que faríamos com elementos do HTML

Podemos usar a propriedade animation para criar a animação. Ela trabalha com @keyframes para definir o comportamento e transform para transformá-la

Propriedade animation

.container {
  animation: my-animation 10s 2s linear infinite;
}

Classe a ser animada

Nome da animação

Duração da animação

Delay para iniciar a animação

Como deve ser executada

Quantas vezes deve ser executada

Keyframes - o que são?

Permite controlar os frames da sua animação

Com @keyframes do CSS, podemos definir fases para a animação, com valor inicial e final

Com isso, podemos controlar as características da animação em casa fase, transformando-a conforme necessário

Keyframes - opção 1

@keyframes my-animation {
 from {
  transform: rotateZ(0deg);
 }
 to {
  transform: rotateZ(360deg);
 }
}

Estado/fase inicial

A qual animação se refere

Estado/fase final

Transformação no estado inicial

Transformação no estado final

Keyframes - opção 2

@keyframes my-animation {
 0% {
  transform: rotateZ(0deg);
 }
 100% {
  transform: rotateZ(360deg);
 }
}

Estado/fase inicial

A qual animação se refere

Estado/fase final

Transformação no estado inicial

Transformação no estado final

Exemplo 1

<div class="container" />

<style>
  .container {
    width: 100px;
    height: 100px;
    background-color: violet;
    animation: my-animation 3s linear infinite;
  }

  @keyframes my-animation {
    from {
      transform: rotateZ(0deg);
    }
    to {
      transform: rotateZ(360deg);
    }
  }
</style>

Exemplo 2

<div class="container" />

<style>
  .container {
    width: 50px;
    height: 50px;
    animation: my-animation 5s linear infinite alternate;
  }

  @keyframes my-animation {
    from {
      transform: rotateZ(0deg);
      border-radius: 5%;
      box-shadow: 0 0 0 10px slateblue;
      background-color: violet;
    }
    to {
      transform: rotateZ(360deg);
      border-radius: 50%;
      box-shadow: 50px 50px 0 10px violet;
      background-color: slateblue;
    }
  }
</style>
<div class="container" />

<style>
  .container {
    width: 50px;
    height: 50px;
    animation: my-animation 3s 2s linear infinite alternate;
  }
  @keyframes my-animation {
    0% {
      transform: translate(0px, 0px) rotate(0);
      border-radius: 5%;
      box-shadow: 50px 50px 0 10px pink;
      background-color: slateblue;
    }
    50% {
      transform: translate(40px, 40px) rotate(0);
      border-radius: 20%;
      box-shadow: -50px -50px 0 10px violet;
      background-color: violet;
    }
    100% {
      transform: translate(100px, 100px) rotate(180deg);
      border-radius: 100%;
      box-shadow: 0 0 0 10px slateblue;
      background-color: pink;
    }
  }
</style>

Exemplo 3

Vamos animar um SVG?

Referências

Cursos e conteúdos

Perguntas?

Obrigada!

Helen Dias - Desenvolvedora Front-End

Animações básicas

By helendias

Animações básicas

  • 571