Gombanimációk
Törlés gomb animált
Élő előnézet – az animáció teljes méretben.
Élő előnézet
HTML · CSS · JS
<div class="we-delete-stage">
<button class="we-delete-btn" id="weDeleteBtn" type="button">
<span class="we-delete-burst" aria-hidden="true">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
</span>
<span class="we-delete-trash" aria-hidden="true">
<span class="we-delete-lid"></span>
<span class="we-delete-body">
<span></span>
<span></span>
<span></span>
</span>
</span>
<span class="we-delete-label">
Törlés
</span>
<span class="we-delete-success">
<span class="we-delete-check">✓</span>
<span>Törlés kész</span>
</span>
</button>
</div>
.we-delete-stage {
min-height: 360px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
background: #0b0f19;
}
.we-delete-btn {
position: relative;
width: 260px;
height: 78px;
padding: 0;
border: 1px solid rgba(201, 103, 103, .38);
border-radius: 22px;
overflow: hidden;
cursor: pointer;
isolation: isolate;
background: linear-gradient(135deg, #25191b, #130e10);
color: #f4f1e9;
font-family: Inter, system-ui, sans-serif;
box-shadow:
0 0 0 1px rgba(201, 103, 103, .06),
0 18px 50px rgba(0, 0, 0, .42),
inset 0 0 24px rgba(201, 103, 103, .035);
transition:
border-color .35s ease,
box-shadow .35s ease,
transform .25s ease;
}
.we-delete-btn:hover {
transform: translateY(-2px);
border-color: rgba(214, 119, 119, .72);
box-shadow:
0 0 25px rgba(201, 103, 103, .12),
0 20px 55px rgba(0, 0, 0, .45);
}
.we-delete-label {
position: absolute;
inset: 0;
z-index: 5;
display: flex;
align-items: center;
justify-content: center;
padding-left: 34px;
font-size: 17px;
font-weight: 700;
letter-spacing: .2px;
transition:
opacity .25s ease,
transform .35s ease;
}
.we-delete-trash {
position: absolute;
z-index: 6;
left: 43px;
top: 50%;
width: 24px;
height: 30px;
transform: translateY(-50%);
}
.we-delete-lid {
position: absolute;
left: 3px;
top: 2px;
width: 18px;
height: 4px;
border-radius: 3px;
background: #d67777;
box-shadow: 0 0 8px rgba(214, 119, 119, .45);
transform-origin: right center;
}
.we-delete-lid::after {
content: "";
position: absolute;
left: 7px;
top: -4px;
width: 7px;
height: 4px;
border-radius: 3px 3px 0 0;
background: #d67777;
}
.we-delete-body {
position: absolute;
left: 5px;
top: 9px;
width: 15px;
height: 18px;
border-radius: 2px 2px 5px 5px;
background: linear-gradient(
90deg,
#b95f65,
#d67777,
#b95f65
);
box-shadow:
0 0 9px rgba(214, 119, 119, .3),
inset 2px 0 rgba(255, 255, 255, .12);
}
.we-delete-body span {
position: absolute;
top: 4px;
width: 1px;
height: 10px;
background: rgba(48, 19, 21, .6);
border-radius: 2px;
}
.we-delete-body span:nth-child(1) {
left: 4px;
}
.we-delete-body span:nth-child(2) {
left: 7px;
}
.we-delete-body span:nth-child(3) {
left: 10px;
}
.we-delete-burst {
position: absolute;
z-index: 3;
left: 50%;
top: 50%;
width: 1px;
height: 1px;
pointer-events: none;
}
.we-delete-burst i {
position: absolute;
left: 0;
top: 0;
width: 5px;
height: 5px;
border-radius: 50%;
background: #d67777;
opacity: 0;
box-shadow: 0 0 8px rgba(214, 119, 119, .65);
}
.we-delete-burst i:nth-child(1) {
--x: -78px;
--y: -24px;
}
.we-delete-burst i:nth-child(2) {
--x: 76px;
--y: -27px;
}
.we-delete-burst i:nth-child(3) {
--x: -91px;
--y: 8px;
}
.we-delete-burst i:nth-child(4) {
--x: 92px;
--y: 13px;
}
.we-delete-burst i:nth-child(5) {
--x: -57px;
--y: 34px;
}
.we-delete-burst i:nth-child(6) {
--x: 60px;
--y: 37px;
}
.we-delete-burst i:nth-child(7) {
--x: -32px;
--y: -43px;
}
.we-delete-burst i:nth-child(8) {
--x: 34px;
--y: -45px;
}
.we-delete-success {
position: absolute;
inset: 0;
z-index: 8;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
font-size: 16px;
font-weight: 700;
opacity: 0;
transform: scale(.82);
pointer-events: none;
transition:
opacity .35s ease,
transform .45s cubic-bezier(.2, .8, .2, 1.2);
}
.we-delete-check {
width: 27px;
height: 27px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(214, 119, 119, .75);
border-radius: 50%;
color: #d67777;
box-shadow: 0 0 15px rgba(214, 119, 119, .22);
}
.we-delete-btn.is-active {
border-color: rgba(214, 119, 119, .9);
box-shadow:
0 0 25px rgba(201, 103, 103, .2),
0 0 55px rgba(201, 103, 103, .12),
inset 0 0 30px rgba(201, 103, 103, .08);
}
.we-delete-btn.is-active .we-delete-label {
opacity: 0;
transform: translateY(-14px);
}
.we-delete-btn.is-active .we-delete-trash {
animation: weDeleteTrashDrop .85s cubic-bezier(.4, 0, .2, 1) forwards;
}
@keyframes weDeleteTrashDrop {
0% {
opacity: 1;
transform: translateY(-50%) rotate(0deg) scale(1);
}
28% {
transform: translateY(-50%) rotate(-12deg) scale(1.05);
}
55% {
transform: translateY(3px) rotate(14deg) scale(.9);
}
100% {
opacity: 0;
transform: translateY(22px) rotate(28deg) scale(.35);
}
}
.we-delete-btn.is-active .we-delete-lid {
animation: weDeleteLidOpen .55s ease-out forwards;
}
@keyframes weDeleteLidOpen {
0% {
transform: rotate(0deg) translate(0, 0);
}
45% {
transform: rotate(24deg) translate(3px, -4px);
}
100% {
transform: rotate(42deg) translate(5px, -6px);
}
}
.we-delete-btn.is-active .we-delete-burst i {
animation:
weDeleteBurst .9s .35s cubic-bezier(.2, .8, .2, 1) forwards;
}
@keyframes weDeleteBurst {
0% {
opacity: 0;
transform: translate(0, 0) scale(.2);
}
25% {
opacity: 1;
transform: translate(
calc(var(--x) * .28),
calc(var(--y) * .28)
) scale(1);
}
100% {
opacity: 0;
transform:
translate(var(--x), var(--y))
scale(.15);
}
}
.we-delete-btn.is-complete .we-delete-trash,
.we-delete-btn.is-complete .we-delete-label,
.we-delete-btn.is-complete .we-delete-burst {
opacity: 0;
}
.we-delete-btn.is-complete .we-delete-success {
opacity: 1;
transform: scale(1);
}
.we-delete-btn.is-complete {
border-color: rgba(214, 119, 119, .72);
box-shadow:
0 0 28px rgba(201, 103, 103, .16),
inset 0 0 25px rgba(214, 119, 119, .05);
}
(function () {
const button =
document.getElementById("weDeleteBtn");
if (!button) {
return;
}
let running = false;
button.addEventListener("click", function () {
if (running) {
return;
}
running = true;
button.classList.remove("is-complete");
button.classList.add("is-active");
setTimeout(function () {
button.classList.remove("is-active");
button.classList.add("is-complete");
}, 1550);
setTimeout(function () {
button.classList.remove("is-complete");
running = false;
}, 3600);
});
})();