Шаг 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
Надеюсь, что это поможет Вам при создании Вашего веб-сайта. Это был самый простой пример экрана загрузки и поэтому я советую Вам не ограничивать свою фантазию. На этом желаю Вам удачи в вёрстке и прощаюсь.
Комментарии (9)
Ronnie_Gardocki
15.10.2017 12:35+2Боже мой, какие нынче прекрасные вещи на главную попадают.
1) Примеры кода с вендор префиксами. Отлично. Особенно учитывая что они не нужны во всех современных браузерах, если конечно автор не верстает под ие8 (моргните дважды если вас держат в заложниках).
2) Использование тэга center. Спасибо что вернули нам 2007!
3) По хорошему все должно быть написано с помощью препроцессора, с использованием переменных (как минимум для таймингов), простого цикла для nth элементов и так далее. Для всех кто не дружит с препроцессорами всегда есть возможность посмотреть скомпилированный результат (привет codepen). Эта статья тогда бы уместилась в один экран (хотя это тяжело назвать статьей).justboris
15.10.2017 15:07если конечно автор не верстает под ие8
В 8м explorer css-анимации не работают вообще, что с префиксами, что без. Префиксы были нужны для версий Хрома до 26й и Firefox < 16. Пруф. Поскольку оба этих браузера обновляются автоматически, то шансы встретить такой браузер равны нулю.
Ну и поздравляю автора с выходом из холодильника, добро пожаловать в 2017й год.
ImKremen
А нахрена нужны все эти вендорные префиксы в статье? Тем более, почти все браузеры давно поддерживают эти свойства без префиксов.
AntonAlekseevich
Наверное для того чтобы работали внутренние функции, а не преобразователи во внутренние функции рэндеринга страниц.
ImKremen
Во-первых, вы написали какую-то чушь.
Во-вторых, всё равно применяется свойство без префикса, оно идёт последним в объявлении.
AntonAlekseevich
Тогда чушь в принципе работы браузера.
Откройте сорсы движков обработки CSS и рэндеринга, и посмотрите изнутри как они работают.
Если бы было всё так просто, то многие сайты сейчас были бы целиком сломаны.
Применяется всегда первое встречное свойство CSS (без
!important
), а остальные отбрасываются(если в них нет!important
).ImKremen
Хватит писать чушь.
По вашему этот текст красный? https://jsbin.com/kadatuhizo/edit?output
AntonAlekseevich
Мне стоит признать свою не правоту в этом плане.
justboris
Поддерживаю. Дело даже не в поддержке браузерами, а в читаемости статьи. Листинги станут в 3 раза короче и будет понятнее, что в них происходит.
А если очень хочется упомянуть о существовании префиксов, достаточно оставить в конце статьи примечание со ссылкой на Автопрефиксер.