Przejdź do treści
Sweet Lava Design System
↗ Strona

Fundamenty Ruch

Fundamenty

Ruch

Animacja niesie sens, nie dekoruje. Spokojne wejścia, miękkie krzywe i jedna żelazna zasada: wejście to ease-out (szybko → wolno), wyjście to ease-in (wolno → szybko). Wszystko respektuje prefers-reduced-motion.

Krzywe easing

Cztery krzywe pokrywają cały serwis. Wykres pokazuje postęp animacji w czasie.

ease-out-soft

--ease-out-soft

Wejścia i hover – szybko, potem wolno

ease-in-out-soft

--ease-in-out-soft

Przejścia dwustronne

open (akordeon)

cubic-bezier(0.16, 1, 0.3, 1)

Rozwijanie – mocny ease-out

close (akordeon)

cubic-bezier(0.7, 0, 0.84, 0)

Zwijanie – ease-in

Demo hover

Najedź. Primary wypełnia się jasną miętą z góry na dół tą samą mechaniką clip-path co kafelki usług (najazd ease-out, zejście ease-in, 1 s). Linki dorysowują podkreślenie od lewej w 300 ms.

Najedź – podkreślenie
html
<!-- Nakładka ::before powiela etykietę i odsłania się clip-path z góry na dół -->
<a class="btn-sweep rounded-button border border-ink bg-ink px-6 py-2.5 text-mint" data-label="Najedź">Najedź</a>

Akordeon – rozwijanie i zwijanie

Lista rozwijalna pokazuje parę krzywych z tabeli wyżej: rozwijanie to mocny ease-out (szybko → wolno), zwijanie to ease-in (wolno → szybko). Element zostaje otwarty do końca animacji zamykania.

Zasady ruchu

Czym różni się wejście od wyjścia?

Wejście jest na ease-out (szybko, potem wolno), a wyjście na ease-in (wolno, potem szybko). Rzeczy „wlatują” energicznie, a „znikają” z wyhamowaniem.

Dlaczego akordeon nie używa transition?

Natywny element details nie animuje wysokości, więc panel trzymamy otwarty do końca animacji i animujemy go przez Web Animations API.

Co z prefers-reduced-motion?

Przy włączonej redukcji ruchu wracamy do natywnego, natychmiastowego rozwijania – bez animacji wysokości.

Czasy trwania

Im większy/dłuższy ruch, tym wolniejsza animacja. Drobne interakcje są błyskawiczne, wejścia sekcji – dostojne.

Czas Zastosowanie
300 ms Hover, zmiany koloru, drobne przesunięcia
450 / 500 ms Zwijanie / rozwijanie akordeonu
1000 ms Najazd wiersza usługi (clip-path)
1200 ms Reveal-on-scroll (slide-up + fade)
2500 ms Licznik statystyk (cała animacja)

Reveal-on-scroll

Elementy .reveal wchodzą slide-up (18 px) + fade przez 1,2 s, gdy wjadą w widok. W jednym rzędzie lewe pojawiają się przed prawymi (stagger wg pozycji poziomej). Kliknij, by odtworzyć.

1
2
3
css
.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 1.2s var(--ease-out-soft), transform 1.2s var(--ease-out-soft);
}
.reveal.is-visible { opacity: 1; transform: none; }

prefers-reduced-motion

Gdy użytkownik prosi o mniej ruchu, wyłączamy wejścia, animowane okładki i karuzele – treść pojawia się od razu, nic nie miga.

css
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; }
  .cover-anim__layer { display: none; }
}