Сделать сайт интереснее: учимся создавать анимацию в CSS3

Роман Андреев

Цель анимации — обратить на себя внимание. Человек замечает любые движения на уровне инстинктов. Если анимация сделана на высоком уровне и гармонично вписывается в дизайн сайта, то она значительно увеличит уровень обратной связи. В нашей статье мы разберем, что такое CSS3-анимация и как ее использовать.

Анимация отличается от стандартных CSS3-переходов. Она основывается на нескольких кадрах, которые воспроизводятся по определенным правилам и повторяются либо на протяжении определенного промежутка времени, либо циклически.

Составляющие CSS3-анимации

CSS3-анимация состоит из ключевых кадров и свойств. Кадры определяют главные этапы и стиль, а свойства представляют собой подключение анимации к элементу сайта и варианты ее запуска. Теперь давайте разберемся подробнее.

Ключевые кадры или @keyframes — основа любой анимации CSS. Они обозначают, как будет выглядеть картинка на каждом этапе времени. Каждый кадр состоит из следующих компонентов:

  • имя;
  • этапы, где 0% — первоначальное состояние, а 100% — заключительное;
  • CSS-свойства, определяющиеся для каждого из этапов.

Давайте создадим самую элементарную анимацию:

@keyframes example {
0% { transform: scale(0.2); opacity: 0; } //элемент прозрачный, масштабируемость до 20 процентов
50% { transform: scale(1.5); opacity: 1; } //элемент проявляется и увеличивается до 150%
100% { transform: scale(1); } //возвращение элемента к стандартному размеру
}

Еще один способ указания начального и конечного кадров — from и to, между которыми указываются проценты.

Важно! Если не указать первый и последний кадры, то браузер будет определять их автоматически, считая, что анимация для них не была задана.

Чтобы подключить класс с анимацией к элементу, можно использовать JavaScript-код, например:

element {
  animation-name: example; //имя для анимации
  animation-duration: 3s; //длительность в секундах (или миллисекундах)
}

В нем мы прописываем, как и при каких условиях должна срабатывать анимация. Подобным образом можно анимировать любой элемент на странице сайта. Для этого достаточно добавить:

div {
  animation-duration: 3s;
  animation-name: example;
}

В сокращенной форме такой код будет выглядеть так:

div { animation: example 3s; }

Для одного и того же элемента можно записывать сразу несколько анимаций, для этого их перечисляют через запятую в той последовательности, в которой они должны запускаться.

Свойства CSS3-анимации

Давайте познакомимся с основным перечнем свойств CSS3-анимации:

  • задержка;
  • запуск и остановка;
  • повторное воспроизведение;
  • состояние до начала анимации и после ее окончания;
  • направление движения.

Помимо основных свойств анимации можно задействовать дополнительные, которые нужны для построения усложненных эффектов.

Задержка анимации: свойство animation-delay

Задержка анимации или animation-delay обозначает, сколько времени пройдет до начала воспроизведения. Свойство прописывается в секундах или миллисекундах:

element {
  animation-name: animation-1;
  animation-duration: 2s;
  animation-delay: 3s; // перед запуском анимации пройдет 3 секунды
}

Повторное воспроизведение анимации: свойство animation-iteration-count

Повторное воспроизведение анимации записывается как animation-iteration-count. Его можно указывать в виде количества повторов анимации, например, 0 или 3 раза.

Также можно зациклить анимацию, сделав ее постоянно воспроизводящейся, для этого в свойстве прописывается infinite.

Фрагмент кода с использованием задержки и повторного воспроизведения будет выглядеть следующим образом:

element {
  animation-name: example;
  animation-duration: 3s;
  animation-delay: 2s;
  animation-iteration-count: infinite; // анимация будет зацикленной
}

Состояние элемента до и после: свойство animation-fill-mode

Следующий параметр CSS3-анимации — состояние элемента до и после. Оно называется animation-fill-mode. Для него после двоеточия можно прописать следующие значения:

  • forwards — означает, что после завершения анимации элемент окажется в состоянии последнего кейфрейма;
  • none — стандартное значение, при котором состояние элемента не изменяется;
  • both — определяет, что перед началом анимации элемент будет в состоянии первого кейфрейма, а после завершения перейдет в последний;
  • backwards — когда анимация завершится, элемент вернется в состояние первого кейфрейма.

Для одной и той же анимации можно использовать разные состояния до и после, получая новые варианты движения.

Синтаксис будет выглядеть следующим образом:

animation-fill-mode: none;
animation-fill-mode: forwards;
animation-fill-mode: backwards;
animation-fill-mode: both;
animation-fill-mode: none, backwards;
animation-fill-mode: both, forwards, none;

Запуск и остановка анимации: animation-play-state

Свойство запуска и остановки анимации прописывается как animation-play-state. Оно принимает лишь два основных варианта значений: running или paused. А также initial — устанавливает значение свойства в значение по умолчанию, и inherit — наследует значение от родительского элемента.

Синтаксис:

animation-play-state: running;
animation-play-state: paused;
animation-play-state: paused, running, running;
animation-play-state: initial;
animation-play-state: inherit;

Направление анимации: свойство animation-direction

Направление анимации или animation-direction определяет направление воспроизведения. Для него существует несколько возможных значений, среди которых:

  • normal — последовательный порядок;
  • alternate — четные повторы в нормальном порядке, а нечетные — в обратном;
  • reverse — обратный порядок;
  • alternate-reverse — нечетные повторы в прямом, а четные — в обратном порядке;
  • initial — устанавливает значение свойства в значение по умолчанию;
  • inherit — наследует значение от родительского элемента.

Использование разных значений для одних и тех же кадров позволит получить несколько вариантов анимации, которые будут различаться между собой.

Синтаксис:

animation-direction: normal;
animation-direction: reverse;
animation-direction: alternate;
animation-direction: alternate-reverse;
animation-direction: normal, reverse;
animation-direction: alternate, reverse, normal;
animation-direction: initial;
animation-direction: inherit;

Функция плавности вывода кадров

Существует специальная функция плавности вывода анимируемых кадров. Она называется animation-timing-function и определяет скорость воспроизведения анимации. По умолчанию значения функции работают так, что анимация запускается медленно, затем увеличивает скорость и к концу вновь замедляется.

На разных этапах воспроизведения анимация имеет разную скорость

Есть несколько значений, которые вы можете использовать в коде:

  • linear — кадры будут сменяться равномерно на протяжении всего времени без каких-либо колебаний;
  • ease — значение, используемое по умолчанию, то есть сначала воспроизводится медленно, затем ускоряется и замедляется к завершению;
  • ease-in / ease-in-out — в первом варианте анимация запускается медленно и плавно, ускоряется к своему завершению, во втором — начинается быстро, а под конец замедляется;
  • step-start / step-end — значения анимации в шагах, для которых изменения запускаются в начале или в конце каждого шага.

Это стандартные значения, при необходимости вы можете создавать подобные самостоятельно. Функция принимает четыре аргумента для построения кривой распределения cubic-bezier(x1, y1, x2, y2). В сети есть сервисы, которые позволяют попрактиковаться в создании собственных вариантов.

Анимацию также можно разделить на комбинацию численных значений, используя ступенчатую временную функцию steps, которая включает в себя количество шагов и направление движения, например:

animation-timing-function: steps(5, end);

В этом случае в анимации будет пять шагов, последний из которых осуществится прямо перед ее окончанием. Вторым параметром функции может быть одно из следующих значений:

  • start;
  • jump-none;
  • end;
  • jump-both.

Они определяют момент, когда начинается анимация. Например, start означает, что анимация будет начинаться вначале шага, а при end, наоборот, в конце с определенной паузой. Используя пошаговую анимацию можно генерировать разные эффекты, такие как отображение процесса загрузки или появляющийся на экране текст.

Кроссбраузерность

CSS3-анимация отлично поддерживается всеми популярными браузерами. Но отдельные из них требуют использование префикса webkit, который нужно прописывать для ключевых кадров и свойств. В таком случае код будет иметь следующий вид:

div {
    -webkit-animation-duration: 2s; 
    animation-duration: 2s; 
    -webkit-animation-name: example; 
    animation-name: example; 
}
@-webkit-keyframes example { /* свойства */ } 
@keyframes example { /* свойства */ }

Для упрощения работы можно попробовать воспользоваться такими технологиями, как Sass, Bourbon, Less.

Заключение

Мы изучили основные этапы создания CSS3-анимации, разобрались в ее привязке к элементам, а также изучили свойства, которые можно использовать в ее составе. Пользуйтесь анимацией и делайте свои страницы живыми и интересными!

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023