Animowane tło

Kolorowe i animowane tło CSS3
Animacja tła wykonana przy pomocy CSS

Tło CSS Animowane tło CSS

Często zastanawiamy się jak w szybki sposób utworzyć tło dla naszego komponentu? Czy powinniśmy użyć prostych grafik wektorowych, czy plików graficznych. Chciałbym zaprezentować jak w prosty sposób możemy utworzyć tło poszczególnego elementu z wykorzystaniem animacji CSS3. Moduł możemy dowolnie edytować dzięki systemowi zmiennych w poszczególnych elementach a mały rozmiar zapewni szybkie wczytywanie strony.

<article class="compsoul-background-container">
  <h2 class="compsoul-background-heading">compsoul.pl</h2>
  <div aria-hidden="true" class="compsoul-background">
    <span class="shape-waves"></span>
    <span class="shape-square"></span>
    <span class="shape-triangle"></span>
    <span class="shape-parallelogram"></span>
    <span class="shape-rectangle"></span>
    <span class="shape-circle"></span>
    <span class="shape-trapezoid"></span>
  </div>
</article>
.compsoul-background-container {
  position: relative;
}

.compsoul-background-heading {
  color: #ffffff22;
  font-size: 10vw;
  font-weight: 800;
  left: 50%;
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 1;
}

.compsoul-background {
  --blur: 140px;
  --opacity: 0.5;
  --speed: 32s;
  background-image: linear-gradient(to right, #c6ffdd, #fbd786, #f7797d);
  height: 100vh;
  overflow: hidden;
  position: relative;
  width: 100%;
}

.compsoul-background .shape-waves {
  --color: #f15412;
  --size: 72vw;
  background: radial-gradient(circle at 50% 100%, transparent 20%, var(--color) 20%, var(--color) 50%, transparent 50%, transparent),
              radial-gradient(circle at 50% 0, transparent 20%, var(--color) 20%, var(--color) 50%, transparent 50%, transparent) calc( var(--size) * 0.5 ) 0;
  background-size: var(--size) calc( var(--size) * 0.5 );
  display: block;
  filter: blur( var(--blur) );
  height: 100%;
  opacity: var(--opacity);
  width: 100%;
}

.compsoul-background .shape-square {
  --color: #ff06B7;
  --size: 32vw; 
  background: var(--color);
  display: block;
  filter: blur( var(--blur) );
  height: var(--size);
  left: calc( var(--size) * -0.25 );
  opacity: var(--opacity);
  position: absolute;
  top: calc( var(--size) * -0.25 );
  width: var(--size);
}

.compsoul-background .shape-triangle {
  --color: #f47c7c;
  --size: 28vw;
  animation: compsoul-background var(--speed) linear infinite;
  border-left: var(--size) solid transparent;
  border-right: var(--size) solid transparent;
  border-bottom: calc( var(--size) * 2 ) solid var(--color);
  bottom: calc( var(--size) * -0.25 );
  display: block;
  filter: blur( var(--blur) );
  height: 0;
  left: calc( var(--size) * 2 );
  opacity: var(--opacity);
  position: absolute;
  width: 0;
}

.compsoul-background .shape-rectangle {
  --color: #570a57;
  --size: 32vw; 
  background: var(--color);
  display: block;
  filter: blur( var(--blur) );
  height: var(--size);
  left: 20%;
  opacity: var(--opacity);
  position: absolute;
  top: calc( var(--size) * -0.25 );
  width: calc( var(--size) * 2 );
}

.compsoul-background .shape-circle {
  --color: #ffef82;
  --size: 54vw;
  animation: compsoul-background var(--speed) ease-in-out infinite;
  background: var(--color);
  border-radius: 100%;
  display: block;
  filter: blur( var(--blur) );
  height: var(--size);
  opacity: var(--opacity);
  position: absolute;
  right: calc( var(--size) * -0.25 );
  top: calc( var(--size) * -0.25 );
  width: var(--size);
}

.compsoul-background .shape-trapezoid {
  --color: #00ffab;
  --size: 8vw;
  animation: compsoul-background var(--speed) linear infinite;
  border-bottom: calc( var(--size) * 4 ) solid var(--color);
  border-left: var(--size) solid transparent;
  border-right: var(--size) solid transparent;
  bottom: calc( var(--size) * -0.25 );
  display: block;
  filter: blur( var(--blur) );
  height: 0;
  opacity: var(--opacity);
  right: 30%;
  position: absolute;
  width: calc( var(--size) * 4 );
}

.compsoul-background .shape-parallelogram {
  --color: #069a8e;
  --size: 32vw;
  animation: compsoul-background var(--speed) linear infinite;
  background: var(--color);
  bottom: calc( var(--size) * -0.25 );
  display: block;
  filter: blur( var(--blur) );
  height: var(--size);
  left: calc( var(--size) * -0.25 );
  opacity: var(--opacity);
  position: absolute;
  transform: skew(-20deg);
  width: var(--size);
}

@keyframes compsoul-background {
  0% {
    transform: rotate(0) translate(0, 0);
  }
  25% {
    transform: rotate(90deg) translate(-100%, -100%);
  }
  50% {
    transform: rotate(180deg) translate(0, 0);
  }
  75% {
    transform: rotate(270deg) translate(100%, 100%);
  }
  100% {
    transform: rotate(360deg) translate(0, 0);
  }
}

compsoul.pl

Poniżej znajduje się lista zmiennych, którą możemy dostosować do własnych potrzeb:

  • blur - zmienna przekazuje informacje modułowi, w jakim stopniu ma rozmazać poszczególne kształty, wchodzące w skład tła.
  • opacity - dzięki tej zmiennej możemy ustawić stopień przeźroczystości poszczególnych elementów.
  • speed - szybkość animacji.
  • color - kolor kształtu poszczególnego elementu.
  • size - rozmiar poszczególnego kształtu.

Zachęcam do eksperymentów i dzielenia się efektami w komentarzach.