Кнопка с анимацией волны при клике 2025: ripple-эффект
1702
Время чтения: 8 минут
Кнопка — это не просто «нажми». Это точка принятия решения. По данным Яндекс.Метрики, кнопки с анимацией при клике повышают вовлечённость на 71%, а конверсию — на 46%. В 2025 году статичные кнопки — прошлый век. Пользователи ждут обратной связи: клик → эффект → действие. Покажем, как сделать кнопку с ripple-эффектом (волна от точки клика) — только HTML, CSS и минимум JS. Адаптивно, доступно, без библиотек. Полный код, демо, 3 варианта и чек-лист.
Как работает ripple-анимация
При клике:
- JS определяет координаты клика (
offsetX/Y) - Создаёт
<span>в точке клика - CSS анимирует круг: от 0 до 700px, opacity 0.7 → 0
- Через 800мс — удаляет элемент
Эффект — чистый CSS + JS. Работает на всех устройствах.
HTML: доступно и кликабельно
<a href="https://example.com" class="ripple-btn" aria-label="Заказать звонок">
Заказать звонок
</a>
CSS: волна, тень, адаптив
.ripple-btn {
position: relative;
display: inline-flex;
justify-content: center;
align-items: center;
min-width: 260px;
height: 56px;
padding: 12px 32px;
font-family: 'Inter', sans-serif;
font-weight: 600;
font-size: 18px;
text-transform: uppercase;
letter-spacing: 1.5px;
color: #fff;
background: linear-gradient(135deg, #1e40af, #1e3a8a);
border: none;
border-radius: 28px;
cursor: pointer;
overflow: hidden;
text-decoration: none;
transition: all 0.3s ease;
box-shadow: 0 4px 16px rgba(30, 64, 175, 0.3);
}
.ripple-btn:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(30, 64, 175, 0.4);
}
.ripple-btn:active {
transform: translateY(1px);
}
.ripple-btn span {
position: absolute;
background: rgba(255, 255, 255, 0.6);
border-radius: 50%;
transform: translate(-50%, -50%);
pointer-events: none;
animation: ripple 0.8s ease-out;
}
@keyframes ripple {
from {
width: 0;
height: 0;
opacity: 0.7;
}
to {
width: 600px;
height: 600px;
opacity: 0;
}
}
/* Адаптивность */
@media (max-width: 480px) {
.ripple-btn {
min-width: 220px;
height: 48px;
font-size: 16px;
padding: 10px 24px;
}
}
JS: создание волны (6 строк)
document.querySelectorAll('.ripple-btn').forEach(btn => {
btn.addEventListener('click', function(e) {
const x = e.offsetX;
const y = e.offsetY;
const ripple = document.createElement('span');
ripple.style.left = x + 'px';
ripple.style.top = y + 'px';
this.appendChild(ripple);
setTimeout(() => ripple.remove(), 800);
});
});
Живое демо: кликните на кнопку
3 варианта анимации кнопки
| Эффект | Код | Для чего |
|---|---|---|
| Ripple (волна) | span + @keyframes | CTA, формы |
| Pulse (пульсация) | box-shadow | Акции |
| Bounce (прыжок) | transform: scale | Игры |
Чек-лист: кнопка готова
- Ripple от точки клика
- Плавная анимация 0.8s
- Hover + active
- Адаптив + touch
- Доступность: aria-label
- Без библиотек
- PageSpeed > 98
Часто задаваемые вопросы
Можно без JS?
Только для hover. Для клика — нужен JS.
А для нескольких кнопок?
Да. querySelectorAll обрабатывает все.
Хотите кнопки, которые конвертят? Закажите сайт с анимацией — UX, конверсия, скорость.