Программы

Css animation при наведении. Временная функция animation-timing-function

Css animation при наведении. Временная функция animation-timing-function

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

  • CSS анимация. Введение + свойство transition (эта статья)
  • CSS анимация. Кейфреймы (keyframes) — скоро будет
  • Когда и зачем использовать CSS анимации? — скоро будет
  • Что такое CSS анимация?

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

    Анимации в вебе преследуют две основные идеи. Первая идея – оживить что-то . Вы как будто доктор Франкенштейн. У вас есть безжизненный монстр, и вы вдыхаете в него жизнь. Вторая – визуализация движения . И ключевое слово тут именно «движение».

    Как анимировать?

    В CSS есть два основных инструмента при помощи которых мы можем перемещать элементы по веб-странице. Первый (о котором мы еще поговорим сегодня) – свойство transition . В первую очередь именно с его помощью мы создаем анимации в CSS. Второй инструмент – это свойство animation в паре с кейфреймами (@keyframes – ключевые кадры). Этот инструмент мы более подробно остановимся в следующем уроке, а прямо сейчас мы рассмотрим свойство CSS transition. И еще потом мы поговорим о том, что нужно анимировать на странице (когда это нужно пользователю), а что не стоит анимировать (когда анимация выглядит тупо и неуместно), основываясь на пользовательском опыте (UX — user experience).

    Свойство CSS transition – параметры и значения Синтаксис

    Для начала, давайте посмотрим, как читается это свойство, и разберем его синтаксис. Мы пишем это свойство примерно так:

    transition : [свойство ] [длительность ] [тайминг функция ] [задержка ] ;

    transition : height 1s ease-out 0.2s ;

    Мы присваиваем это свойство тому элементу, который мы хотим анимировать. Этот элемент получает плавный переход (или пошаговый) между несколькими своими состояниями (например, высота 100 пикселей и высота 200 пикселей). И то, как будет выглядеть этот переход (с англ. transition), будет зависеть от параметров, которые мы ему зададим.

    Первым параметром (значением) свойства transition является другое свойство анимируемого элемента (например, height ).

    Вторым параметром является длительность (продолжительность) анимации, то есть, сколько времени займет переход элемента из одного состояния в другое (например, 2s или 2000ms).

    Третий параметр – это тайминг функция [timing function ] (изинг функция [easing function ]). То, как интенсивность анимации распределится на протяжении всего времени. Например, анимация может резко начаться, а под конец замедлиться и плавно закончить переход. Могут использоваться как ключевые слова (например, ease, ease- in- out, linear ), так и функции кубика Безье (например, cubic- bezier(0.17, 0.67, 0.83, 0.67) ). Кубик Безье вы можете легко и удобно настраивать на этом ресурсе http://cubic-bezier.com , а также функция steps для того, чтобы создать покадровую анимацию (пошаговую).

    Ну и наконец, параметр задержка . Задержка анимации – это время, которое необходимо подождать, прежде чем анимация (в нашем случае — переход) начнется.

    Пример анимации CSS transition

    Давайте рассмотрим такой пример CSS анимации:

    transition: opacity 300ms ease-in-out 1s;

    Тут мы анимируем только свойство opacity (непрозрачность). Это означает, что если у элемента, который мы собираемся анимировать, есть и другие свойства, например, высота, ширина или цвет, и даже, если эти свойства отличаются в разных состояниях элемента, то плавный переход (анимация) будет только у свойства opacity. Понимаете?

    Вместо конкретного свойства можно использовать также ключевое слово «all ». Это означает, что мы анимируем абсолютно все свойства элемента, которые были изменены в новом состоянии элемента (а не только opacity), и которые вообще можно анимировать. Потому что, как вам известно, не все свойства можно анимировать. Но об этом немного позже.

    Второй параметр (300 ms ) говорит нам о том, что анимация продлится всего 300 миллисекунд. То есть элемент быстро появится или быстро растворится, в зависимости от значений свойств в двух его состояниях.

    Тайминг функция (ease- in- out ) третьим параметром сделает начало и конец анимации более плавными.

    Задержка (1 s ) показывает на сколько должна опоздать анимации перед ее срабатыванием.

    В общем-то, это и есть формула того, как мы будем записывать transition анимацию. Это синтаксис. Вы, если что, можете добавлять больше чем один переход [свойств] для одного элемента. Например, вы можете анимировать с разными параметрами изменение высоты и ширины элемента. Для этого в свойстве transition вместо точки с запятой в конце ставьте просто запятую и пишите параметры для еще одного свойства. И не забудьте потом поставить точку с запятой в конце, чтобы все заработало.

    Что можно анимировать в CSS?

    Пока мы только обсудили синтаксис свойства transition. Теперь давайте поговорим о свойствах, какие из них мы можем анимировать, а какие нет. Потому что есть некоторые вещи, которые просто не имеет смысла анимировать, а некоторые свойства анимировать просто невозможно.

    Анимируемые свойства

    Взять, к примеру, такие свойства, как:

  • font-size;
  • background-color;
  • width;
  • left (на какое расстояние от левой стороны элемент может быть перемещен [спозиционирован]…
  • Очевидно, анимировать эти свойства имеет смысл. Если вы измените их значения, это изменит элемент визуально. Если вы измените размер шрифта, скажем, с 14 до 28 пикселей, вы увидите, что шрифт плавно увеличился, произошла анимация, которая длилась какое-то время. Анимация всегда имеет смысл, если значение свойств это четкие (чаще всего числовые) значения. Если вы увеличите размер шрифта до 100 пикселей, то вы явно увидите, как буквы растут. Плавное изменение цвета фона также можно пронаблюдать [потому что цвет в вебе имеет числовой код, например, красный rgb(255,0,0) ]. Эти свойства являются анимируемыми.

    Вообще запомните, если вы представить, что это анимируется – значит это можно анимировать. Чаще всего это работает.

    Не анимируемые свойства

    А вот список свойств, которые нельзя анимировать (пример):

  • display;
  • font-family;
  • position…
  • Это некоторые из них, которые я взял в качестве примера для того, чтобы вы могли почувствовать разницу между анимируемыми и не анимируемыми свойствами CSS.

    Возьмем display. Можете ли вы представить, как визуально будет происходить изменение между «display: block;» и «display: inline- block; »? Как может плавно измениться внешний вид элемента между «position: relative; » и «position: absolute; »? Нет, конечно же, элемент будет выглядеть иначе при изменении этих свойств. Но как вы можете представить себе переход ? Вы не можете этого сделать. Верно? Вы не можете представить себе превращение шрифта Helvetica в шрифт Georgia , каждой буквы, это просто не сработает. Вы можете изменить эти шрифты, но они резко изменятся, никакой анимации не произойдет.

    Производительность анимации в CSS

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

    В общем вот вещи, которые наиболее хорошо подходят для анимации:

  • Позиционирование на странице
  • Масштабирование
  • Вращение
  • Прозрачность
  • Причем, первые три пункта этого списка, это все параметры свойства transform (translate, scale, rotate). Позиционирование происходит по осям X и Y.

    Если вы решите анимировать еще что либо, вы рискуете не получить мягкий и плавный переход 60 кадров в секунду. Paul Lewis & Irish

    А это именно то, что нас интересует, когда мы говорим о производительности анимации. В общем, самые подходящие свойства для анимации это transform и opacity . При анимировании чего либо другого, fps анимации может упасть гораздо ниже 60fps.

    Давайте резюмируем этот пункт следующим. Старайтесь избегать перерисовки элементов на веб странице и анимации элементов, которые браузеру сложно отрендерить (например, тени).

    Как сделать анимацию в CSS?

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

    Это не сложно и для этого есть много разных способов. Но есть 2 основных, которые вы должны освоить в обязательном порядке. Первый способ – это анимация при наведении на элемент (псевдокласс:hover). Вы наводите курсор мыши на элемент, и срабатывает анимация. Таким образом можно анимировать сам элемент или любой из его дочерних элементов. Потом я покажу вам, как это работает. Второй способ – это изменение класса элемента . То есть у вас есть обычный элемент, вы меняете (или добавляете) его класс на класс, который имеет совсем другие стили. Если добавить класс произойдет анимация, и если убрать класс, произойдет обратная анимация. Это хороший способ для анимирования меню или выпадающих списков.

    Послесловие

    Мы рассмотрели все, что нам нужно для создания анимации на чистом CSS. Совсем скоро мы разберем практические примеры, а чуть позже – очень интересные примеры.

    Вы дочитали до самого конца?

    Была ли эта статься полезной?

    Да Нет

    Что именно вам не понравилось? Статья была неполной или неправдивой?
    Напишите в клмментариях и мы обещаем исправиться!

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

    В основном эти эффекты задают либо на какое-то событие (клик или наведение на элемент), либо же в момент прокрутки страницы. Я думаю вы встречали такие сайты, когда прокручивая страницу, различные элементы плавно и красиво появляются.

    Раньше для реализации этих эффектов, приходилось использовать только лишь JS, но развитие не стоит на месте и с выходом CSS3 все эти эффекты можно реализовать на нем.

    В данном уроке мы с вами познакомимся с очень интересным инструментом под названием animate.css . Это уже готовая CSS таблица стилей, которая в своем арсенале имеет свыше 50 различных эффектов и все эти эффекты реализованы на CSS3.

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

    А теперь давайте более детально познакомимся с animate.css .

    Базовая HTML разметка

    Смотреть видеоурок

    • bounce
    • flash
    • pulse
    • rubberBand
    • shake
    • swing
    • wobble
    • bounceIn
    • bounceInDown
    • bounceInLeft
    • bounceInRight
    • bounceInUp
    • bounceOut
    • bounceOutDown
    • bounceOutLeft
    • bounceOutRight
    • bounceOutUp
    • fadeIn
    • fadeInDown
    • fadeInDownBig
    • fadeInLeft
    • fadeInLeftBig
    • fadeInRight
    • fadeInRightBig
    • fadeInUp
    • fadeInUpBig
    • fadeOut
    • fadeOutDown
    • fadeOutDownBig
    • fadeOutLeft
    • fadeOutLeftBig
    • fadeOutRight
    • fadeOutRightBig
    • fadeOutUp
    • fadeOutUpBig
    • flipInX
    • flipInY
    • flipOutX
    • flipOutY
    • lightSpeedIn
    • lightSpeedOut
    • rotateIn
    • rotateInDownLeft
    • rotateInDownRight
    • rotateInUpLeft
    • rotateInUpRight
    • rotateOut
    • rotateOutDownLeft
    • rotateOutDownRight
    • rotateOutUpLeft
    • rotateOutUpRight
    • hinge
    • rollIn
    • rollOut
    • zoomIn
    • zoomInDown
    • zoomInLeft
    • zoomInRight
    • zoomInUp
    • zoomOut
    • zoomOutDown
    • zoomOutLeft
    • zoomOutRight
    • zoomOutUp
    • slideInDown
    • slideInLeft
    • slideInRight
    • slideInUp
    • slideOutDown
    • slideOutLeft
    • slideOutRight
    • slideOutUp
    Бесконечная анимация

    Если вы все сделали, как описано выше, то в момент загрузки страницы для элемента будет применен данный эффект и все, анимация на этом закончится.

    Но что делать если вам нужно чтобы анимация продолжалась без остановки?

    Для этого достаточно добавить еще один класс для нашего анимируемого элемента. Это класс – infinite .

    Заголовок

    Задаем анимацию при наведении мыши на элемент

    Смотреть видеоурок

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

    HTML

    HTML разметка у нас немного поменялась, теперь нам не надо задавать класс, который отвечает за конкретную анимацию. Это значение нам нужно указывать в специальном атрибуте data-effect . Обратите на это внимание, это очень важно.

    Заголовок

    Вот небольшой код на jQuery , который будет отслеживать событие наведения курсора мыши на элемент и в случае возникновения данного события, скрипт добавит к нему класс, значение которого прописано в атрибуте data-effect . За счет добавления этого класса будет применена анимация.

    Function animate(elem){ var effect = elem.data("effect"); if(!effect || elem.hasClass(effect)) return false; elem.addClass(effect); setTimeout(function(){ elem.removeClass(effect); }, 1000); } $(".animated").mouseenter(function() { animate($(this)); });

    Естественно данный скрипт вы можете изменить как угодно, к примеру, вы можете поменять в нем событие mouseenter на click . Тогда в этом случае анимация будет происходить не в момент наведения мыши на элемент, а в момент клика.

    Делаем анимацию при прокрутке страницы

    Смотреть видеоурок

    Ну и напоследок давайте разберем еще один пример, где вы с легкостью можете применять animate.css .

    А именно вы можете задавать различные эффекты для элементов при прокрутке страницы. Для этих целей помимо animate.css , нам потребуется еще специальный скрипт wow.js .

    | 18.02.2016

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

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

    Для более детального ознакомления вы можете скачать архив с файлами.

    Все эффекты работают с помощью свойства transition (англ. transition - «переход», «превращение») и псевдокласса:hover , который определяет стиль элемента при наведении на него курсора мыши ( в нашем учебнике). Для наших примеров мы использовали блок div размером 500×309 пикселей, исходный цвет фона #6d6d6d и длительность перехода от одного состояния к другому 0,3 секунды.

    Body > div { width: 500px; height: 309px; background: #6d6d6d; -webkit-transition: all 0.3s ease;; -moz-transition: all 0.3s ease;; -o-transition: all 0.3s ease;; transition: all 0.3s ease; }

    1. Изменение цвета при наведении курсора

    Когда-то реализация такого эффекта была довольно кропотливой работой, с математическими вычислениями определенных значений RGB. Сейчас же достаточно записать стиль CSS, в котором необходимо добавить к селектору псевдокласс:hover и задать фоновый цвет, который плавно (за 0,3 секунды) заменит собой исходный цвет фона при наведении курсора на блок:

    Color:hover { background:#53ea93; }

    2. Появление рамки

    Интересная и яркая трансформация - внутренняя рамка, плавно появляющаяся при наведении мыши. Хорошо подойдет для украшения различных кнопок. Чтобы добиться такого эффекта, используем псевдокласс:hover и свойство box-shadow с параметром inset (задает тень внутри элемента). Кроме этого, потребуется задать растяжение тени (в нашем случае это 23px) и её цвет:

    Border:hover { box-shadow: inset 0 0 0 23px #53ea93; }

    3. Свинг

    Данная CSS анимация - исключение, т. к. здесь свойство transition не используется. Вместо него мы задействовали:

    • @keyframes - базовую директиву для создания покадровой CSS-анимации, которая позволяет делать т. н. раскадровку и описывать анимацию в виде списка ключевых моментов;
    • animation и animation-iteration-count - свойства для задания параметров анимации (длительность и скорость) и количества циклов (повторов). В нашем случае повтор 1.
    @-webkit-keyframes swing { 15% { -webkit-transform: translateX(9px); transform: translateX(9px); } 30% { -webkit-transform: translateX(-9px); transform: translateX(-9px); } 40% { -webkit-transform: translateX(6px); transform: translateX(6px); } 50% { -webkit-transform: translateX(-6px); transform: translateX(-6px); } 65% { -webkit-transform: translateX(3px); transform: translateX(3px); } 100% { -webkit-transform: translateX(0); transform: translateX(0); } } @keyframes swing { 15% { -webkit-transform: translateX(9px); transform: translateX(9px); } 30% { -webkit-transform: translateX(-9px); transform: translateX(-9px); } 40% { -webkit-transform: translateX(6px); transform: translateX(6px); } 50% { -webkit-transform: translateX(-6px); transform: translateX(-6px); } 65% { -webkit-transform: translateX(3px); transform: translateX(3px); } 100% { -webkit-transform: translateX(0); transform: translateX(0); } } .swing:hover { -webkit-animation: swing 0.6s ease; animation: swing 0.6s ease; -webkit-animation-iteration-count: 1; animation-iteration-count: 1; } 4. Затухание

    Эффект плавного затухания - это, по сути, обычное изменение прозрачности элемента. Анимация создается в два этапа: сначала необходимо установить первоначальное состояние прозрачности 1 - то есть полная непрозрачность, после чего указать её значение при наведении мыши - 0.6:

    Fade { opacity: 1; } .fade:hover { opacity: 0.6; }

    Для противоположного результата поменяйте значения местами:

    5. Увеличение

    Чтобы при наведении курсора блок увеличивался, мы воспользуемся свойством transform и зададим ему значение scale(1.2) . При этом блок увеличится на 20 процентов с сохранением своих пропорций:

    Grow:hover { -webkit-transform: scale(1.2); -ms-transform: scale(1.2); transform: scale(1.2); }

    6. Уменьшение

    Уменьшить элемент так же просто, как и увеличить. Если в пятом пункте для увеличения масштаба нам необходимо было указать значение больше, чем 1, то для уменьшения блока мы просто укажем значение, которое будет меньше единицы, например, scale(0.7) . Теперь при наведении мыши блок будет пропорционально уменьшаться на 30 процентов от своего первоначального размера:

    Shrink:hover { -webkit-transform: scale(0.7); -ms-transform: scale(0.7); transform: scale(0.7); }

    7. Трансформация в круг

    Одна из часто используемых анимаций - прямоугольный элемент, который при наведении курсора преобразовывается в окружность. С помощью свойства CSS border-radius , использованного в паре с:hover и transition , это можно реализовать без проблем:

    Circle:hover { border-radius: 70%; }

    8. Вращение

    Забавный вариант анимации - поворот элемента на определенное количество градусов. Для этого нам снова понадобится свойство transform , но уже с другим значением - rotateZ(20deg) . При таких параметрах блок будет повернут на 20 градусов по часовой стрелке относительно оси Z:

    Rotate:hover { -webkit-transform: rotateZ(20deg); -ms-transform: rotateZ(20deg); transform: rotateZ(20deg); }

    9. 3D тень

    Мнения дизайнеров расходятся в том, уместен ли данный эффект во флэт-дизайне. Тем не менее, эта CSS3 анимация является весьма оригинальной и также используется на веб-страницах. Добиваться трехмерного эффекта будем с помощью уже знакомых нам свойств box-shadow (создаст многослойную тень) и transform с параметром translateX(-7px) (обеспечит сдвиг блока по горизонтали влево на 7 пикселей):

    Threed:hover { box-shadow: 1px 1px #53ea93, 2px 2px #53ea93, 3px 3px #53ea93, 4px 4px #53ea93, 5px 5px #53ea93, 6px 6px #53ea93, 7px 7px #53ea93; -webkit-transform: translateX(-7px); transform: translateX(-7px); }

    Поддержка браузерами

    На сегодняшний день свойство transition поддерживается следующими браузерами:

    Десктопные браузеры
    Internet Explorer Поддерживается версией IE 10 и выше
    Chrome Поддерживается с версии 26 (до версии 25 работает с префиксом -webkit-)
    Firefox Поддерживается с версии 16 (в версиях 4-15 работает с префиксом -moz-)
    Opera Поддерживается с версии 12.1
    Safari Поддерживается с версии 6.1 (в версиях 3.1-6 работает с префиксом -webkit-)

    Остальные свойства, использованные в данных примерах, такие как transform , box-shadow и т. д., также поддерживаются почти всеми современными браузерами. Однако, если вы собираетесь использовать эти идеи для своих проектов, настоятельно рекомендуем перепроверять кроссбраузерность.

    Надеемся, что эти примеры CSS3 анимации были полезными для вас. Желаем творческих успехов!

    У многих посетителей возник вопрос, как же на практике применять библиотеку Animate.css. В действительности всё происходит достаточно просто, надо лишь один раз пройти все этапы, а потом по аналогии повторять некоторые действия.

    1. Для начала следует скачать и подключить библиотеку. Есть три варианта.

    • Полная версия . Содержит более трёх тысяч строк кода объёмом около 60 кБ. Она хорошо подходит на первом этапе ознакомления с анимацией в целом, поскольку позволяет взглянуть, как это всё устроено.
    • Упакованная версия (обфусцированная, говоря профессиональным языком). В css-файле нет табуляции, пробелов и переносов строк. Объём файла за счёт этого сокращается раза в полтора, но читать код при этом становится затруднительно.
    • Выборочные эффекты . Лучше всего подходит для большинства задач, поскольку позволяет указать только понравившиеся эффекты, избавившись от лишнего.

    2. Чтобы применить эффект анимации к желаемому элементу, добавляем к нему два класса - animated и класс с названием эффекта, допустим fadeInDown (список всех эффектов и их названия смотрим ). Например, вы желаете добавить мерцание ко всем изображениям на странице. В HTML записываем следующее:

    Если на сайте используется jQuery, то добавление классов упрощается и делается через JavaScript.

    $(document).ready(function() { $("img").addClass("animated flash"); })

    3. Сама анимация включается автоматически при загрузке страницы. Это удобно для всплывающих сообщений, призванных привлечь внимание пользователя (пример 1).

    Пример 1. Всплывающее сообщение

    Предупреждение .warning { background: #fc0; padding: 10px; border: 1px solid #000; } Зенитное часовое число оценивает экваториальный секстант!

    Чтобы эффект срабатывал при наведении на элемент курсора мыши, придётся использовать JavaScript. В качестве примера рассмотрим картинки, которые двигаются при наведении на них курсора мыши. К тегу добавляем класс animated и подключаем jQuery (пример 2).

    Пример 2. Галерея

    Галерея $(document).ready(function() { $("img.animated").hover(function() { $(this).addClass("bounce"); // Добавляем класс bounce }, function() { $(this).removeClass("bounce"); // Убираем класс })})

    В данном примере при наведении курсора на изображение с классом animated добавляется ещё один класс bounce ; если курсор убрать, то класс bounce также убирается.

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

    Animated { -webkit-animation-duration: .6s; -o-animation-duration: .6s; -moz-animation-duration: .6s; animation-duration: .6s; -webkit-animation-delay: 1s; -o-animation-delay: 1s; -moz-animation-delay: 1s; animation-delay: 1s; }

    Мы недавно видели, что переходы - это просто способ анимации стилевых свойств от исходного до конечного состояния.

    Итак, переходы в CSS являются специфическим видом анимации, где:

    • есть только два состояния: начало и конец;
    • анимация не зациклена;
    • промежуточные состояния управляются только функцией времени.

    Но что если вы хотите:

    • иметь контроль над промежуточными состояниями?
    • зациклить анимацию?
    • сделать разные виды анимаций для одного элемента?
    • анимировать определённое свойство только на половину пути?
    • имитировать различные функции времени для разных свойств?

    Анимация в CSS позволяет всё это, и не только.

    Анимация как мини-фильм, где вы в качестве режиссёра даёте инструкции (стилевые правила) вашим актёрам (элементам HTML) для разных сцен (ключевые кадры).

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

    Как и transition , свойство animation является сокращённым для нескольких других:

    • animation-name : название анимации;
    • animation-duration : как долго длится анимация;
    • animation-timing-function : как вычисляются промежуточные состояния;
    • animation-delay : анимация начинается спустя некоторое время;
    • animation-iteration-count : сколько раз должна выполняться анимация;
    • animation-direction : должно движение идти в обратную сторону или нет;
    • animation-fill-mode : какие стили применяются до начала анимации и после её завершения.
    Быстрый пример

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

    @keyframes bouncing{ 0% { bottom: 0; box-shadow: 0 0 5px rgba(0,0,0,0.5); } 100% { bottom: 50px; box-shadow: 0 50px 50px rgba(0,0,0,0.1); } } .loading-button { animation: bouncing 0.5s cubic-bezier(0.1,0.25,0.1,1) 0s infinite alternate both; }

    Сначала нужно написать реальную анимацию подпрыгивания с помощью @keyframes и назвать её .

    Я использовал сокращенное свойство animation и включил все возможные варианты:

    • animation-name: bouncing (совпадает с названием ключевых кадров)
    • animation-duration: 0.5s (полсекунды)
    • animation-timing-function: cubic-bezier(0.1,0.25,0.1,1)
    • animation-delay: 0s (без задержки)
    • animation-iteration-count: infinite (воспроизводится бесконечно)
    • animation-direction: alternate (идёт назад и вперёд)
    • animation-fill-mode: both
    @keyframes

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

    • 0% - первый шаг анимации;
    • 50% - шаг на полпути в анимации;
    • 100% - последний шаг.

    Можно также использовать ключевые слова from и to вместо 0% и 100%, соответственно.

    Вы можете определить столько ключевых кадров, сколько хотите, вроде 33%, 4% или даже 29.86%. На практике вы будете писать только некоторые из них.

    Каждый ключевой кадр является правилом CSS , это означает, что вы можете писать свойства CSS как обычно.

    Чтобы определить анимацию, просто напишите ключевое слово @keyframes с его названием :

    @keyframes around { 0% { left: 0; top: 0; } 25% { left: 240px; top: 0; } 50% { left: 240px; top: 140px; } 75% { left: 0; top: 140px; } 100% { left: 0; top: 0; } } p { animation: around 4s linear infinite; }

    Обратите внимание, что начало 0% и конец 100% содержат одинаковые правила CSS. Это гарантирует, что анимация зациклится идеально. Поскольку счётчик итераций установлен как infinite , то анимация будет идти от 0% до 100%, а затем немедленно обратно к 0% и так бесконечно.

    animation-name

    Название анимации используется, по крайней мере, дважды :

    • при написании анимации с помощью @keframes ;
    • при использовании анимации с помощью свойства animation-name (или через сокращённое свойство animation ).
    @keyframes whatever { /* ... */ } .selector { animation-name: whatever; }

    Подобно именам классов CSS, название анимации может включать в себя только:

    • буквы (a-z);
    • цифры (0-9);
    • подчёркивание (_);
    • дефис (-).

    Название не может начинаться с цифры или с двух дефисов.

    animation-duration

    Как и длительность перехода , длительность анимации может быть установлена в секундах (1s) или миллисекундах (200ms).

    Selector { animation-duration: 0.5s; }

    Значение по умолчанию равно 0s, что означает отсутствие анимации вообще.

    animation-timing-function

    Подобно функциям времени для переходов , функции времени для анимации могут использовать ключевые слова , такие как linear , ease-out или могут быть определены с помощью произвольных кривых Безье .

    Selector { animation-timing-function: ease-in-out; }

    Значение по умолчанию: ease .

    Поскольку анимация в CSS использует ключевые кадры, вы можете установить линейную функцию времени и моделировать конкретную кривую Безье, определяя множество очень специфичных ключевых кадров. Посмотрите Bounce.js для создания передовой анимации.

    animation-delay

    Как и с задержкой перехода , задержка анимации может быть установлена в секундах (1s) или миллисекундах (200ms).

    По умолчанию равно 0s, что означает отсутствие любой задержки.

    Полезно использовать, когда включается несколько анимаций в серии .

    A, .b, .c { animation: bouncing 1s; } .b { animation-delay: 0.25s; } .c { animation-delay: 0.5s; }

    animation-iteration-count

    По умолчанию, анимация воспроизводится только один раз (значение 1). Вы можете установить три типа значений:

    • целые числа, вроде 2 или 3;
    • дробные числа, вроде 0.5, которые будут воспроизводить только половину анимации;
    • ключевое слово infinite , которое будет повторять анимацию бесконечно.
    .selector { animation-iteration-count: infinite; } animation-direction

    Свойство animation-direction определяет, в каком порядке читаются ключевые кадры.

    • normal : начинается с 0%, заканчивается на 100%, начинается с 0% снова.
    • reverse : начинается со 100%, заканчивается на 0%, начинается со 100% снова.
    • alternate : начинается с 0%, идёт до 100%, возвращается на 0%.
    • alternate-reverse : начинается со 100%, идёт до 0%, возвращается на 100%.

    Это легче представить, если счётчик итераций анимации установлен как infinite .

    animation-fill-mode

    Свойство animation-fill-mode определяет, что происходит перед началом анимации и после её завершения.

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

    animation-fill-mode позволяет сообщить браузеру, если стили анимации также должны применяться за пределами анимации .

    Давайте представим себе кнопку , которая является:

    • красной по умолчанию;
    • становится синей в начале анимации;
    • и в итоге зелёной , когда анимация завершена.