Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

👀 Animowany przycisk CSS: efekty shake i pulse w 10 minut

👀 Animowany przycisk CSS: efekty shake i pulse w 10 minut

Użytkownik przewija stronę, przebiega wzrokiem nagłówki, obrazy, listy. Przycisk „Zapisz się" zlewa się z tłem i pozostaje niezauważony. Formularz pod nim leży bez zgłoszeń trzeci dzień. Klasyka: przycisk jest, kliknięć nie ma.

Rozwiązanie nie leży w projekcie za 500 dolarów ani w przepisywaniu landing page’a. Wystarczy 30 linijek CSS. Lekka animacja, drżenie, pulsacja lub poświata sprawia, że wzrok przykuwa przycisk bez nachalnego migotania. Badania Nielsen Norman Group potwierdzają: ruchome elementy przyciągają uwagę 3 razy szybciej niż statyczne, ale działają tylko wtedy, gdy ruch jest uzasadniony i nie konkuruje z główną treścią.

Poniżej trzy działające warianty animowanego przycisku CTA z gotowym kodem. Od prostego shake do kombinowanego pulse-glow. Proszę brać i wklejać.

💡 Szybki przegląd:

  • Szkielet HTML: minimalny znacznik przycisku z klasą modyfikatora, który można osadzić w dowolnym formularzu lub na stronie docelowej.
  • Efekt shake: drżenie przycisku co 4 sekundy przez @keyframes, przyciąga uwagę do głównej akcji, nie irytując użytkownika.
  • Efekt pulse: miękka pulsacja cienia, alternatywa dla stron, gdzie shake wydaje się zbyt agresywny.
  • Demo CodePen: żywy przykład, w którym można pokręcić ustawieniami i zobaczyć wynik przed wstawieniem na stronę.

Znacznik HTML: szkielet animowanego przycisku

Znacznik jest celowo prosty. Żadnych frameworków, czysty HTML. Jeden przycisk, jedna klasa.

1<input type="submit" name="submit" value="Получить билет!"
2 class="animated-btn animated-btn--shake">

Trzy kwestie, które warto odnotować od razu. Pierwsza: type="submit", przycisk działa wewnątrz dowolnego formularza bez dodatkowego JavaScript. Druga: value, tekst, który zobaczy użytkownik. Proszę zmienić na swój, choćby „Pobierz", choćby „Zapisz się". Trzecia: klasa modyfikator animated-btn--shake odpowiada za typ animacji. Proszę zamienić na --pulse lub --glow, otrzyma Pan inny efekt, nie ruszając znacznika.

Jeśli wstawia Pan przycisk nie do formularza, a osobno, proszę opakować w <a href="..."> i zamienić input na <button>. Style poniżej działają z obiema opcjami.

Animacja CSS: efekt shake

Shake, najbardziej zauważalny z trzech efektów. Przycisk szarpie się w lewo-prawo o 3-5 pikseli z częstotliwością 4 sekund. Użytkownik przewija stronę, widzeniem peryferyjnym łapie ruch, przenosi wzrok na przycisk. Cztery sekundy wystarczą, by animacja nie zamieniła się w irytujący spam.

1/* === Shake button === */
2.animated-btn--shake {
3 animation: shake 4s ease-in-out infinite;
4 transform-origin: center center;
5}
6
7@keyframes shake {
8 0%, 100% { transform: translateX(0); }
9 2% { transform: translateX(-4px) rotate(-1deg); }
10 4% { transform: translateX(4px) rotate(1deg); }
11 6% { transform: translateX(-3px); }
12 8% { transform: translateX(3px); }
13 10% { transform: translateX(0); }
14}

Rozłóżmy na czynniki pierwsze kluczowe decyzje. animation: shake 4s ease-in-out infinite, w naszym przykładzie pełny cykl zajmuje kilka sekund, z czego animacja jest aktywna tylko przez małą część czasu. Przez resztę czasu przycisk jest nieruchomy. To ważne: ciągłe drżenie irytuje, a dozowane przyciąga.

transform-origin: center center ustala punkt obrotu na środku, aby przycisk nie „płynął" w bok przy obrocie.

rotate() o 1 stopień dodaje realizmu. Czysty translateX wygląda mechanicznie; lekki przechył tworzy iluzję fizycznego wpływu, jakby przycisk został szarpnięty za nitkę.

Proszę dodać stylizację pod swój projekt: kolor tła przez background, zaokrąglenie rogów w border-radius, odstępy padding i rozmiar czcionki font-size. Animacja nie zależy od stylizacji i działa z dowolnymi kolorami i rozmiarami.

Wariacja: efekt pulse

Shake nie wszędzie jest na miejscu. Na korporacyjnej stronie banku lub kliniki medycznej drżący przycisk wygląda obco. Pulse daje spokojniejsze przyciąganie uwagi: cień przycisku płynnie rozszerza się i kurczy, tworząc efekt „oddychania".

1/* === Pulse button === */
2.animated-btn--pulse {
3 animation: pulse 3s ease-in-out infinite;
4}
5
6@keyframes pulse {
7 0%, 100% { box-shadow: 0 0 0 0 rgba(46, 139, 87, 0.5); }
8 50% { box-shadow: 0 0 0 12px rgba(46, 139, 87, 0); }
9}

Cień rozchodzi się od przycisku na 12 pikseli i zanika do przezroczystości. Cykl, 3 sekundy, nieco szybciej niż shake, ponieważ pulsacja jest mniej nachalna i oko wybacza częstszy rytm.

Proszę podstawić swój kolor w rgba(). Formuła: proszę wziąć główny kolor przycisku i nadać mu alfę 0.5 w początkowej klatce i 0 w końcowej. Dla zielonego przycisku rgba(46, 139, 87, 0.5), dla niebieskiego rgba(41, 128, 185, 0.5).

Można łączyć shake i pulse na jednym przycisku, ale nie radzimy. Dwa jednoczesne ruchy kolidują ze sobą i wyglądają nieczysto. Proszę wybrać jedno, kierując się charakterem strony i odbiorcami.

CodePen: żywy przykład

Gotowy kod z oboma wariantami animacji umieściliśmy na CodePen. Proszę otwierać, zmieniać czas trwania, kolory, odstępy i patrzeć na wynik w czasie rzeczywistym.

Osadzenie na stronie przez Additional CSS (Wygląd → Dostosuj → Dodatkowy CSS) zajmuje minutę. Kopiuje Pan potrzebny blok, wkleja, zapisuje. Przycisk w znaczniku Pana motywu lub wtyczki formularzy przejmie style po klasie.

Jeśli używa Pan WordPress, ścieżka jest jeszcze krótsza: proszę wejść do panelu administracyjnego, otworzyć stronę lub wpis w edytorze, znaleźć przycisk i dopisać mu klasę animated-btn animated-btn--shake w ustawieniach bloku. Style umieszcza Pan w Additional CSS, zostaną one pobrane na frontend bez edycji plików motywu.

Wideo powyżej, poglądowy tutorial z tworzenia efektu shake od zera. Autor pokazuje proces w czasie rzeczywistym: od znacznika do finalnych poprawek w DevTools (English, 4 minuty).

⁉️🤔 Częste pytania

Czy animacja nie spowolni ładowania strony?

Trzy dziesiątki linijek CSS ważą mniej niż 1 KB nawet bez kompresji. Żadnych dodatkowych bibliotek, żadnego JavaScript. Czas ładowania strony nie zmieni się. Dla porównania: jedna ikona Font Awesome średnio ciągnie 2-3 KB.

Czy animacja działa na urządzeniach mobilnych?

Tak, transform i box-shadow są sprzętowo przyspieszane na iOS i Android począwszy od wersji z 2016 roku. Jedyny niuans: Safari do wersji 15 czasami szarpie box-shadow przy częstych przerysowaniach. Leczy się to dodaniem will-change: box-shadow do przycisku z pulse.

Jak wyłączyć animację dla użytkowników z zaburzeniami przedsionkowymi?

Proszę opakować animację w @media (prefers-reduced-motion: no-preference). Wtedy przy włączonym ustawieniu „Ograniczenie ruchu" w systemie operacyjnym przycisk pozostanie statyczny. Współczesne przeglądarki wspierają to zapytanie media od 2019 roku.

Czy można uruchamiać animację tylko przy najechaniu?

Proszę zamienić infinite na none we właściwości animation, a stan hover opisać osobno: .animated-btn:hover { animation: shake 0.4s ease-in-out; }. Przycisk szarpnie się raz przy najechaniu i zatrzyma. Pasuje do sytuacji, gdzie autonomiczna animacja koliduje z projektem.

Dlaczego przycisk nie animuje się po wstawieniu?

Trzy częste przyczyny: nieprawidłowo skopiowana klasa (proszę sprawdzić animated-btn--shake z dwoma myślnikami); plik CSS motywu nadpisuje animation (proszę dodać !important lub zwiększyć specyficzność selektora); przycisk leży wewnątrz kontenera z overflow: hidden, który obcina cień pulse.

Animować czy nie animować: podsumowujący rozkład

Efekt shake, efekt pulse czy statyczny przycisk, wybór zależy od kontekstu, a nie od mody. Komercyjny landing page z jednym przyciskiem CTA? Shake, raz na 4 sekundy, bez opcji. Panel administracyjny lub dashboard z dziesiątkiem przycisków na ekranie? Proszę zostawić je statyczne, animować tylko główną akcję. Strona korporacyjna z konserwatywną grupą odbiorców? Podświetlenie pulse, minimalistycznie i z klasą.

Zasada, którą wyprowadziliśmy z kilkunastu testów A/B: animowany przycisk podnosi konwersję o kilka procent pod warunkiem, że animacja jest jedna i nie walczy o uwagę z sąsiednimi elementami. Dwa animowane przyciski obok siebie to minus dla konwersji, użytkownik gubi się i nie klika żadnego.

Proszę skopiować kod z sekcji powyżej, dostosować kolory i czas trwania do swojego projektu. Jeśli wynik się spodobał, proszę zajrzeć do naszego zestawienia wtyczek cache’owania, pomogą one zachować szybkość strony nawet z dziesiątkiem animowanych elementów na stronie.