Crie fundos animados incríveis com HTML e CSS: tutorial completo!

Incorporar um plano de fundo animado ao seu site ou aplicação pode ser um diferencial marcante no design, conferindo-lhe uma identidade singular e cativante. Fundos criativos têm o poder de evocar emoções e aprimorar a interação do usuário.

Há diversas formas de implementar um plano de fundo animado para sua aplicação, mas uma solução eficaz e simples envolve o uso combinado de HTML e CSS. Explore este exemplo, compreenda seu código e veja uma demonstração prática do resultado final.

Estrutura HTML: O Primeiro Passo

Neste projeto, criaremos um fundo azul com bolhas que se expandem e flutuam em direção ao topo. Você pode observar o resultado final neste Codepen.

Inicie criando uma seção com a classe “wrapper”, que servirá como recipiente para a animação.

Em seguida, insira 10 divs, cada uma representando uma bolha. Dentro de cada div, inclua um span com a classe “dot”. Caso seja iniciante em HTML, você pode aprender os fundamentos destas tags em apenas 10 minutos.

 <body>
    <section class="wrapper">
        <h1>Fundo Animado</h1>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
        <div><span class="dot"></span></div>
    </section>
</body>

Estilizando com CSS: Dando Vida ao Fundo

Apesar de ser possível criar efeitos de fundo interessantes usando apenas HTML, neste projeto utilizaremos CSS para estilizar e animar o plano de fundo.

Inicialmente, zeramos a margem e o preenchimento para garantir que não haja espaços indesejados ao redor do fundo.

 * {
  margin: 0;
  padding: 0;
}

Em seguida, aplicamos estilos à seção principal através da classe “wrapper”. Esta seção terá 100% de largura e altura para ocupar toda a página. Definimos a cor de fundo como um tom de azul e atribuímos uma posição absoluta.

 .wrapper {
  height: 100%;
  width: 100%;
  background-color: #0066cc;
  position: absolute;
}

Estilizamos o elemento H1 com posicionamento absoluto também. Para centralizá-lo na página, começamos definindo sua posição superior esquerda em 50%. Em seguida, utilizamos a função “translate” para movê-lo para cima e para a esquerda, assegurando que seu centro esteja precisamente no meio.

 .wrapper h1 {
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  position: absolute;
  font-family: sans-serif;
  word-spacing: 2px;
  color: #fff;
  font-size: 2rem;
  font-weight: 900;
}

Estilizamos as divs que se tornarão círculos, simulando bolhas animadas. Cada div terá altura, largura e borda. O raio da borda elevado garante o formato circular. Além disso, definimos a duração da animação utilizando a propriedade “animation” do CSS.

 .wrapper div {
    height: 60px;
    width: 60px;
    border: 2px solid rgba(255, 255, 255, 0.7);
    border-radius: 100px;
    position: absolute;
    top: 10%;
    left: 10%;
    animation: 4s linear infinite;
}

Estilizamos os pontos com altura e largura de 5px. Atribuímos um raio de borda para torná-los circulares e um fundo branco. Posicionamos cada um de forma absoluta, próximo ao canto superior direito de sua div pai.

 div .dot {
    height: 5px;
    width: 5px;
    border-radius: 50px;
    background: rgba(255, 255, 255, 0.5);
    position: absolute;
    top: 20%;
    right: 20%;
}

Utilizamos o seletor “nth-child” para posicionar cada div com configurações distintas. A animação será nomeada “animate”, sendo definida posteriormente com @keyframes.

O seletor “nth-child(2)” é utilizado para selecionar a primeira div, pois o primeiro filho do elemento .wrapper é o h1.

 .wrapper div:nth-child(2) {
    top: 20%;
    left: 20%;
    animation: animate 8s linear infinite;
}

.wrapper div:nth-child(3) {
    top: 60%;
    left: 80%;
    animation: animate 10s linear infinite;
}

.wrapper div:nth-child(4) {
    top: 40%;
    left: 40%;
    animation: animate 3s linear infinite;
}

.wrapper div:nth-child(5) {
    top: 66%;
    left: 30%;
    animation: animate 7s linear infinite;
}

.wrapper div:nth-child(6) {
    top: 90%;
    left: 10%;
    animation: animate 9s linear infinite;
}

Atribuímos porcentagens maiores às divs inferiores para que subam ao topo em intervalos diferenciados.

 .wrapper div:nth-child(7) {
    top: 30%;
    left: 60%;
    animation: animate 5s linear infinite;
}

.wrapper div:nth-child(8) {
    top: 70%;
    left: 20%;
    animation: animate 8s linear infinite;
}

.wrapper div:nth-child(9) {
    top: 75%;
    left: 60%;
    animation: animate 10s linear infinite;
}

.wrapper div:nth-child(10) {
    top: 50%;
    left: 50%;
    animation: animate 6s linear infinite;
}

.wrapper div:nth-child(11) {
    top: 45%;
    left: 20%;
    animation: animate 10s linear infinite;
}

Com @keyframes, realizamos transformações graduais e rotações nos círculos e pontos em intervalos distintos. No código abaixo, os pontos giram 70 graus e os círculos 360 graus. Essa rotação cria o efeito de bolha.

 @keyframes animate {
    0% {
        transform: scale(0) translateY(0) rotate(70deg);
    }
    100% {
        transform: scale(1.3) translateY(-100px) rotate(360deg);
    }
}

Você pode aprimorar ainda mais seus planos de fundo com o uso de padrões CSS. Os padrões possibilitam a criação de ondas, grades, folhagens e outras formas que contribuirão para animações ainda mais fascinantes.

CSS: Uma Paleta de Animações

O CSS oferece uma vasta gama de possibilidades para criação de animações, incluindo a alteração da cor de fundo e o controle do tempo de execução de uma animação.

Também é possível definir a frequência com que uma animação deve se repetir, inclusive até o infinito. O sentido de movimento também pode ser especificado, tanto para frente quanto para trás. É interessante experimentar com animações, pois elas podem agregar dinamismo e vida aos seus aplicativos.