½ÃÀÛÆäÀÌÁö·Î Áñ°Üã±âÃß°¡
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ l Ã⼮üũ l ¸¶ÀÌÆäÀÌÁö l CGIMALL
Card Carousel -Ä«µå ½½¶óÀÌ´õ : happycgi
ÀÚ·á½Ç »çÀÌÆ®µî·Ï ·©Å·100 ÇÁ·Î±×·¥¸®ºä °ü¸®ÀÚÃßõÀÚ·á Ãʺ¸°¡À̵å
Ä¿¹Â´ÏƼ
Àüü ÆîÃ帱â
Äü¸Þ´º¸µÅ© jquery , CSS , PHP , Javascript , ¹«·áÆùÆ® , ASP
»ó¼¼°Ë»ö
Ȩ > CSS > À̹ÌÁö > Card Carousel -Ä«µå ½½¶óÀÌ´õ »ó¼¼Á¤º¸
»çÀÌÆ®µî·Ï
Ŭ¶ó¿ìµåű×
Javascript
PHP
html
CSS
ASP
API
MYSQL
jquery
image
slide
Mobile
¸Þ´º
°Ô½ÃÆÇ
ÇöÀçÁ¢¼ÓÀÚ ¸í »õ·Î°íħ
Card Carousel -Ä«µå ½½¶óÀÌ´õ
¼Ò½ºÅë°èÁ¤º¸ ¿À·ù½Å°í ¹× ¹®ÀÇ
ÇØÇÇÆÀ
³×ƼÁð
Æ®À§ÅÍ·Î º¸³»±â ÆäÀ̽ººÏÀ¸·Î º¸³»±â
¼Ò½ººÐ·ù À̹ÌÁö
´Ù¿î·Îµå Ƚ¼ö 100 ȸ
°£´Ü¼³¸í Á¿ì·Î ³Ñ±â¸ç º¼ ¼ö ÀÖ´Â Ä«µå ÇüÅÂÀÇ ÄÜÅÙÃ÷ ½½¶óÀÌ´õ
Æò°¡Çϱâ ÈǸ¢ÇÔ ¸Å¿ìÁÁÀ½ ÁÁÀ½ ±¦ÂúÀ½ º¸Åë º°·Î
ȨÆäÀÌÁö¹Ù·Î°¡±â ¼Ò½º´Ù¿î·Îµå µ¥¸ð ¹Ì¸®º¸±â ½ºÅ©·¦Çϱâ

#Ä«µå ½½¶óÀÌ´õ #ȸÀüÇü Ä«µå ¸ñ·Ï #Ä«µåÇü À̹ÌÁö ·Ñ¸µ #Ä«µå ȸÀü ºä¾î

Ä«µå Çü½ÄÀÇ ÄÜÅÙÃ÷¸¦ Á¿ì·Î ºÎµå·´°Ô ³Ñ±æ ¼ö ÀÖµµ·Ï ±¸¼ºµÈ ÀÌ Ä³·¯¼¿Àº, 
¹ÝÀÀÇü µðÀÚÀΰú ÅÍÄ¡/¸¶¿ì½º ÀÎÅÍ·¢¼ÇÀ» Áö¿øÇÏ¿© ´Ù¾çÇÑ È¯°æ¿¡¼­ ½Ã°¢ÀûÀ¸·Î ±ò²ûÇÑ ÄÜÅÙÃ÷ Ž»öÀ» Á¦°øÇÕ´Ï´Ù.

HTML ±¸Á¶

<h1 class="about-title">OUR TEAM</h1>


<div class="carousel-container">

<button class="nav-arrow left">‹</button>

<div class="carousel-track">

<div class="card" data-index="0">

<img src="https://images.unsplash.com/photo-1573497019940-1c28c88b4f3e?q=80&w=3687&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="Team Member 1">

</div>

<div class="card" data-index="1">

<img src="https://images.unsplash.com/photo-1568602471122-7832951cc4c5?q=80&w=3870&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="Team Member 2">

</div>

<div class="card" data-index="2">

<img src="https://images.unsplash.com/photo-1573496359142-b8d87734a5a2?w=900&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8M3x8cHJvZmVzc2lvbmFsJTIwcGVvcGxlfGVufDB8fDB8fHww" alt="Team Member 3">

</div>

<div class="card" data-index="3">

<img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=900&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8N3x8cHJvZmVzc2lvbmFsJTIwcGVvcGxlfGVufDB8fDB8fHww" alt="Team Member 4">

</div>

<div class="card" data-index="4">

<img src="https://images.unsplash.com/photo-1655249481446-25d575f1c054?w=900&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mjh8fHByb2Zlc3Npb25hbCUyMHBlb3BsZXxlbnwwfHwwfHx8MA%3D%3D" alt="Team Member 5">

</div>

<div class="card" data-index="5">

<img src="https://images.unsplash.com/photo-1519085360753-af0119f7cbe7?q=80&w=3687&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="Team Member 6">

</div>

</div>

<button class="nav-arrow right">›</button>

</div>


<div class="member-info">

<h2 class="member-name">David Kim</h2>

<p class="member-role">Founder</p>

</div>


<div class="dots">

<div class="dot active" data-index="0"></div>

<div class="dot" data-index="1"></div>

<div class="dot" data-index="2"></div>

<div class="dot" data-index="3"></div>

<div class="dot" data-index="4"></div>

<div class="dot" data-index="5"></div>

</div>



CSS ¼Ò½º

* {

margin: 0;

padding: 0;

box-sizing: border-box;

font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;

}


body {

min-height: 100vh;

display: flex;

flex-direction: column;

align-items: center;

justify-content: center;

background-color: #f5f5f5;

overflow: hidden;

}


.about-title {

font-size: 7.5rem;

font-weight: 900;

text-transform: uppercase;

letter-spacing: -0.02em;

position: absolute;

top: 45px;

left: 50%;

transform: translateX(-50%);

pointer-events: none;

white-space: nowrap;

font-family: "Arial Black", "Arial Bold", Arial, sans-serif;

background: linear-gradient(

to bottom,

rgb(8 42 123 / 35%) 30%,

rgb(255 255 255 / 0%) 76%

);

-webkit-background-clip: text;

background-clip: text;

color: transparent;

}


.carousel-container {

width: 100%;

max-width: 1200px;

height: 450px;

position: relative;

perspective: 1000px;

margin-top: 80px;

}


.carousel-track {

width: 100%;

height: 100%;

display: flex;

justify-content: center;

align-items: center;

position: relative;

transform-style: preserve-3d;

transition: transform 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);

}


.card {

position: absolute;

width: 280px;

height: 380px;

background: white;

border-radius: 20px;

overflow: hidden;

box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);

transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);

cursor: pointer;

}


.card img {

width: 100%;

height: 100%;

object-fit: cover;

transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);

}


.card.center {

z-index: 10;

transform: scale(1.1) translateZ(0);

}


.card.center img {

filter: none;

}


.card.left-2 {

z-index: 1;

transform: translateX(-400px) scale(0.8) translateZ(-300px);

opacity: 0.7;

}


.card.left-2 img {

filter: grayscale(100%);

}


.card.left-1 {

z-index: 5;

transform: translateX(-200px) scale(0.9) translateZ(-100px);

opacity: 0.9;

}


.card.left-1 img {

filter: grayscale(100%);

}


.card.right-1 {

z-index: 5;

transform: translateX(200px) scale(0.9) translateZ(-100px);

opacity: 0.9;

}


.card.right-1 img {

filter: grayscale(100%);

}


.card.right-2 {

z-index: 1;

transform: translateX(400px) scale(0.8) translateZ(-300px);

opacity: 0.7;

}


.card.right-2 img {

filter: grayscale(100%);

}


.card.hidden {

opacity: 0;

pointer-events: none;

}


.member-info {

text-align: center;

margin-top: 40px;

transition: all 0.5s ease-out;

}


.member-name {

color: rgb(8, 42, 123);

font-size: 2.5rem;

font-weight: 700;

margin-bottom: 10px;

position: relative;

display: inline-block;

}


.member-name::before,

.member-name::after {

content: "";

position: absolute;

top: 100%;

width: 100px;

height: 2px;

background: rgb(8, 42, 123);

}


.member-name::before {

left: -120px;

}


.member-name::after {

right: -120px;

}


.member-role {

color: #848696;

font-size: 1.5rem;

font-weight: 500;

opacity: 0.8;

text-transform: uppercase;

letter-spacing: 0.1em;

padding: 10px 0;

margin-top: -15px;

position: relative;

}

.dots {

display: flex;

justify-content: center;

gap: 10px;

margin-top: 60px;

}


.dot {

width: 12px;

height: 12px;

border-radius: 50%;

background: rgba(8, 42, 123, 0.2);

cursor: pointer;

transition: all 0.3s ease;

}


.dot.active {

background: rgb(8, 42, 123);

transform: scale(1.2);

}


.nav-arrow {

position: absolute;

top: 50%;

transform: translateY(-50%);

background: rgba(8, 42, 123, 0.6);

color: white;

width: 40px;

height: 40px;

border-radius: 50%;

display: flex;

align-items: center;

justify-content: center;

cursor: pointer;

z-index: 20;

transition: all 0.3s ease;

font-size: 1.5rem;

border: none;

outline: none;

padding-bottom: 4px;

}


.nav-arrow:hover {

background: rgba(0, 0, 0, 0.8);

transform: translateY(-50%) scale(1.1);

}


.nav-arrow.left {

left: 20px;

padding-right: 3px;

}


.nav-arrow.right {

right: 20px;

padding-left: 3px;

}


@media (max-width: 768px) {

.about-title {

font-size: 4.5rem;

}


.card {

width: 200px;

height: 280px;

}


.card.left-2 {

transform: translateX(-250px) scale(0.8) translateZ(-300px);

}


.card.left-1 {

transform: translateX(-120px) scale(0.9) translateZ(-100px);

}


.card.right-1 {

transform: translateX(120px) scale(0.9) translateZ(-100px);

}


.card.right-2 {

transform: translateX(250px) scale(0.8) translateZ(-300px);

}


.member-name {

font-size: 2rem;

}


.member-role {

font-size: 1.2rem;

}


.member-name::before,

.member-name::after {

width: 50px;

}


.member-name::before {

left: -70px;

}


.member-name::after {

right: -70px;

}

}

 


JS ¼Ò½º

const teamMembers = [

{ name: "Emily Kim", role: "Founder" },

{ name: "Michael Steward", role: "Creative Director" },

{ name: "Emma Rodriguez", role: "Lead Developer" },

{ name: "Julia Gimmel", role: "UX Designer" },

{ name: "Lisa Anderson", role: "Marketing Manager" },

{ name: "James Wilson", role: "Product Manager" }

];


const cards = document.querySelectorAll(".card");

const dots = document.querySelectorAll(".dot");

const memberName = document.querySelector(".member-name");

const memberRole = document.querySelector(".member-role");

const leftArrow = document.querySelector(".nav-arrow.left");

const rightArrow = document.querySelector(".nav-arrow.right");

let currentIndex = 0;

let isAnimating = false;


function updateCarousel(newIndex) {

if (isAnimating) return;

isAnimating = true;


currentIndex = (newIndex + cards.length) % cards.length;


cards.forEach((card, i) => {

const offset = (i - currentIndex + cards.length) % cards.length;


card.classList.remove(

"center",

"left-1",

"left-2",

"right-1",

"right-2",

"hidden"

);


if (offset === 0) {

card.classList.add("center");

} else if (offset === 1) {

card.classList.add("right-1");

} else if (offset === 2) {

card.classList.add("right-2");

} else if (offset === cards.length - 1) {

card.classList.add("left-1");

} else if (offset === cards.length - 2) {

card.classList.add("left-2");

} else {

card.classList.add("hidden");

}

});


dots.forEach((dot, i) => {

dot.classList.toggle("active", i === currentIndex);

});


memberName.style.opacity = "0";

memberRole.style.opacity = "0";


setTimeout(() => {

memberName.textContent = teamMembers[currentIndex].name;

memberRole.textContent = teamMembers[currentIndex].role;

memberName.style.opacity = "1";

memberRole.style.opacity = "1";

}, 300);


setTimeout(() => {

isAnimating = false;

}, 800);

}


leftArrow.addEventListener("click", () => {

updateCarousel(currentIndex - 1);

});


rightArrow.addEventListener("click", () => {

updateCarousel(currentIndex + 1);

});


dots.forEach((dot, i) => {

dot.addEventListener("click", () => {

updateCarousel(i);

});

});


cards.forEach((card, i) => {

card.addEventListener("click", () => {

updateCarousel(i);

});

});


document.addEventListener("keydown", (e) => {

if (e.key === "ArrowLeft") {

updateCarousel(currentIndex - 1);

} else if (e.key === "ArrowRight") {

updateCarousel(currentIndex + 1);

}

});


let touchStartX = 0;

let touchEndX = 0;


document.addEventListener("touchstart", (e) => {

touchStartX = e.changedTouches[0].screenX;

});


document.addEventListener("touchend", (e) => {

touchEndX = e.changedTouches[0].screenX;

handleSwipe();

});


function handleSwipe() {

const swipeThreshold = 50;

const diff = touchStartX - touchEndX;


if (Math.abs(diff) > swipeThreshold) {

if (diff > 0) {

updateCarousel(currentIndex + 1);

³×ƼÁð ÀÇ°ß   ÀÌ¿ëÇϽŠÀÚ·áÀÇ Èı⸦ ÀÚÀ¯·Ó°Ô ÀÛ¼ºÇϼ¼¿ä. (»ó¾÷ÀûÀÎ ±¤°í ¹× µµ¹è¼º ±Û µîÀº »çÀüÅ뺸¾øÀÌ »èÁ¦µÉ ¼ö ÀÖ½À´Ï´Ù.)
³»¿ë ¾ÆÀ̵ð Àǰ߳²±â±â
µî·ÏµÈ ÀǰßÀÌ ¾ø½À´Ï´Ù.
1
À̸§
³»¿ë
:³×¸Â¾Æ¿ä: :È­³ª´Â±º¿ä: :Àá¿Í: :¿ì¿ïÇØ: :À̰ǾƳÄ: :¿ÕÇÏÇÏ: ¿Õ¿ôÀ½~ ³î·¥~
Æò°¡Çϱâ ÈǸ¢ÇÔ ¸Å¿ìÁÁÀ½ ÁÁÀ½ ±¦ÂúÀ½ º¸Åë º°·Î
µµ¹è¹æÁöŰ
 56858251 º¸ÀÌ´Â µµ¹è¹æÁö۸¦ ÀÔ·ÂÇϼ¼¿ä.