Анимированный loader на градиентах и тенях
Как можно получить красивый эффект анимации градиента, если в CSS-коде не используются вообще градиенты? Испытаем данный трюк на loader.
Создание основы для loader
Создадим на HTML блок loader с текстом Loading внутри, разместим блок в центре и укажем размеры для него. Если блоку loader не задавать толщину рамки, то блок будет невидимым. Но я временно установлю рамку, для наглядности. В рабочем коде никаких рамок не будет.
// HTML
<div class="loader">
<span>Loading</span>
</div>
// CSS
@import url("https://fonts.googleapis.com/css?family=Poppins:100,200,300,400,500,600,700,800,900");
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #fff;
}
.loader {
position: relative;
width: 200px;
height: 200px;
}
Рисование двух кругов
Физически мы не нарисуем не одного круга. Розовый круг создан с помощью псевдоэлемента before, а синий круг - это тень. Почему мы поставили border-radius: 50% псевдоэлементу, а не настоящему элементу loader? Дело в том, что для эффекта нам нужно 4 круга. Поэтому в данном случае менее затратно использовать оба псевдоэлемента. Их одного псевдоэлемента можно получить два круга, за счет установки тени.
.loader:before{
content: '';
position: absolute;
top: 85px;
left: 15%;
width: 70%;
height: 70%;
background: #ff3b8d;
box-shadow: -60px -55px 0px #07b2ff;
border-radius: 50%;
// к псевдоэлементу применяется анимация
animation: animate 5s linear infinite; /*название, время, стиль, бесконечный повтор*/
}
Рисование еще 2-ух кругов
.loader:after{
content: '';
position: absolute;
bottom: 85px;
left: 15%;
width: 70%;
height: 70%;
background: #8dff08;
box-shadow: 60px 55px 0px #FFEB3B;
border-radius: 50%;
animation: animate 5s linear infinite;
}
Создание анимации
В первом кадре фильтр размывает все круги, а во втором кадре кроме размытия, вся конструкция делает полный оборот. Возникает эффект размытия и вращения, похожий на анимированный градиент.
@keyframes animate{
0%
{
filter: blur(50px) hue-rotate(0deg);
}
100%
{
filter: blur(50px) hue-rotate(360deg);
}
}
Оформляем как loader
Теперь нужно показать, что это вообще-то loader, а не просто анимированная градиентная масса. Для этого создадим пятый круг, в центре которого поместим слово Loading.
.loader span{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #fff;
border-radius: 50%;
z-index: 1;
display: flex;
justify-content: center;
align-items: center;
text-transform: uppercase;
letter-spacing: 5px;
font-weight: 500;
font-size: 18px;
color: rgba(0,0,0,0.1);
}
.loader span:before{
content: '';
position: absolute;
top: 8px;
left: 8px;
right: 8px;
bottom: 8px;
box-shadow: inset 0px 0px 20px rgba(0,0,0,0.08);
border-radius: 50%;
}
Вот теперь пользователь может спокойно дожидаться загрузки страницы, любуясь этой красотой.
Посмотрите пример на CodePen
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.