3D karusel


CSS — Aylanuvchi 3D karusel

Bu yerda biz yana bir klassik 3D obyektni qanday yasashni ko‘rsatamiz: Aylanadigan karusel.


HTML tuzilishi

Asosiy HTML tuzilishidan boshlaymiz:

<div class="container">
  <div class="carousel">
    <div class="card" style="--index:0;">1</div>
    <div class="card" style="--index:1;">2</div>
    <div class="card" style="--index:2;">3</div>
    <div class="card" style="--index:3;">4</div>
    <div class="card" style="--index:4;">5</div>
    <div class="card" style="--index:5;">6</div>
  </div>
</div>

container elementi 3D fazoni o‘z ichiga oladi. carousel elementi 3D obyekt ro‘lini o‘ynaydi. Karuselning oltita elementi uchun oltita alohida card elementi ishlatiladi.



CSS uslublash

Avval :root elementida bir nechta o‘zgaruvchi belgilaymiz. Kenglik, balandlik va umumiy elementlar uchun shaxsiy o‘zgaruvchilar yaratamiz. Bu yerda karuselda oltita karta bo‘ladi. Radiusni ham hisoblashimiz kerak.

Radius quyidagi formulaga ega: radius = (width / 2) / tan(360 / quantity / 2).

200px kenglikdagi 6 ta karta uchun: (200 / 2) / tan(360 / 6 / 2) = 100 / 0.577 = ~173px. --radius ni 173px ga belgilaymiz;

:root {
  --card-width: 200px;
  --card-height: 300px;
  --total-items: 6;
  --radius: 173px; /* Calculated radius for 6 cards */
}

Keyin, 3D konteyner qutisini aniqlaymiz: height, width va margin bilan birga perspective qo‘llang:

.container {
  width: var(--card-width);
  height: var(--card-height);
  margin: 80px auto;
  perspective: 1000px;
}

Endi carousel elementi konteynerining 3D fazosida transformatsiya qilinishi mumkin. width: 100%; va height: 100%; qo‘shamiz. position: relative kartalarni absolyut joylashtirish uchun ishlatiladi. transform-style: preserve-3d bu yerda juda muhim — u bola elementlarni 3D fazoga majbur qiladi. Buning yordamida kartalar 2D tekislikka aylanib qolmaydi. Shuningdek, karuselning uzluksiz aylanishini ishga tushirish uchun CSS animatsiya qo‘shamiz:

.carousel {
  width: 100%;
  height: 100%;
  position: relative;
  transform-style: preserve-3d;
  animation: spin 20s infinite linear;
}

Keyin barcha oltita karta uchun asosiy uslublarni qo‘shamiz. Kartalarni 3D fazoda joylashtirish uchun ularning 2D joylashuvini position: absolute bilan qayta belgilash kerak. Keyin har bir kartani aylantirish uchun rotateY(), va silindr chetini hosil qilish uchun uni tashqariga surish uchun translateZ() ishlatamiz:

.card {
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
  background: linear-gradient(to bottom, red, yellow);
  color: white;
  font-size: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
  transform:
    rotateY(calc(var(--index) * (360deg / var(--total-items))))
    translateZ(var(--radius));
}

Keyin karuselni aylantirish uchun keyframe animatsiyasini yaratamiz:

@keyframes spin {
  from { transform: rotateY(0deg); }
  to { transform: rotateY(360deg); }
}

Oxirida ko‘rishni osonlashtirish uchun hover paytida to‘xtatish (pause) yaratamiz:

.carousel:hover {
  animation-play-state: paused;
}

Aylanuvchi 3D karuselning to‘liq misoli

Mana aylanuvchi 3D karuselning to‘liq misoli:

Misol

:root {
  --card-width: 200px;
  --card-height: 200px;
  --total-items: 6;
  --radius: 173px; /* Calculated radius for 6 cards */
}

.container {
  width: var(--card-width);
  height: var(--card-height);
  margin: 80px auto;
  perspective: 1000px;
}

.carousel {
  width: 100%;
  height: 100%;
  position: relative;
  transform-style: preserve-3d;
  animation: spin 20s infinite linear;
}

.card {
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
  background: linear-gradient(to bottom, red, yellow);
  color: white;
  font-size: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
  transform:
    rotateY(calc(var(--index) * (360deg / var(--total-items))))
    translateZ(var(--radius));
}

@keyframes spin {
  from { transform: rotateY(0deg); }
  to { transform: rotateY(360deg); }
}

.carousel:hover {
  animation-play-state: paused;
}
O‘zingiz sinab ko‘ring »

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!