Niestandardowe animacje w konfiguracji
Definiować niestandardowe klatki kluczowe i narzędzia animacji w pliku tailwind.config.js oraz odwoływać się do nich za pomocą klas animate-* w znacznikach.
Niestandardowe animacje w konfiguracji to bezpłatna lekcja Tailwind CSS Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Tailwind CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Tailwind CSS Academy zawiera 4 lekcji w sumie.
Poza czterema wbudowanymi animacjami
Cztery wbudowane animacje Tailwind obejmują typowe wzorce ładowania i przyciągania uwagi, ale rzeczywiste projekty często wymagają dodatkowych animacji: efektów pojawiania się treści, wysuwanych paneli bocznych, efektów potrząsania przy błędach formularza czy niestandardowych odmian pulsowania. Dodając wpisy do theme.extend.keyframes i theme.extend.animation w konfiguracji, tworzysz nowe narzędzia animate-*, które działają dokładnie tak jak narzędzia wbudowane.
Definiowanie niestandardowych klatek kluczowych
Dodaj niestandardowe klatki kluczowe CSS w theme.extend.keyframes. Każdy klucz w obiekcie staje się nazwą klatki kluczowej. Wartość jest obiektem, w którym kluczami są ciągi znaków zawierające wartości procentowe lub słowa kluczowe 'from'/'to', a wartościami — obiekty właściwości CSS. Tailwind przekształca tę notację obiektową w regułę CSS @keyframes w skompilowanym wyniku. W krokach klatki kluczowej można użyć dowolnej animowalnej właściwości CSS.
// tailwind.config.js
module.exports = {
theme: {
extend: {
keyframes: {
// Fade in from transparent
'fade-in': {
'0%': { opacity: '0' },
'100%': { opacity: '1' },
},
// Slide up from below
'slide-up': {
'0%': { opacity: '0', transform: 'translateY(16px)' },
'100%': { opacity: '1', transform: 'translateY(0)' },
},
// Shake (for errors)
'shake': {
'0%, 100%': { transform: 'translateX(0)' },
'20%, 60%': { transform: 'translateX(-8px)' },
'40%, 80%': { transform: 'translateX(8px)' },
},
},
},
},
};Rejestrowanie niestandardowych narzędzi animacji
Po zdefiniowaniu klatek kluczowych zarejestruj je jako nazwane animacje w theme.extend.animation. Wartość jest skróconym zapisem animacji CSS: name duration timing-function delay iteration-count direction fill-mode. Nazwa musi odpowiadać klatce kluczowej zdefiniowanej w theme.extend.keyframes. Tailwind generuje klasę narzędzia animate-{key} dla każdego wpisu.
// tailwind.config.js
module.exports = {
theme: {
extend: {
keyframes: { /* ... defined above ... */ },
animation: {
'fade-in': 'fade-in 0.3s ease-out',
'slide-up': 'slide-up 0.4s ease-out',
'shake': 'shake 0.5s ease-in-out 1',
// Multiple values
'fade-in-slow': 'fade-in 1s ease-in-out',
// Infinite loop
'fade-in-out': 'fade-in 1.5s ease-in-out infinite alternate',
},
},
},
};Używanie niestandardowych animacji w HTML
Po zarejestrowaniu w konfiguracji niestandardowe animacje są dostępne w kodzie HTML jako klasy animate-{key}. Działają dokładnie tak samo jak wbudowane narzędzia animate i można je łączyć z prefiksami responsywnymi, wariantami stanów oraz wariantem motion-reduce: na potrzeby dostępności. Animacja jest odtwarzana, gdy klasa jest obecna, i zatrzymuje się po jej usunięciu — idealnie nadaje się to do efektów pojawiania się wyzwalanych przez JavaScript.
<!-- Fade in a card on page load -->
<div class="animate-fade-in bg-white rounded-xl p-6 shadow">
Content fades in smoothly
</div>
<!-- Slide up with a slight delay using inline style -->
<div class="animate-slide-up" style="animation-delay: 150ms">
Content slides up after 150ms delay
</div>
<!-- Shake an input on validation error -->
<input
id="email"
class="border border-red-500 animate-shake focus:outline-none px-4 py-2 rounded-lg w-full"
type="email"
placeholder="Invalid email"
/>Animacje pojawiania się treści
Animacje pojawiania się (fade-in, slide-up, scale-in) sprawiają, że treść wygląda dynamicznie w chwili wyświetlania. Są najbardziej skuteczne, gdy treść po raz pierwszy pojawia się w obszarze widocznym na ekranie — podczas ładowania strony lub gdy sekcja staje się widoczna w trakcie przewijania. Czas trwania animacji powinien wynosić od 200 do 400 ms; zawsze należy też dobrać odpowiednią funkcję easing. W JavaScript należy użyć Intersection Observer API, aby uruchamiać animacje, gdy elementy pojawiają się w obszarze widocznym podczas przewijania.
// JavaScript: trigger animation when element enters viewport
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-slide-up');
observer.unobserve(entry.target); // animate once
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.animate-on-scroll').forEach((el) => {
observer.observe(el);
});
<!-- HTML: starts invisible, gets class on scroll -->
<div class="opacity-0 animate-on-scroll">Animated on scroll</div>Bardziej złożone przykłady klatek kluczowych
Złożone animacje wykorzystują więcej punktów procentowych klatek kluczowych, aby tworzyć ruch składający się z wielu etapów. Animacja bicia serca najpierw powiększa element, a następnie go pomniejsza, tworząc rytm podwójnego uderzenia. Animacja rozbłysku na krótko wyróżnia element za pomocą koloru tła. Animacja slide-in-right jednocześnie przesuwa element i zmienia jego przezroczystość. Takie animacje złożone wymagają wielu punktów procentowych, aby precyzyjnie opisać każdy etap ruchu.
// tailwind.config.js
keyframes: {
'heartbeat': {
'0%, 100%': { transform: 'scale(1)' },
'14%': { transform: 'scale(1.3)' },
'28%': { transform: 'scale(1)' },
'42%': { transform: 'scale(1.3)' },
'70%': { transform: 'scale(1)' },
},
'flash': {
'0%, 50%, 100%': { opacity: '1' },
'25%, 75%': { opacity: '0.25' },
},
'slide-in-right': {
'0%': { opacity: '0', transform: 'translateX(32px)' },
'100%': { opacity: '1', transform: 'translateX(0)' },
},
},
animation: {
'heartbeat': 'heartbeat 1.2s ease-in-out infinite',
'flash': 'flash 0.5s ease-in-out',
'slide-in-right': 'slide-in-right 0.3s ease-out',
}Tryb wypełnienia animacji
Właściwość CSS animation-fill-mode określa, co dzieje się przed rozpoczęciem animacji (jeśli ustawiono opóźnienie) i po jej zakończeniu. forwards pozostawia element w stanie końcowym po zakończeniu animacji — ma to kluczowe znaczenie w przypadku jednorazowych animacji pojawiania się, gdy element powinien pozostać widoczny. backwards stosuje pierwszą klatkę w czasie opóźnienia, dzięki czemu elementy rozpoczynają animację we właściwym stanie początkowym. Tryb wypełnienia należy uwzględnić w skróconym zapisie animacji.
// animation shorthand: name | duration | easing | delay | count | fill-mode
animation: {
// 'forwards' keeps final state (element stays visible after fading in)
'fade-in': 'fade-in 0.3s ease-out forwards',
// 'backwards' applies frame-0 during delay (starts transparent during delay)
'fade-in-delayed': 'fade-in 0.4s ease-out 0.2s backwards',
// No fill mode: jumps back to initial state after animation
'shake': 'shake 0.5s ease-in-out',
}Wstrzymywanie i wznawianie animacji
Animację Tailwind można wstrzymać za pomocą animation-play-state: paused. Należy dodać niestandardową klasę narzędziową lub użyć wartości arbitralnej: [animation-play-state:paused]. Jest to przydatne na przykład do wstrzymywania animacji ładowania, gdy strona nie jest widoczna (z użyciem Page Visibility API), albo do wstrzymywania animacji najechania, aby dać użytkownikom czas na interakcję z treścią. Tailwind nie udostępnia wbudowanego narzędzia do wstrzymywania, ale arbitralny CSS lub niestandardowe narzędzie w zupełności wystarczą.
@layer utilities {
.animation-paused { animation-play-state: paused; }
.animation-running { animation-play-state: running; }
}
<!-- Pause animation on hover -->
<div class="animate-pulse hover:animation-paused bg-gray-200 rounded h-4 w-48">
Pauses pulsing when hovered
</div>
<!-- JavaScript: pause when page is hidden -->
document.addEventListener('visibilitychange', () => {
const spinners = document.querySelectorAll('.animate-spin');
spinners.forEach(el => {
el.style.animationPlayState = document.hidden ? 'paused' : 'running';
});
});Obsługa ograniczonego ruchu w niestandardowych animacjach
Każda utworzona niestandardowa animacja powinna mieć również obsługę wariantu motion-reduce:. Najprostsze podejście to motion-reduce:animate-none, które całkowicie wyłącza animację. W przypadku animacji pojawiania się, gdy końcowy stan ma nadal być widoczny, należy użyć motion-reduce:opacity-100 razem z motion-reduce:animate-none, aby element pozostał widoczny nawet po pominięciu animacji fade-in.
<!-- Accessible entrance animation -->
<div
class="
opacity-0 animate-fade-in
motion-reduce:opacity-100 motion-reduce:animate-none
"
>
Content visible immediately for reduced-motion users,
fades in for others
</div>
<!-- Accessible slide-up -->
<div
class="
opacity-0 translate-y-4 animate-slide-up
motion-reduce:opacity-100 motion-reduce:translate-y-0 motion-reduce:animate-none
"
>
Reduced motion: appears instantly at final position
</div>Biblioteki animacji innych firm z Tailwind
W przypadku bardziej zaawansowanych animacji — fizyki sprężystości, animacji sterowanych przewijaniem lub złożonej choreografii — biblioteki innych firm, takie jak tailwindcss-animate, Framer Motion (React) czy GSAP, dobrze integrują się z Tailwind. Tailwindcss-animate udostępnia jako wtyczka bogaty zestaw gotowych klatek kluczowych (accordion-down, accordion-up, fade-in itd.), natychmiast rozszerzając dostępne narzędzia animate-*. Jest domyślnie używana w komponentach shadcn/ui.
// Install tailwindcss-animate
// npm install tailwindcss-animate
// tailwind.config.js
module.exports = {
plugins: [
require('tailwindcss-animate'),
],
};
<!-- Now you have many new animate-* utilities -->
<div class="animate-in fade-in slide-in-from-bottom-4 duration-300">
Animated with tailwindcss-animate
</div>
<div class="animate-out fade-out slide-out-to-top-4 duration-200">
Exit animation
</div>Debugowanie niestandardowych animacji
Do sprawdzania i debugowania niestandardowych animacji należy użyć panelu Animations w Chrome DevTools. Należy wybrać element w panelu Elements, a następnie otworzyć panel Animations. Po uruchomieniu animacji pojawi się wizualizacja krzywej klatek kluczowych wraz ze znacznikami czasu. Można spowolnić odtwarzanie do prędkości 0,25x, aby dokładnie przeanalizować każdy etap. Panel umożliwia również ponowne odtwarzanie animacji na żądanie, co jest znacznie wygodniejsze niż odświeżanie strony w celu przechwycenia animacji pojawiania się.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat niestandardowych animacji w konfiguracji Tailwind.
Podsumowanie lekcji
W tej lekcji nauczyłeś się: definiować niestandardowe klatki kluczowe w theme.extend.keyframes i rejestrować je jako narzędzia w theme.extend.animation, używać animation fill-mode forwards w jednorazowych animacjach pojawiania się, które powinny zachować stan końcowy, oraz zawsze łączyć niestandardowe animacje z motion-reduce:animate-none na potrzeby dostępności. To kończy kurs Animacje i przejścia — teraz zbudujemy dopracowane wzorce komponentów.
Ucz się HTML dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Niestandardowe animacje w konfiguracji” jest bezpłatna?
Tak — pełny tekst „Niestandardowe animacje w konfiguracji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Tailwind CSS Academy, przejdź na CoddyKit PRO. Kurs Tailwind CSS Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Niestandardowe animacje w konfiguracji”?
Definiować niestandardowe klatki kluczowe i narzędzia animacji w pliku tailwind.config.js oraz odwoływać się do nich za pomocą klas animate-* w znacznikach. Ćwiczysz Tailwind CSS Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Tailwind CSS Academy?
Nie wymagamy żadnego doświadczenia. Tailwind CSS Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Niestandardowe animacje w konfiguracji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Tailwind CSS Academy?
Tak. Każda lekcja Tailwind CSS Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Narzędzia przejść
- Czas trwania i funkcja easing
- Wbudowane animacje klatek kluczowych
- Niestandardowe animacje w konfiguracji