Простая анимация загрузки в Material Design (CSS3)

в 18:41, , рубрики: animation, css, CSS3 animation, onload, веб-дизайн, графический дизайн, Компьютерная анимация

Доброго времени суток, уважаемые читатели! Меня зовут Александр Шевченко, я начинающий веб-разработчик. Перейдём к делу. Анимации в CSS3 — давно не новинка. Однако, иногда можно сделать что-то простое эффектным. Сегодня мы по этому принципу создадим небольшую анимацию загрузки.

Шаг 1. Плавное появление самого экрана загрузки

Да-да. Перед тем, как приступить к основной части, мы сделаем анимацию появления самого экрана загрузки.

  body {
      -webkit-animation: body-opacity-change 1s ease-in-out 0s 1 forwards;
      -moz-animation: body-opacity-change 1s ease-in-out 0s 1 forwards;
      animation: body-opacity-change 1s ease-in-out 0s 1 forwards;
      opacity: 0;
      background-color: transparent;
  }
/* WebKit (Safari и Chrome) */
 @-webkit-keyframes body-opacity-change {
      from { opacity: 0; background-color: transparent; }
      to { opacity: 1; background-color: #1b1c2c; }
 }
/* Mozilla Firefox */
 @-moz-keyframes body-opacity-change {
      from { opacity: 0; background-color: transparent; }
      to { opacity: 1; background-color: #1b1c2c; }
}
/* Общий синтаксис */
 @keyframes body-opacity-change {
      from { opacity: 0; background-color: transparent; }
      to { opacity: 1; background-color: #1b1c2c; }
 }


Шаг 2. Основная часть экрана загрузки

Теперь приступаем к самому экрану загрузки. Давайте сделаем основными компонентами анимации четыре отпрыгивающих шара.

  div.circle {
      -webkit-border-radius: 50%;
      -moz-border-radius: 50%;
      -ms-border-radius: 50%;
      -o-border-radius: 50%;
      border-radius: 50%;
      background: #fff;
      width: 13px;
      height: 13px;
      display: inline-block;
      margin-top: 40%;
  }

Шаг 3. Применяем стили к шарам

Теперь начинается кульминация нашей небольшой работы. При помощи псевдоклассов :nth-child, :first-child и :last-child кастомизируем наши шары.
Внимание! При создании анимации к каждому шару применяйте разную длительность самой анимации дабы шары подпрыгивали в разное время с разной скоростью.

/* Первый шар */
 div.circle:first-child {
      -webkit-animation: upload 0.8s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      -moz-animation: upload 0.8s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      animation: upload 0.8s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      background-color: #4285f4;
      margin-right: 6px;
 }
/* Второй шар */
 div.circle:nth-child(2) {
      -webkit-animation: upload 1.3s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      -moz-animation: upload 1.3s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      animation: upload 1.3s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      background-color: #34a853;
      margin-right: 3px;
 }
/* Третий шар */
 div.circle:nth-child(3) {
      -webkit-animation: upload 1.1s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      -moz-animation: upload 1.1s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      animation: upload 1.1s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      background-color: #fbbc05;
      margin-left: 3px;
 }
/* Четвёртый шар */
 div.circle:last-child {
      -webkit-animation: upload 1.45s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      -moz-animation: upload 1.45s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      animation: upload 1.45s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
      background-color: #ea4335;
      margin-left: 6px;
  }

Шаг 4. Создаём ключевые кадры анимации

И таким образом, предпоследний шаг в нашем проекте — ключевые кадры анимации шаров.

/* WebKit (Safari и Chrome) */
 @-webkit-keyframes upload {
      from { -webkit-transform: translateY(35px); }
      to { -webkit-transform: translateY(-35px); }
 }
/* Mozilla Firefox */
 @-moz-keyframes upload {
      from { -moz-transform: translateY(35px); }
      to { -moz-transform: translateY(-35px); }
 }
/* Общий синтаксис */
 @keyframes upload {
      from { transform: translateY(35px); }
      to { transform: translateY(-35px); }
 }

Шаг 5. Объединяем код

Последний штрих, конечно, самый банальный, однако всё же без него никак.

<!DOCTYPE html>
<html>
 <head>
  <meta charset="ansi" />
  <title>Экран загрузки</title>
  <style type="text/css">
/* Цвет фона */
  body.bg-color {
    background-color: transparent;
    margin: 0;
  }
/* Загрузка страницы */
  body.onload {
    -webkit-animation: body-opacity-change 1s ease-in-out 0s 1 forwards;
    -moz-animation: body-opacity-change 1s ease-in-out 0s 1 forwards;
    animation: body-opacity-change 1s ease-in-out 0s 1 forwards;
    opacity: 0;
  }
/* Шары */
  div.circle {
    -webkit-border-radius: 50%;
    -moz-border-radius: 50%;
    -ms-border-radius: 50%;
    -o-border-radius: 50%;
    border-radius: 50%;
    background: #fff;
    width: 13px;
    height: 13px;
    display: inline-block;
    margin-top: 40%;
  }
/* 1-ый шар */
  div.circle:first-child {
    -webkit-animation: upload 0.8s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    -moz-animation: upload 0.8s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    animation: upload 0.8s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    background-color: #4285f4;
    margin-right: 6px;
  }
/* 2-ой шар */
  div.circle:nth-child(2) {
    -webkit-animation: upload 1.3s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    -moz-animation: upload 1.3s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    animation: upload 1.3s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    background-color: #34a853;
    margin-right: 3px;
  }
/* 3-ий шар */
  div.circle:nth-child(3) {
    -webkit-animation: upload 1.1s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    -moz-animation: upload 1.1s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    animation: upload 1.1s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    background-color: #fbbc05;
    margin-left: 3px;
  }
/* 4-ый шар */
  div.circle:last-child {
    -webkit-animation: upload 1.45s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    -moz-animation: upload 1.45s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    animation: upload 1.45s cubic-bezier(0.39, 0.56, 0.57, 1) 0s infinite alternate-reverse;
    background-color: #ea4335;
    margin-left: 6px;
  }
/*--- Кейфреймы анимаций ---*/
/*-- Загрузка страницы --*/
/* WebKit (Safari и Chrome) */
  @-webkit-keyframes body-opacity-change {
    from { opacity: 0; background-color: transparent; }
    to { opacity: 1; background-color: #1b1c2c; }
  }
/* Mozilla Firefox */
  @-moz-keyframes body-opacity-change {
    from { opacity: 0; background-color: transparent; }
    to { opacity: 1; background-color: #1b1c2c; }
  }
/* Общий синтаксис */
  @keyframes body-opacity-change {
    from { opacity: 0; background-color: transparent; }
    to { opacity: 1; background-color: #1b1c2c; }
  }
/*-- Анимация шаров --*/
/* WebKit (Safari и Chrome) */
  @-webkit-keyframes upload {
    from { -webkit-transform: translateY(35px); }
    to { -webkit-transform: translateY(-35px); }
  }
/* Mozilla Firefox */
  @-moz-keyframes upload {
    from { -moz-transform: translateY(35px); }
    to { -moz-transform: translateY(-35px); }
  }
/* Общий синтаксис */
  @keyframes upload {
    from { transform: translateY(35px); }
    to { transform: translateY(-35px); }
  }
  </style>
 </head>
 <body class="bg-color onload">
  <center>
   <div class="circle"></div>
   <div class="circle"></div>
   <div class="circle"></div>
   <div class="circle"></div>
  </center>
 </body>
</html>


Демонстрация: код в песочнице SoloLearn
Надеюсь, что это поможет Вам при создании Вашего веб-сайта. Это был самый простой пример экрана загрузки и поэтому я советую Вам не ограничивать свою фантазию. На этом желаю Вам удачи в вёрстке и прощаюсь.

Автор: Александр Шевченко

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js