Как сделать пульсирующую анимацию на HTML и CSS
#верстка /
БлогДля того чтобы сделать красивую пульсирующую анимацию нам понадобиться сделать простую разметку, для наглядности я вставил нужный нам элемент(кнопку button) в центровщик с классом center:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Пульсирующая анимация</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="center">
<button class="button" type="button">Pulse</button>
</div>
</body>
</html>
и стили для выравнивания по-центру, установив высоту в 100vh для flex-контейнера:
.center {
height: 100vh;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
}
далее оформим кнопку задав ей размер, цвет, радиус закругления, уберем бордер и установим позиционирование relative которое нам понадобиться для выравнивания псевдоэлементов относительно нашей кнопки:
.button {
width: 50px;
height: 50px;
border-radius: 50px;
border: none;
background-color: crimson;
color: #fff;
position: relative;
}
Оформление пульсирующих волн
- зададим размеры и радиус закругления наследуемые от родителя;
- выставим абсолютное позиционирование с верхнего левого угла;
- z-index укажем: -1, чтобы псевдоэлементы были позади кнопки;
- напишем свойство отвечающее за анимацию(animation) элемента - длительность 2 секунды, функция времени: ease, и укажем бесконечный повтор(infinite);
Для ::after правила будут те же что и для ::before, за исключением для ::after дополнительно укажем время задержки(animation-delay: 0.3s) анимации, чтобы разделить пульсации элементов.
.button::before {
content: "";
width: inherit;
height: inherit;
position: absolute;
top: 0;
left: 0;
background-color: crimson;
z-index: -1;
border-radius: inherit;
-webkit-animation: pulse 2s ease infinite;
animation: pulse 2s ease infinite;
}
.button::after {
content: "";
width: inherit;
height: inherit;
position: absolute;
top: 0;
left: 0;
background-color: crimson;
z-index: -1;
border-radius: inherit;
-webkit-animation: pulse 2s ease infinite;
animation: pulse 2s ease infinite;
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
}
Напишем анимацию pulse.
Сама анимация очень простая состоящая из двух свойств - transform и opacity. На первом этапе элемент слегка сжимается, а на втором увеличивается в 2.5 раза(вы можете указать любой размер) и одновременно плавно становиться непрозрачным.
@-webkit-keyframes pulse {
0% {
-webkit-transform: scale(0.9);
transform: scale(0.9);
opacity: 1;
}
100% {
-webkit-transform: scale(2.5);
transform: scale(2.5);
opacity: 0;
}
}
@keyframes pulse {
0% {
-webkit-transform: scale(0.9);
transform: scale(0.9);
opacity: 1;
}
100% {
-webkit-transform: scale(2.5);
transform: scale(2.5);
opacity: 0;
}
}
Что в итоге у нас должно получиться: