<div class="btns"> <button class="ripple-btn">Click Me</button> <button class="ripple-btn dark">Submit</button> </div>
.btns {
display: flex;
gap: 13px;
padding: 50px;
}
.ripple-btn {
font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
position: relative;
overflow: hidden;
transition: background 400ms;
color: #fff;
background-color: #3b82f6;
padding: 12px 24px;
font-size: 1rem;
outline: 0;
border: 0;
border-radius: 8px;
cursor: pointer;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
font-weight: 500;
}
.ripple-btn.dark {
background-color: #1f2937;
}
.ripple-btn:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
span.ripple {
position: absolute;
border-radius: 50%;
transform: scale(0);
animation: ripple 600ms linear;
background-color: rgba(255, 255, 255, 0.3);
}
@keyframes ripple {
to {
transform: scale(4);
opacity: 0;
}
}const buttons = document.querySelectorAll(".ripple-btn");
buttons.forEach((button) => {
button.addEventListener("click", function (e) {
const circle = document.createElement("span");
const diameter = Math.max(button.clientWidth, button.clientHeight);
const radius = diameter / 2;
circle.style.width = circle.style.height = `${diameter}px`;
circle.style.left = `${e.clientX - button.getBoundingClientRect().left - radius}px`;
circle.style.top = `${e.clientY - button.getBoundingClientRect().top - radius}px`;
circle.classList.add("ripple");
const ripple = button.getElementsByClassName("ripple")[0];
if (ripple) {
ripple.remove();
}
button.appendChild(circle);
});
});Nothing to show yetType HTML, CSS or JavaScript and your page appears here.
Click any element to find its code Esc
Check this code before you run it
It came from a shared link. It runs with fewer permissions, so it cannot open pop-ups, submit forms or start downloads.
0.00s / 0.00s
Nothing has animated yet. Hover, click or type in the preview and each CSS animation, transition or
element.animate() call shows up here as it plays.