IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Otáčecí carousel s 3D efektem v čistém CSS

Animovaný carousel pro několik itemů, která se otáčí dokolečka. Itemy vpředu jsou větší než ty vzadu, což vytváří 3D efekt. Animace pouze přes CSS bez JS.

Živá ukázka

3D carousel
3d_carousel.html

HTML

<div class="rotation-container">
    <div class="item-container item-container-1">
        <a href="#" class="item item-1"></a>
    </div>
    <div class="item-container item-container-2">
        <a href="#" class="item item-2"></a>
    </div>
    <div class="item-container item-container-3">
        <a href="#" class="item item-3"></a>
    </div>
    <div class="item-container item-container-4">
        <a href="#" class="item item-4"></a>
    </div>
    <div class="item-container item-container-5">
        <a href="#" class="item item-5"></a>
    </div>
    <div class="item-container item-container-6">
        <a href="#" class="item item-6"></a>
    </div>
</div>

CSS

@keyframes rotation {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
@keyframes backwards-rotation {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(-360deg);
  }
}
@keyframes scaling {
  0% {
    transform: scale(0.65) translateY(65px);
  }
  15% {
    transform: scale(0.5) translateY(100px);
  }
  65% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(0.65) translateY(65px);
  }
}
.rotation-container {
  position: absolute;
  width: 100px;
  height: 100px;
  top: 100px;
  left: 200px;
  transform: rotate(90deg);
  animation: rotation 20s infinite linear;
}
.rotation-container:hover {
  animation-play-state: paused;
}
.rotation-container:hover .item-container {
  animation-play-state: paused;
}
.rotation-container:hover .item {
  animation-play-state: paused;
}
.rotation-container .item-container {
  position: absolute;
  animation: backwards-rotation 20s infinite linear;
}
.rotation-container .item-container-1 {
  bottom: -60px;
  left: -110px;
}
.rotation-container .item-container-2 {
  top: -60px;
  left: -110px;
}
.rotation-container .item-container-3 {
  left: 10px;
  bottom: 145px;
}
.rotation-container .item-container-4 {
  top: -60px;
  right: -110px;
}
.rotation-container .item-container-5 {
  bottom: -60px;
  right: -110px;
}
.rotation-container .item-container-6 {
  left: 10px;
  top: 145px;
}
.rotation-container .item {
  display: block;
  width: 80px;
  height: 80px;
  border-radius: 12px;
  background-color: #e91b23;
  animation: scaling 20s infinite linear;
}
.rotation-container .item-1 {
  animation-delay: -16.66667s;
}
.rotation-container .item-2 {
  animation-delay: -20s;
}
.rotation-container .item-3 {
  animation-delay: -23.33333s;
}
.rotation-container .item-4 {
  animation-delay: -26.66667s;
}
.rotation-container .item-5 {
  animation-delay: -30s;
}
.rotation-container .item-6 {
  animation-delay: -33.33333s;
}

SCSS (Sass)

@keyframes rotation {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}

@keyframes backwards-rotation {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(-360deg);
    }
}

@keyframes scaling {
    0% {
        transform: scale(.65) translateY(65px);
    }
        15% {
        transform: scale(.5) translateY(100px);
    }
        65% {
        transform: scale(1.2);
    }
        100% {
        transform: scale(.65) translateY(65px);
    }
}

  $red: #e91b23;
$animation-duration: 20;  //Sets the speed of rotation

.rotation-container {
    position: absolute;
    width: 100px;
    height: 100px;
    top: 100px;
    left: 200px;
    transform: rotate(90deg);
    animation: rotation #{$animation-duration}s infinite linear;
        &:hover {
        animation-play-state: paused;
            .item-container {
            animation-play-state: paused;
        }
            .item {
            animation-play-state: paused;
        }
    }

    .item-container {
        position: absolute;
        animation: backwards-rotation #{$animation-duration}s infinite linear;
    }
        .item-container-1 {
        bottom: -60px;
        left: -110px;
    }
        .item-container-2 {
        top: -60px;
        left: -110px;
    }
        .item-container-3 {
        left: 10px;
        bottom: 145px;
    }
        .item-container-4 {
        top: -60px;
        right: -110px;
    }
        .item-container-5 {
        bottom: -60px;
        right: -110px;
    }
        .item-container-6 {
        left: 10px;
        top: 145px;
    }

    .item {
        display: block;
        width: 80px;
        height: 80px;
        border-radius: 12px;
        background-color: $red;
        animation: scaling #{$animation-duration}s infinite linear;
    }
        .item-1 {
        animation-delay: #{($animation-duration/6*6)+$animation-duration/6-2*$animation-duration}s;
    }
        .item-2 {
        animation-delay: #{($animation-duration/6*5)+$animation-duration/6-2*$animation-duration}s;
    }
        .item-3 {
        animation-delay: #{($animation-duration/6*4)+$animation-duration/6-2*$animation-duration}s;
    }
        .item-4 {
        animation-delay: #{($animation-duration/6*3)+$animation-duration/6-2*$animation-duration}s;
    }
        .item-5 {
        animation-delay: #{($animation-duration/6*2)+$animation-duration/6-2*$animation-duration}s;
    }
        .item-6 {
        animation-delay: #{($animation-duration/6*1)+$animation-duration/6-2*$animation-duration}s;
    }
}

 

Všechny články v sekci
CSS3 zdrojákoviště
Článek pro vás napsal Motlja
Avatar
Uživatelské hodnocení:
7 hlasů
Aktivity