dobrze użyte, animacja CSS jest niezwykle użytecznym i potężnym narzędziem. Może dodać zainteresowania lub twórczego podniecenia, skierować oko użytkownika, wyjaśnić coś szybko i zwięźle i poprawić użyteczność. Z tego powodu w ostatnich latach pojawiło się coraz więcej animacji na stronach i w aplikacjach.
w tym artykule zebraliśmy kilka najfajniejszych przykładów animacji CSS, jakie widzieliśmy, i pokażemy, jak je odtworzyć., Czytaj dalej, aby zapoznać się z wieloma szczegółowymi samouczkami i inspirującymi efektami (oraz linkami do ich kodu).
czym jest animacja CSS?
animacja CSS jest metodą animacji niektórych elementów HTML bez konieczności używania procesora i pamięci JavaScript lub Flash. Nie ma ograniczeń co do liczby lub częstotliwości właściwości CSS, które można zmienić. Animacje CSS są inicjowane przez określenie klatek kluczowych dla animacji: te klatki kluczowe zawierają style, które będzie miał element.,
chociaż może wydawać się ograniczony, jeśli chodzi o animację, CSS jest naprawdę potężnym narzędziem i jest w stanie tworzyć pięknie gładkie animacje 60 klatek na sekundę. „Dostarczanie przemyślanych, płynnych animacji, które wnoszą znaczącą głębię do twojej witryny, nie musi być trudne”, mówi Adam Kuhn, Twórca stron internetowych front end. „Nowoczesne właściwości CSS zapewniają teraz prawie wszystkie narzędzia potrzebne do tworzenia niezapomnianych wrażeń dla użytkowników.,”
najlepsze animacje nadal mają swoje korzenie w klasycznych 12 zasadach animacji Disneya – zobaczysz kilka wzmianek o tym w tych przykładach animacji CSS, więc warto sprawdzić ten artykuł, zanim zaczniesz. Zachęcamy również do zapoznania się z naszą ofertą świetnych animowanych teledysków, aby uzyskać więcej przykładów i inspiracji.
złota zasada jest taka, że animacje CSS nie powinny być przesadzone – nawet mały ruch może mieć duży wpływ, a zbyt wiele może być rozpraszające i irytujące dla użytkowników., Oto nasze ulubione przykłady i jak je odtworzyć.
zabawny efekt myszy
- autor: Donovan Hutchinson
jest to zabawny efekt, który podąża za myszą. Może być przydatny, gdy chcesz zwrócić uwagę na element na swojej stronie.
potrzebujemy bardzo mało kodu HTML dla tego efektu:
<div class="demo"> <div class="perspective-container"> <div class="card"></div> </div></div>
najpierw ustawiamy demo i ustawiamy perspektywę dla naszej transformacji 3D:
następnie stylujemy div, który chcemy animować:
tutaj ustawiamy tło, następnie ustawiamy overflow na hidden, aby później dodać efekt połysku., Ustawiamy również zmienne css, sheenX i sheenY.
te zmienne połysku pomogą ustawić efekt połysku. Używamy ich w naszej karcie po pseudo-elemencie:
tutaj upewniamy się, że pseudo-element jest większy niż kontener. To da nam coś do przesunięcia na górze karty za pomocą transformacji.
właściwość transform wykorzystuje te zmienne CSS, które ustawiliśmy wcześniej. Ustawimy je za pomocą JavaScript. Ustawmy JavaScript, aby najpierw nasłuchiwał zdarzeń myszy:
document.,onmousemove = handleMouseMove;
potrzebujemy teraz funkcji handleMouseMove do obsługi onmousemove:
Nasza funkcja pobiera wysokość i szerokość okna i tworzy kąt na osiach X i Y. Następnie ustawiamy je na styl transformacji naszej karty. Daje to karcie kąt oparty na myszy!
następnie wywołujemy funkcję ustawiającą pozycję pseudo-elementu:
Nasz pseudo-element wygląda najlepiej, gdy porusza się w przeciwnym kierunku niż mysz. Aby to osiągnąć, tworzymy liczbę od -0,5 do 0,5, która zmienia się w przeciwnym kierunku, obliczając stosunek przez -1.,
mnożymy tę liczbę przez 800, ponieważ chcemy, aby skalowała się do maksimum 400px, czyli jak daleko ustawiamy pseudo-element sheen poza kartą.
na koniec ustawiamy te wartości offsetu na nasze właściwości zmiennej CSS, a renderer przeglądarki robi resztę.
mamy teraz kartę, która obraca się twarzą do naszej myszy, podczas gdy efekt połysku porusza się w przeciwnym kierunku na górze. Tworzy to miły, przyciągający wzrok efekt.,
the big reveal
- Autor: Adam Kuhn
animowane efekty odsłaniania treści wydają się być teraz dość popularne, a właściwie użyte mogą uchwycić koncentrację użytkownika i zaangażować odbiorców. Widziałeś to już wcześniej: Blok koloru rośnie z jednej lub drugiej strony poziomo lub pionowo, a następnie wycofuje się na przeciwną stronę, tym razem odsłaniając jakiś tekst lub obraz poniżej. Jest to koncepcja, która może wydawać się trudna, ale tak naprawdę opiera się na kilku rzeczach.,
najpierw skonfigurujemy pozycjonowanie naszego elementu – Pobierz Pełny kod tutaj) – zdefiniujemy go jako względny(tylko statyczny zawiedzie w tym przypadku). W przypadku tekstu najlepiej jest zezwolić na automatyczną wysokość i szerokość, chociaż trochę wypełnienia nie boli. Zdefiniujemy również pochodzenie transformaty, w przypadku elementu nadrzędnego chcemy użyć pozycji początkowej. Ponieważ chcemy, aby element początkowo był ukryty, użyjemy transformacji skali wzdłuż odpowiedniej osi, aby go zmniejszyć.
następnie pseudoelement maskujący nasz rodzic, ustawiający transform origin na opcję przeciwstawną., Na koniec połącz animacje, używając funkcji czasu lub opóźnień, aby je zrównoważyć.
Uwaga, przesunięto animacje rodzica i pseudo elementu z opóźnieniem informując okno, które ukrywa nasz tekst, aby odsłonić go dopiero po tym, jak sam element zostanie w pełni przeskalowany do widoku. Sprawdź Codepen poniżej.
Stagger on
- Autor: Adam Kuhn
gdy już zaczniesz gromadzić porządną bibliotekę różnych urywków ułatwiających, nadszedł czas, aby spojrzeć na inne sposoby zwiększenia głębi animacji, a jednym z najlepszych sposobów jest zrównoważenie animowanych elementów.,
jest to zbyt powszechne, że JavaScript wyzwalacz jest ustawiony, aby zainicjować kilka animacji opartych na pozycji przewijania, tylko znaleźć wszystkie elementy poruszające się skutecznie w tandemie. Na szczęście sam CSS zapewnia prostą właściwość, która może sprawić, że (lub złamać) twoje animowane doświadczenie: animacja-opóźnienie.
Załóżmy na przykład, że mamy siatkę obrazów, które chcemy animować w ramce, gdy użytkownik przewija. Możemy to uruchomić na wiele sposobów, najprawdopodobniej dodając klasy do elementów, gdy wchodzą do widoku., Może to być jednak dość ciężka dźwignia w przeglądarce i można jej uniknąć, po prostu dodając jedną klasę do elementu kontenera i definiując opóźnienia animacji dla elementów potomnych.
jest to szczególnie dobry przypadek użycia dla preprocesorów takich jak SCSS lub LESS, które pozwalają nam używać pętli @for do iteracji każdego elementu.
#parent{.child{ animation: animationName 1.5s ease-in-out 1 forwards;@for $i from 1 through 20{ &:nth-of-type(#{$i}){animation-delay:#{$i/10}s; }} }}
tutaj zobaczysz, że dzięki SCSS jesteśmy w stanie zapętlić każdy selektor typu :nth, a następnie zastosować opóźnienie animacji na podstawie wartości numerycznej każdego elementu potomnego., W tym przypadku zauważysz, że dzielimy czas, aby zmniejszyć każdy przyrost do ułamka sekundy. Podczas gdy kompensacja animowanych elementów może wywołać emocje w animacji, zbyt duże opóźnienie może sprawić, że będzie ona chaotyczna. Sprawdź ten kod poniżej.
Squigglevision
- Autor: Adam Kuhn
filtry SVG zapewniają świetny sposób na uzyskanie naturalnego, ręcznie rysowanego wyglądu i uniknięcie niektórych płaskich ograniczeń renderowania samego CSS. Animowanie ich może jeszcze bardziej wzmocnić efekt.
Case in point: Squigglevision., Tak, to nie jest termin techniczny znany większości animatorów, ale na pewno widziałeś go w kreskówkach. Chodzi o to, że krawędzie tych animowanych elementów są nie tylko nieco postrzępione i szorstko wycięte, ale te szorstkie krawędzie szybko się zmieniają, klatka po klatce, sprawiając, że czują się tak, jakby zostały wyrwane ze stron szkicownika i przywrócone do życia.
aby osiągnąć ten efekt, możemy umieścić na naszej stronie plik SVG z wieloma filtrami i niewielkimi zmianami poziomów turbulencji dla każdego z nich. Następnie skonfigurujemy naszą oś czasu animacji, wywołując każdy filtr we własnej klatce kluczowej., Ważne jest, aby bawić się czasem trwania, ponieważ przewidujemy, że animacja będzie „nerwowa”, ale nie chcemy, aby była tak powolna, aby czuć się chaotyczna lub tak szybka, aby czuć się szalona.
w tym celu należy zauważyć, że CSS nie ma możliwości płynnego przechodzenia między filtrami SVG, ponieważ nie ma możliwości dostępu do właściwości takich jak turbulencje i skalowanie, więc tego typu animacje powinny być zawsze niepewne.,
- jak widać na stronie: Garden Eight
- zobacz kod ścieżek i tekstu
- autor: Steven Roberts
strona Garden Eight wykorzystuje wspólną technikę animacji, w której tekst wydaje się być napisany. Aby osiągnąć efekt, przechodzimy do SVG. Na początek utworzymy plik SVG., Istnieją dwa podejścia: Konwertuj tekst na ścieżki w celu ich animacji lub użyj tekstu SVG. Oba podejścia mają swoje plusy i minusy.
zacznij od stworzenia naszej animacji klatki kluczowej. Jedyną funkcją, którą musimy wykonać, jest zmiana stroke-dashoffset. Teraz stworzyliśmy naszą animację, musimy zastosować wartości, z których chcemy animować. Ustawiamy stroke-dasharray, który utworzy luki w obrysie. Chcemy, aby nasz obrys był wystarczająco duży, aby pokryć cały element, a na koniec wyrównać myślnik o długość obrysu.,
magia dzieje się, gdy zastosujemy naszą animację. Animując przesunięcie, Wprowadzamy obrys do widoku-tworząc efekt rysowania. Chcemy, aby elementy rysowały jeden po drugim, z pewnym nakładaniem się między końcem rysowania jednego elementu a początkiem rysowania następnego. Aby to osiągnąć, przechodzimy do Sass / SCSS i n-tego typu, aby opóźnić każdą literę o połowę długości animacji, pomnożonej przez pozycję danej litery.,
latające ptaki
- Jak widać na: Fournier Père et Fils
- zobacz kod dla pojedynczego ptaka lub całego stada
- autor: Steven Roberts
zaczynamy od całkowicie prostych linii wektorowych, rysując każdą klatkę naszej animacji, przedstawiając ptaka w innym stanie lotu. Następnie manipulujemy punktami wektorowymi i zaokrąglamy linie i krawędzie. Na koniec wkładamy każdą ramkę do pudełka o jednakowej wielkości i umieszczamy je obok siebie. Wyeksportuj plik jako SVG.
konfiguracja HTML jest naprawdę prosta., Musimy tylko owinąć każdego ptaka w pojemniku, aby zastosować wiele animacji – jeden, aby ptak latać, a drugi, aby przenieść go po ekranie.
<div class="bird-container"> <div class="bird"></div></div>
stosujemy nasz bird SVG jako tło do naszego bird div I wybieramy rozmiar, jaki chcemy mieć każda klatka. Używamy szerokości, aby z grubsza obliczyć nową pozycję tła. SVG ma 10 komórek, więc mnożymy naszą Szerokość przez 10, a następnie nieznacznie zmieniamy liczbę, aż będzie wyglądać poprawnie.
animacja CSS ma kilka sztuczek, których możesz nie znać., Możemy użyć funkcji animation-timing – aby pokazać obraz w krokach-podobnie jak przesuwanie stron w notatniku, aby nawiązać do animacji.
teraz stworzyliśmy nasz cykl muchowy, nasz ptak obecnie trzepocze skrzydłami, ale nigdzie się nie wybiera. Aby przenieść ją po ekranie, tworzymy kolejną animację klatki kluczowej. Animacja Ta przesunie ptaka po ekranie poziomo, zmieniając jednocześnie pozycję pionową i skalę, aby umożliwić ptakowi bardziej realistyczne meandry.
Po utworzeniu naszych animacji musimy je po prostu zastosować., Możemy utworzyć wiele kopii naszego ptaka i zastosować różne czasy animacji i opóźnienia.
.bird--one { animation-duration: 1s; animation-delay: -0.5s;}.bird--two { animation-duration: 0.9s; animation-delay: -0.75s;}
Cross my hamburger
- Jak widać na stronie: Better Brand Agency
- zobacz kod przęseł i SVG
- autor: Steven Roberts
ta animacja jest używana w całej sieci, zamieniając trzy linie w krzyżyk lub ikonę zamknięcia., Do niedawna większość implementacji została osiągnięta przy użyciu elementów HTML, ale w rzeczywistości SVG jest znacznie bardziej odpowiedni do tego rodzaju animacji – nie ma już potrzeby nadmuchiwania kodu przycisków wieloma zakresami.
ze względu na animowaną naturę i SVG oraz jego nawigowalny DOM, kod do wykonania animacji lub przejścia zmienia się bardzo niewiele – technika jest taka sama.
zaczynamy od utworzenia czterech elementów, czy to wewnątrz div lub ścieżek wewnątrz SVG., Jeśli używamy span, musimy użyć CSS, aby umieścić je wewnątrz div; jeśli używamy SVG, to już się tym zajęliśmy. Chcemy umieścić linie 2 i 3 w środku-jedna na drugiej – a Linie 1 i 4 rozmieścić równomiernie powyżej i poniżej, upewniając się, że punkt wyjścia transformacji jest wyśrodkowany.
będziemy polegać na przejściu dwóch właściwości: krycia i obrotu. Przede wszystkim chcemy zanikać linie 1 i 4, które możemy namierzyć za pomocą selektora :nth-child.,
.menu-icon.is-active {element-type}:nth-child(1),.menu-icon.is-active {element-type}:nth-child(4) { opacity: 0; }
jedyne, co pozostało, to celować w dwie środkowe linie i obracać je o 45 stopni w przeciwnych kierunkach.
Chasing circles
- Jak widać na: Better Brand Agency
- zobacz kod
- autor: Steven Roberts
animowana ikona ładowania składa się z czterech kółek. Okręgi nie mają wypełnienia, ale mają naprzemienne kolory pociągnięć.
w naszym CSS, możemy ustawić kilka podstawowych właściwości dla wszystkich naszych okręgów, a następnie użyć selektora: nth-of-type, aby zastosować inny stroke-dasharray do każdego okręgu.,
następnie musimy stworzyć naszą animację klatki kluczowej. Nasza animacja jest naprawdę prosta: wystarczy obrócić okrąg o 360 stopni. Umieszczając naszą transformację na poziomie 50% animacji, kółko będzie również obracać się z powrotem do swojej pierwotnej pozycji.
@keyframes preloader { 50% { transform: rotate(360deg); } }
Po utworzeniu naszej animacji, musimy ją teraz zastosować do naszych kręgów. Ustawiamy nazwę animacji, czas trwania, liczbę iteracji i funkcję timing. „Łatwość wprowadzania” sprawi, że animacja będzie bardziej zabawna.,
w tej chwili mamy ładowarkę, ale wszystkie elementy obracają się razem w tym samym czasie. Aby to naprawić, zastosujemy pewne opóźnienia. Utworzymy nasze opóźnienia używając pętli Sass for.
@for $i from 1 through 4 { &:nth-of-type(#{$i}) { animation-delay: #{$i * 0.15}s;} }
z powodu opóźnień nasz krąg animuje się po kolei, tworząc iluzję kręgów goniących się nawzajem. Jedynym problemem jest to, że gdy strona po raz pierwszy ładuje się, okręgi są statyczne, a następnie zaczynają się poruszać, po kolei. Możemy osiągnąć ten sam efekt przesunięcia, ale zatrzymać niechcianą pauzę w naszej animacji, po prostu ustawiając opóźnienia na wartość ujemną.,
animation-delay: -#{$i * 0.15}s;
Next page: More CSS animation examples to explore