Сетка слетается
awwwards-фавориты Колода карточек →

Sticky-сцены

Сетка слетается

Разбросанные по экрану кадры слетаются в аккуратную сетку по мере прокрутки.

Скрольте сквозь сцену.

кадры слетаются в сетку по мере прокрутки

Код
<section class="gather" data-scrub>  <!-- 280vh, --p пишет движок -->
  <div class="stick">
    <div class="grid">
      <i style="--x:-70vw; --y:-30vh; --r:-14deg"></i>
      <i style="--x:0;     --y:-60vh; --r:8deg"></i>
      <i style="--x:70vw;  --y:-30vh; --r:16deg"></i>
      <!-- у каждой карточки свои стартовые смещения -->
    </div>
  </div>
</section>

<style>
.gather { position: relative; height: 280vh; }
.gather .stick { position: sticky; top: 0; height: 100vh; overflow: hidden;
  display: flex; align-items: center; justify-content: center; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.grid i { aspect-ratio: 3/4; background-size: cover;
  --k: clamp(0, calc(var(--p, 0) * 1.25), 1);   /* прогресс сборки */
  transform:
    translate(calc(var(--x) * (1 - var(--k))),
              calc(var(--y) * (1 - var(--k))))
    rotate(calc(var(--r) * (1 - var(--k))));
  opacity: calc(.2 + var(--k) * .8); }
</style>
Промпт для ИИ
Сделай сетку, собирающуюся по скроллу: sticky-сцена 280vh с прогрессом в --p; карточки стоят в обычном CSS-гриде, но у каждой свои стартовые смещения в переменных (--x до ±70vw, --y до ±60vh, --r до ±16deg); transform интерполирует их к нулю через k = clamp(p*1.25): translate((1-k)*x, (1-k)*y) rotate((1-k)*r) + opacity .2→1. К концу сцены кадры «слетаются» в аккуратную сетку; обратный скролл разбрасывает обратно.