Kártyaanimációk
Kinyíló képablak
Élő előnézet – az animáció teljes méretben.
Élő előnézet
HTML · CSS · JS
<div class="we-card-reveal">
<div class="we-card-reveal-image">
<span>FÖLDÜNK CSODÁI</span>
</div>
<div class="we-card-reveal-content">
<span class="we-card-reveal-number">03</span>
<h3>Rejtett tájak</h3>
<p>
Vannak helyek, amelyek első pillantásra
szinte hihetetlennek tűnnek.
</p>
<span class="we-card-reveal-arrow">Felfedezem ↗</span>
</div>
</div>
.we-card-reveal {
position: relative;
width: min(100%, 420px);
height: 300px;
overflow: hidden;
border-radius: 24px;
background: #0d1511;
border: 1px solid rgba(95, 189, 125, .22);
box-shadow:
0 20px 50px rgba(0, 0, 0, .35);
cursor: pointer;
}
.we-card-reveal-image {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background:
linear-gradient(
135deg,
#24382d,
#101b15
);
transition:
transform .9s cubic-bezier(.22, 1, .36, 1),
clip-path .9s cubic-bezier(.22, 1, .36, 1);
}
.we-card-reveal-image::before {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(
circle at 50% 45%,
rgba(122, 201, 142, .16),
transparent 45%
);
}
.we-card-reveal-image span {
position: relative;
z-index: 2;
color: rgba(244, 241, 233, .72);
font-family: Inter, system-ui, sans-serif;
font-size: 11px;
font-weight: 700;
letter-spacing: .2em;
transition:
opacity .45s ease,
transform .7s cubic-bezier(.22, 1, .36, 1);
}
.we-card-reveal-content {
position: absolute;
inset: 0;
z-index: 3;
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 32px;
background:
linear-gradient(
180deg,
transparent 25%,
rgba(8, 12, 10, .94) 100%
);
opacity: 0;
transform: translateY(25px);
transition:
opacity .55s ease .18s,
transform .8s cubic-bezier(.22, 1, .36, 1) .12s;
}
.we-card-reveal-number {
position: absolute;
top: 27px;
right: 30px;
color: rgba(244, 241, 233, .45);
font-family: "Bodoni Moda", Georgia, serif;
font-size: 18px;
}
.we-card-reveal-content h3 {
margin: 0 0 9px;
color: #f4f1e9;
font-family: "Bodoni Moda", Georgia, serif;
font-size: clamp(30px, 5vw, 42px);
font-weight: 500;
line-height: 1.05;
}
.we-card-reveal-content p {
max-width: 305px;
margin: 0 0 18px;
color: rgba(244, 241, 233, .67);
font-family: Inter, system-ui, sans-serif;
font-size: 14px;
line-height: 1.65;
}
.we-card-reveal-arrow {
color: #7ac98e;
font-family: Inter, system-ui, sans-serif;
font-size: 13px;
font-weight: 600;
transform: translateX(-12px);
transition:
transform .65s cubic-bezier(.22, 1, .36, 1);
}
/* HOVER */
.we-card-reveal:hover .we-card-reveal-image {
transform: scale(1.08);
clip-path: inset(
0 0 58% 0
);
}
.we-card-reveal:hover .we-card-reveal-image span {
opacity: 0;
transform: translateY(-15px);
}
.we-card-reveal:hover .we-card-reveal-content {
opacity: 1;
transform: translateY(0);
}
.we-card-reveal:hover .we-card-reveal-arrow {
transform: translateX(0);
}
document.querySelectorAll(".we-card-reveal").forEach(card => {
const image = card.querySelector(
".we-card-reveal-image"
);
card.addEventListener("mousemove", event => {
const rect = card.getBoundingClientRect();
const x =
(event.clientX - rect.left) /
rect.width;
const y =
(event.clientY - rect.top) /
rect.height;
const moveX = (x - 0.5) * 5;
const moveY = (y - 0.5) * 4;
image.style.transform = `
scale(1.08)
translate(${moveX}px, ${moveY}px)
`;
});
card.addEventListener("mouseleave", () => {
image.style.transform =
"scale(1) translate(0, 0)";
});
});