Kártyák és dobozok
Lebegő képkeretes kártyák
Élő előnézet – a komponens teljes méretben.
Élő előnézet
HTML · CSS · JS
<div class="cards-11">
<article class="card-11">
<div class="card-11-image">
<img src="https://images.unsplash.com/photo-1519608487953-e999c86e7455?auto=format&fit=crop&w=900&q=85" alt="">
</div>
<div class="card-11-icon">
<i class="bi bi-compass"></i>
</div>
<div class="card-11-content">
<span class="card-11-label">FELFEDEZÉS</span>
<h3>Új horizontok</h3>
<p>
Ismeretlen irányok, különleges ötletek
és új lehetőségek egyetlen világban.
</p>
</div>
<div class="card-11-footer">
<span>01</span>
<i class="bi bi-arrow-up-right"></i>
</div>
</article>
<article class="card-11">
<div class="card-11-image">
<img src="https://images.unsplash.com/photo-1511497584788-876760111969?auto=format&fit=crop&w=900&q=85" alt="">
</div>
<div class="card-11-icon">
<i class="bi bi-tree"></i>
</div>
<div class="card-11-content">
<span class="card-11-label">TERMÉSZET</span>
<h3>Rejtett világok</h3>
<p>
Csendes részletek, organikus formák
és a természet különleges harmóniája.
</p>
</div>
<div class="card-11-footer">
<span>02</span>
<i class="bi bi-arrow-up-right"></i>
</div>
</article>
<article class="card-11">
<div class="card-11-image">
<img src="https://images.unsplash.com/photo-1519608487953-e999c86e7455?auto=format&fit=crop&w=900&q=85" alt="">
</div>
<div class="card-11-icon">
<i class="bi bi-stars"></i>
</div>
<div class="card-11-content">
<span class="card-11-label">INSPIRÁCIÓ</span>
<h3>Más szemmel</h3>
<p>
Megszokott dolgok új nézőpontból,
apró részletek egészen más megvilágításban.
</p>
</div>
<div class="card-11-footer">
<span>03</span>
<i class="bi bi-arrow-up-right"></i>
</div>
</article>
</div>
.cards-11 {
width: min(1180px, calc(100% - 30px));
margin: 0 auto;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 18px;
}
.card-11 {
position: relative;
min-height: 450px;
overflow: hidden;
display: flex;
flex-direction: column;
border: 1px solid rgba(255,255,255,0.08);
border-radius: 24px;
background:
linear-gradient(
145deg,
rgba(255,255,255,0.06),
rgba(255,255,255,0.015)
);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.045),
0 25px 55px rgba(0,0,0,0.25);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
transition:
transform 0.55s cubic-bezier(.22,.61,.36,1),
border-color 0.45s ease,
box-shadow 0.5s ease;
}
/* KÉP */
.card-11-image {
position: relative;
width: 100%;
height: 190px;
overflow: hidden;
}
.card-11-image::after {
content: "";
position: absolute;
inset: 0;
background:
linear-gradient(
180deg,
rgba(8,11,17,0.05),
rgba(8,11,17,0.75)
);
}
.card-11-image img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
transition:
transform 1s cubic-bezier(.22,.61,.36,1),
filter 0.6s ease;
}
.card-11:hover .card-11-image img {
transform: scale(1.09);
filter: brightness(1.08);
}
/* IKON */
.card-11-icon {
position: relative;
z-index: 3;
width: 62px;
height: 62px;
margin:
-31px 0 0 28px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(46,204,113,0.28);
border-radius: 18px;
color: #2ecc71;
background:
rgba(9,14,20,0.92);
box-shadow:
0 10px 30px rgba(0,0,0,0.35),
0 0 25px rgba(46,204,113,0.04);
transition:
transform 0.5s ease,
background 0.45s ease,
border-color 0.45s ease,
box-shadow 0.45s ease;
}
.card-11-icon i {
font-size: 21px;
}
.card-11:hover .card-11-icon {
transform:
translateY(-6px)
rotate(-5deg);
border-color: rgba(46,204,113,0.55);
background:
rgba(46,204,113,0.08);
box-shadow:
0 15px 35px rgba(0,0,0,0.4),
0 0 30px rgba(46,204,113,0.12);
}
/* TARTALOM */
.card-11-content {
padding: 25px 28px 20px;
flex: 1;
transition:
transform 0.5s ease;
}
.card-11:hover .card-11-content {
transform: translateY(-4px);
}
.card-11-label {
display: block;
margin-bottom: 9px;
color: #2ecc71;
font-family: monospace;
font-size: 8px;
letter-spacing: 2.5px;
}
.card-11 h3 {
margin: 0 0 10px;
color: #ffffff;
font-family: "Bodoni Moda", Georgia, serif;
font-size: 28px;
font-weight: 500;
line-height: 1.15;
}
.card-11 p {
margin: 0;
color: #7f8993;
font-size: 12px;
line-height: 1.7;
transition:
color 0.4s ease;
}
.card-11:hover p {
color: #a7afb5;
}
/* ALSÓ RÉSZ */
.card-11-footer {
position: relative;
z-index: 3;
margin: 0 28px;
padding: 16px 0 22px;
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid rgba(255,255,255,0.07);
color: rgba(255,255,255,0.28);
font-family: monospace;
font-size: 9px;
letter-spacing: 2px;
}
.card-11-footer i {
width: 38px;
height: 38px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(46,204,113,0.22);
border-radius: 50%;
color: #2ecc71;
transition:
transform 0.45s ease,
background 0.4s ease,
color 0.4s ease,
box-shadow 0.4s ease;
}
.card-11:hover .card-11-footer i {
transform: rotate(45deg);
background: #2ecc71;
color: #07100b;
box-shadow:
0 0 22px rgba(46,204,113,0.18);
}
/* ALSÓ FÉNY */
.card-11::after {
content: "";
position: absolute;
left: 28px;
right: 28px;
bottom: 0;
height: 1px;
background: #2ecc71;
transform: scaleX(0);
transform-origin: center;
box-shadow:
0 0 14px rgba(46,204,113,0.7);
transition:
transform 0.6s ease;
}
.card-11:hover::after {
transform: scaleX(1);
}
/* KÁRTYA HOVER */
.card-11:hover {
transform: translateY(-8px);
border-color: rgba(46,204,113,0.25);
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.07),
0 35px 70px rgba(0,0,0,0.32),
0 0 30px rgba(46,204,113,0.04);
}
/* TABLET */
@media (max-width: 900px) {
.cards-11 {
grid-template-columns: 1fr;
}
.card-11 {
min-height: 400px;
}
}
/* MOBIL */
@media (max-width: 560px) {
.cards-11 {
width: min(100% - 24px, 500px);
}
.card-11 {
min-height: 420px;
}
.card-11-image {
height: 175px;
}
.card-11-content {
padding-left: 24px;
padding-right: 24px;
}
.card-11-footer {
margin-left: 24px;
margin-right: 24px;
}
}
document.querySelectorAll(".cards-11").forEach(group => {
group.querySelectorAll(".card-11").forEach(card => {
card.addEventListener("mousemove", event => {
const rect = card.getBoundingClientRect();
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
const rotateX =
((y / rect.height) - 0.5) * -2.5;
const rotateY =
((x / rect.width) - 0.5) * 2.5;
card.style.transform =
`perspective(1100px)
rotateX(${rotateX}deg)
rotateY(${rotateY}deg)
translateY(-8px)`;
});
card.addEventListener("mouseleave", () => {
card.style.transform = "";
});
});
});