/impeccable animate
Animate
Celowy ruch, który przekazuje stan, a nie dekorację.
Kiedy używać
/impeccable animate jest na interfejsy, które wydają się bez życia, gdzie zmiany stanu są natychmiastowe i drastyczne, gdzie ładowanie po prostu się pojawia, gdzie użytkownik nigdy do końca nie ufa, że jego kliknięcie się zarejestrowało. Użyj, aby dodać małe ruchy, które komunikują, co się dzieje: wejścia, wyjścia, informacja zwrotna, przejścia między stanami.
Nie używaj do dodawania odbić czy sprężyn elastycznych dla energii. To dekoracja, a ta umiejętność ci tego nie da.
Jak to działa
Umiejętność identyfikuje statyczne momenty, które skorzystałyby z ruchu, a potem aplikuje je ze ścisłą dyscypliną:
- Wejścia i wyjścia: elementy pojawiają się i odchodzą z zanikaniem 200 do 300ms plus subtelnym Y lub scale, nigdy właściwościami układu.
- Informacja zwrotna stanu: hover, active, focus, loading, success komunikują się przez ruch zamiast nagłych podmian.
- Przejścia między widokami: shared-element transitions, gdzie to ma sens, fade-through w przeciwnym razie.
- Postęp i ładowanie: ekrany szkieletowe, deterministyczne paski, ruch, który mówi “nadal pracuję”.
- Zredukowany ruch: każda animacja ma fallback
prefers-reduced-motion.
Easing jest zawsze eksponencjalny (ease-out-quart, quint lub expo), bo prawdziwe obiekty wytracają prędkość płynnie. Żadnych odbić, żadnych elastycznych sprężyn, żadnego linear dla czegokolwiek poza wskaźnikami postępu.
Umiejętność animuje tylko transform i opacity. Jeśli znajdziesz się na animowaniu width, height, top lub left, robi coś nie tak. Użyj grid-template-rows do przejść wysokości.
Wypróbuj
/impeccable animate the sign-up flow
Typowe dodatki:
- Pole email dostaje poświatę focus na focus-visible (opacity + shadow, 180ms)
- Przycisk submit pokazuje spinner wewnątrz siebie w stanie ładowania, nie osobny spinner obok
- Ekran sukcesu wchodzi z opacity + translateY(8px), 260ms, ease-out-quart
- Komunikat błędu zsuwa się z grid-template-rows (nie height), 220ms
@media (prefers-reduced-motion: reduce)fallback dla każdego przejścia
Pułapki
- Prośba o “więcej animacji”. Animate to nie pokrętło. Dodaje tam, gdzie ruch komunikuje, nie wszędzie.
- Usuwanie fallbacków reduced-motion. Umiejętność dodaje je automatycznie. Nienegocjowalne dla dostępności.