Tailwind CSS i Framer Motion — strona premium, która działa płynnie
Jak nowoczesne narzędzia CSS i biblioteka animacji Framer Motion sprawiają, że strona wygląda i czuje się jak produkt najwyższej klasy.
Dlaczego pierwsze wrażenie decyduje o wszystkim
Użytkownicy oceniają wiarygodność strony internetowej w ciągu 50 milisekund od załadowania. To nie żart — badania nad UX potwierdzają to od lat. Wizualna jakość, płynność przejść i spójność designu decydują, czy ktoś zostaje, czy wychodzi. Właśnie dlatego zrezygnowałem z gotowych motywów i bibliotek komponentów na rzecz Tailwind CSS jako warstwy stylowania i Framer Motion jako silnika animacji. Razem dają pełną kontrolę nad każdym detalem wizualnym.
Tailwind CSS — utility-first zamiast pisania CSS od zera
Tailwind to framework CSS działający na zasadzie klas użytkowych: zamiast pisać `.moj-przycisk { background: #1a1a1a; padding: 12px 24px; border-radius: 8px; }` piszesz bezpośrednio w HTML `bg-zinc-900 px-6 py-3 rounded-lg`. Brzmi jak chaos, ale w praktyce jest odwrotnie — masz design system wymuszony przez skończony zestaw klas, brak przypadkowych wartości magic numbers i zero martwego CSS w bundle. Każda klasa jest tree-shaked do produkcji — finalne style ważą kilka kilobajtów.
- Zero nieużywanego CSS w produkcji dzięki automatycznemu tree-shaking
- Spójny design system wymuszony przez skończony zestaw tokenów (spacing, colors, typography)
- Responsywność w jednej linii: sm:text-base md:text-lg lg:text-xl
- Dark mode bez osobnych arkuszy: dark:bg-zinc-900 dark:text-white
- Szybkość developmentu — nie przełączasz się między plikami HTML i CSS
- Arbitralne wartości gdy potrzeba precyzji: w-[342px] top-[calc(100%+8px)]
Framer Motion — animacje, które nie są tylko dekoracją
Framer Motion to biblioteka animacji dla React, która robi jedną rzecz i robi ją perfekcyjnie. Każdy element owija się w komponent `motion.div` i dostaje props: initial (stan wyjściowy), animate (stan docelowy), exit (stan przy znikaniu), transition (czas i krzywa ruchu). Efekty, które w CSS wymagałyby godzin pracy z keyframes, w Framer Motion piszesz w kilku liniach. Co ważniejsze — animacje są płynne na 60fps nawet na słabszym sprzęcie mobilnym.
- Płynne wejście elementów podczas scrollowania strony (scroll-triggered animations)
- Przejścia między podstronami bez twardego przeładowania — strona czuje się jak aplikacja
- Animacje layoutu: gdy element zmienia rozmiar lub pozycję, Framer interpoluje płynnie
- Gesture-based animations: hover, tap, drag z naturalnymi fizyką i sprężynowością
- AnimatePresence: płynne wyjście elementów przed odmontowaniem z DOM
- Pełna obsługa prefers-reduced-motion dla dostępności
Jak to wygląda razem na przykładzie mojej strony
Ta strona, którą oglądasz, jest zbudowana na Next.js + Tailwind + Framer Motion. Panel wysuwający się z prawej strony przy wchodzeniu na podstronę, galeria z animowanym otwieraniem lightboxa, płynne przejścia między sekcjami — to wszystko Framer Motion. Style całego projektu to Tailwind z własną konfiguracją tokenów kolorystycznych i typograficznych. Tailwind wymusza spójność, Framer dodaje charakter. Razem sprawiają, że strona czuje się jak produkt z górnej półki.
Dlaczego nie używam gotowych bibliotek komponentów
Material UI, Chakra, shadcn — to wartościowe narzędzia, ale nakładają ograniczenia designerskie. Gdy buduję stronę dla klienta, jego identyfikacja wizualna ma być rozpoznawalna, nie taka jak tysiące innych stron zbudowanych na tym samym zestawie komponentów. Tailwind daje mi budulec — przestrzeń, kolor, typografię — ale układ i charakter projektuję od zera. Czasem używam Radix UI lub shadcn jako fundamentu dostępności dla trudnych komponentów, ale style zawsze piszę własnoręcznie.
Kwestia dostępności i wydajności animacji
Animacje muszą być ładne, ale przede wszystkim niezmęczające. Każdy efekt ruchu na tej stronie respektuje ustawienie prefers-reduced-motion z systemu operacyjnego — jeśli użytkownik ma włączoną opcję ograniczenia ruchu, animacje znikają lub zamieniają się w proste przejścia opacity. Framer Motion robi to automatycznie gdy przekazuję odpowiednią konfigurację. To nie jest opcja ani miły dodatek — to standard dostępności, który stosuję w każdym projekcie.
Ile to kosztuje wydajnościowo
Częste pytanie: czy Framer Motion nie spowalnia strony? Biblioteka waży około 50kB gzipped — to nie jest nic. Co ważniejsze, animuje właściwości transform i opacity, które są obsługiwane przez GPU przeglądarki i nie powodują reflow layoutu. Wynik PageSpeed nie spada przez animacje — sprawdzałem to wielokrotnie. Dobra animacja jest transparentna wydajnościowo. Jeśli spowalnia stronę, to problem implementacji, nie narzędzia.
