Подключение и примеры использования animate css. Логотипы на чистом CSS. Плавное изменение цвета элемента при наведении с помощью transition
CSS3 анимация достаточно широко используется. Пришла пора разобраться даже самым начинающих сайтостроителям что же такое CSS анимация и как ее создать. Возможно Вы думаете что CSS3 анимация заключается в том, чтобы заставить двигаться блоки и это похоже на мультфильм. Но CSS анимация это не только перемещение элемента из одной точки в другую, а это еще искажение и другие трансформации. Чтобы это было понятно даже для начинающих — я расписал всё по шагам.
1. Основные свойства CSS3 анимации
Небольшой теоретический блок, из которого Вы поймете какие свойства CSS3 отвечают за анимацию, а также какие значения они могут принимать.
- animation-name — уникальное имя анимации (ключевых кадров, о них поговорим чуть ниже).
- animation-duration — длительность анимации в секундах.
- animation-timing-function — кривая изменения скорости анимации. На первый взгляд очень непонятно. Всегда легче показать на примере, а их Вы увидите ниже. Может принимать следующие значения: linear | ease | ease-in | ease-out | cubic-bezier(n,n,n,n) .
- animation-delay — задержка в секундах перед началом анимации.
- animation-iteration-count — количество повторов анимации. Задается либо просто числом, либо можно указать infinite и анимация будет выполняться бесконечно.
Здесь находятся лишь основные свойства, которых более чем достаточно, чтобы создать свою первую анимацию на CSS3.
Последнее, что нам нужно знать и понимать из теории — это то, как создавать ключевые кадры. Это делать также легко и делается это с помощью правила @keyframes , внутри которого указываются ключевые кадры. Синтаксис этого правила следующий:
Выше мы задали первый и последний кадр. Все промежуточные состояния рассчитаются АВТОМАТИЧЕСКИ!
2. Реальный пример анимации CSS3
Теория как обычно скучна и не всегда понятна. Намного проще увидеть всё на реальном примере, а лучше всего сделать своими руками на какой-нибудь тестовой HTML страничке.
При изучении языка программирования обычно пишут программу "Hello, world!", по которой можно понять какой синтаксис у этого языка и еще какие-нибудь базовые вещи. Но мы изучаем не язык программирования, а язык описания внешнего вида документа. Поэтому у нас будет свой "Hello, world!".
Вот что мы сделаем для примера:
пусть у нас какой-нибудь блок Вроде бы всё понятно — просто нужно сжать блок Сначала HTML разметка. Она очень простая, потому что мы работаем только с одним элементом на странице. А вот что находится в файле стилей: Как видите, мы указали только первый и последний ключевой кадр, а все промежуточные "построились" автоматически. Вот и готова Ваша первая CSS3 анимация. Чтобы закрепить полученные знания — создайте HTML документ и CSS файл, и там вставьте (а лучше руками напечатайте) код из примера. Тогда Вы уж точно всё поймете. Затем попробуйте сделать тоже самое с высотой блока (он должен уменьшаться по высоте), чтобы закрепить материал. Выше Вы узнали как можно легко создать CSS3 анимацию. Если попробовали своими руками это сделать, то уже поняли весь процесс и сейчас хотите узнать как можно создать более сложную и красивую анимацию. А ее создать действительно можно. Ниже есть 3 урока где анимация создается также, как в примере выше. 3 урока по анимации CSS (преобразования) Уроки помогут Вам понять анимацию CSS еще лучше. Главное — это пробовать повторять то, что Вы видите в уроках. Или хотя бы попробуйте изменять значения свойств и смотреть что получается, тогда Вы станете меньше боятся CSS. Все чаще на многих landing page или промо-страничках, можно встретить различные эффекты анимации. Ведь они делают страницу более интересной и привлекательной. В основном эти эффекты задают либо на какое-то событие (клик или наведение на элемент), либо же в момент прокрутки страницы. Я думаю вы встречали такие сайты, когда прокручивая страницу, различные элементы плавно и красиво появляются. Раньше для реализации этих эффектов, приходилось использовать только лишь JS, но развитие не стоит на месте и с выходом CSS3 все эти эффекты можно реализовать на нем. В данном уроке мы с вами познакомимся с очень интересным инструментом под названием animate.css
. Это уже готовая CSS таблица стилей, которая в своем арсенале имеет свыше 50 различных эффектов и все эти эффекты реализованы на CSS3. Чтобы использовать ее, вам достаточно для требуемого элемента задать определенный класс и к этому элементу будет применен эффект анимации. Как я и говорил ранее, данная анимация реализована на CSS3, поэтому эти эффекты будут работать во всех современных браузерах. А теперь давайте более детально познакомимся с animate.css
. Смотреть видеоурок
Если вы все сделали, как описано выше, то в момент загрузки страницы для элемента будет применен данный эффект и все, анимация на этом закончится. Но что делать если вам нужно чтобы анимация продолжалась без остановки? Для этого достаточно добавить еще один класс для нашего анимируемого элемента. Это класс – infinite
. Задаем анимацию при наведении мыши на элемент Смотреть видеоурок
Все описанные ранее примеры, задают анимацию сразу же после загрузки страницы, но на практике это редко бывает нужно. На практике очень часто требуется задавать анимацию при наведении на элемент и поэтому ниже я привел готовый код данной реализации. 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
. В данной подборке собраны самые лучшие и качественные CSS фишки. Тут Вы сможете встретить различные и удивительные демо примеры и техники от знаменитых верстальщиков и дизайнеров, которые стараются доказать, что сейчас возможно сделать практически всё только на чистом CSS. Так же Вы тут сможете встретить несколько уроков в которых подробно рассказывается как сделать подобное творение. Надеюсь, что эта подборка окажется Вам полезной. В этом демо Вы сможете создавать и редактировать причудливые облака в 3D. Данные облака на CSS дают понять нам, что возможности веб технологий практически безграничны. Это примеры логотипов сделанных только на чистом CSS. Вы только вдумайтесь, при создании не использовались изображения. Это просто нечто. Отличный и художественный пример использования CSS в алфавите Простая но очень стильная панель навигации для сайта, конечно же сделанная с помощью только CSS3. никаких изображений и скриптов. Один из многочисленных дудлов от поисковика Google, сделанный на CSS. Это отличный пример качественного использования CSS анимации Хорошо и качественно сделанный слайдер для картинок. Плюс 4 примера в демо. Красивое оанимационное и разноцветное кольцо с не сильно большим кодом CSS Мне кажется очень нужный фильтр, тем более он сделан на чистом CSS. с помощью размытия можно привлечь внимание пользователя к определённой точке. Данная статья о адаптивных блоках Flexbox. В ней рассказывается полностью о данных блоках, правда статья на Английском. Красивое выпадающее меню для сайта с иконками. Огромным плюсом является то, что оно сделано полностью на CSS. Качественный материал на Английском, в котором рассказывается о применении CSS фильтров на изображения. Пост о CSS формах с многочисленными примерами Урок о том как создать стильные прогресс бары на чистом CSS и с анимацией. Также Вы можете посмотреть пример и скачать исходники. Самый популярный проект CSS анимации в интернете на сегодняшний день. И наверное самый простой и качественный, и к тому же бесплатный. Скажу честно данные индикаторы уже встречались на блоге, но мне кажется что их стоит ещё раз Вам показать. Так как это самые красивые индикаторы в интернете на CSS. Сейчас кнопками на CSS уже тяжело удивить, но это довольно достойный вариант Небольшое и качественное интернет приложение, с помощью которого Вы сможете создать красивые переключатели для использования на сайте. CSS библиотека бесплатных всплывающих подсказок — Hint.css Схемы цветов для людей, которые не любят копаться в коде До появления CSS3 при слове «анимация» верстальщиков бросало в холодный пот. А всё потому, что в те времена сделать качественную и красивую анимацию было не тривиальной задачей. CSS этого делать не умел, поэтому все анимации делались на JavaScript. Нужно было перелопатить кучу форумов, найти таких же товарищей по несчастью, потратить уйму времени на разработку, а в итоге услышать от дизайнера: «Ладно, сойдет и так». И когда наконец вышел CSS3, фейерверки не прекращались до утра, а шампанское лилось рекой. Это был знаменательный день для всех web-разработчиков (следующий такой день был, когда Microsoft объявила о прекращении поддержки Internet Explorer). С приходом CSS3 многие ранее сложные задачи превратились в простые и приятные для работы. Это же касается анимаций в CSS, о которых я расскажу в данной статье. CSS transitions позволяют сделать изменения CSS-свойств плавно и в течение некоторого времени. Таким образом, вы получаете возможность контролировать процесс перехода элемента от одного состояния к другому. Начнем с простейшего примера и продолжим дальше. При наведении курсора на квадрат плавно изменяется цвет фона. Теперь подробнее рассмотрим, как управлять переходами в CSS. У нас на вооружении есть всего 5 свойств, которые позволяют контролировать transition-анимацию: transition-property
- указывает список свойств, которые будут анимироваться; свойства, которые здесь не указаны, будут изменяться обычным образом. Можно анимировать все свойства для конкретного элемента, указав значение all. Если вы не указали ни одного свойства, то по умолчанию используется значение all. Transition-property: width;
transition-duration
- задаёт значение продолжительности анимации, время можно указывать в секундах или миллисекундах. Transition-duration: 1s;
transition-timing-function
- временная функция, указывает точки ускорения и замедления за определенный период времени для контроля изменения скорости анимации. Проще говоря, с помощью этого свойства можно указать поведение для анимации. Например, мы можем ускорить анимацию в начале и замедлить в конце, либо наоборот. Для того, чтобы задать процесс анимации используются кривые Безье. Вообще, transition-timing-function позволяет сделать очень много разных поведений для анимаций, это
целая тема для статьи, поэтому здесь мы не будем углубляться. Transition-timing-function: cubic-bezier(0, 0, 1, 1);
transition-delay
- задаёт задержку времени до начала анимации, можно указывать в секундах или миллисекундах. Transition-delay: 500ms;
transition
- это общее свойство, которое позволяет перечислить первые четыре свойства в порядке: property, duration, timing-function, delay. Transition: background-color 1s cubic-bezier(0, 0, 1, 1) 500ms;
У нас получилась вот такая простая анимация: при наведении мышкой на квадрат изменяется ширина; продолжительность анимации одна секунда; анимация воспроизводится по линейной функции; задержка перед началом анимации 500 миллисекунд. С помощью CSS transitions можно анимировать почти все свойства и создавать много интересных, красивых, функциональных и даже сложных анимаций, которые будут дополнять и улучшать ваш проект. Например, я сделал вот такой Material-FAB на чистом CSS, используя transitions: CSS animations позволяют делать более сложные анимации, нежели CSS transitions. Весь секрет в @keyframes. Правило @keyframes позволяет создавать анимацию с помощью набора ключевых кадров, то есть описывает состояние объекта в определенный момент времени. Давайте рассмотрим простой пример. Наш круг ожил и он как будто пульсирует. Есть 9 свойств, которые позволяют контролировать CSS animations: animation-name
- здесь указвается имя анимации, которое связывает правило @keyframes с селектором. Animation-name: my-animation;
@keyframes my-animation {
0% { opacity: 0; }
100% { opacity: 1; }
}
animation-iteration-count
- задаёт количество повторов анимации, значение по умолчанию 1. Значение infinite означает, что анимация будет проигрываться бесконечно. Animation-iteration-count: 2;
animation-direction
- задаёт направление анимации. Animation-direction: reverse;
animation-play-state
- данное свойство управляет остановкой и прогрыванием анимации. Есть два значения, running (анимация проигрывается, по умолчанию) и paused (останавливает анимацию). Animation-play-state: paused;
animation-fill-mode
- устанавливает, какие CSS-свойства будут приминены к объекту до или после анимации. Может принимать такие значения: Animation-fill-mode: backwards;
Свойства animation-duration
, animation-timing-function
, animation-delay
работают так же, как аналогичные свойства в CSS transitions, о которых я писал раньше, поэтому не буду повторяться. С помощью animations CSS можно создавать довольно сложные анимации без использования JavaScript. Яркий пример - это лоадеры, то есть элементы, которые показывают, что на вашей страничке что-то загружается. Вот несколько примеров: Motion Path Module CSS позволяет создавать движение объектов по контуру через специальное свойство motion-path. Раньше такую анимацию можно было сделать только с помощью SVG или сложных скриптов. В этой спецификаии есть 3 свойства: motion-path
- это свойство позволяет указать точки(координаты) по которым будет двигаться объект. Синтаксис такой же как у SVG-атрибута path. Motion-path: path("M 235,323 Q 412,440 365,615 Q 400,300 670,240 L 870,340 L 975,535 Q 730,600 630,535 z");
motion-offset
- это свойство приводит объект в движение от начальной точки до конечной. Оно принимает либо двойное значение длины, либо проценты. Чтобы объект начал двигаться, нужно определить анимацию, которая будет идти от 0 до 100%.
@keyframes airplane-fly {
0% { motion-offset: 0; }
100% { motion-offset: 100%; }
}
motion-rotation
- это свойство позволяет указать, какой стороной вперед будет двигаться объект. Можно указать auto, reverse или свое значение в градусах ("-45deg", "30deg" и т.д). Motion-rotation: auto;
К сожалению, motion-path пока что поддержывается только в Chrome и Opera, но будем надеяться, что остальные браузеры в скором времени возьмут с них пример, ведь штука действительно полезная. Для тех, кто ещё не понял, как это работает, или хочет лучше с этим разобраться, я сделал пример (ссылка на codeopen).
Все современные браузеры, кроме IE9- поддерживают CSS transitions и CSS animations, которые позволяют реализовать анимацию средствами CSS, без привлечения JavaScript. Анимация применяется к любым html-элементам, а также к псевдоэлементам :before
и :after
IE:
10.0 Чтобы воспользоваться анимацией в своём проекте, вам достаточно сделать две вещи: Правило @keyframes
позволяет создавать анимацию с помощью ключевых кадров - состояний объекта в определенный момент времени. Ключевые кадры анимации создаются с помощью ключевых слов from
и to
(эквивалентны значениям 0% и 100%) или с помощью процентных пунктов, которых можно задавать сколько угодно. Также можно комбинировать ключевые слова и процентные пункты. Если не задан начальный (from
, 0%) или конечный (to
, 100%) кадр, браузер установит для них расчётные значения анимируемых свойств такими, какими они были бы если бы не была применена анимация. Если у двух ключевых кадров будут одинаковые селекторы, то последующий отменит действие предыдущего. При определении анимации сразу после свойства @keyframes
должно следовать имя данной анимации (данное имя затем должно быть указано в свойстве animation элемента, который будет анимирован). @keyframes move {
from {
transform: translateX(0px);
}
50% {
transform: translateX(130px);
}
100% {
transform: translateX(0px);
}
} @keyframes move
{
from
{
50%
{
100%
{
transform
:
translateX
(0px
)
;
Мы создали анимацию, которая работает следующим образом: Здесь и далее для удобства я написал в примерах несколько строчек JavaScript, которые будут поочередно добавлять или удалять класс с анимацией на элементе, поэтому для воспроизведения анимации просто кликните по этому элементу.
Ключевые кадры можно группировать: @keyframes move {
from {
transform: translateX(0px);
}
25%, 50% {
transform: translateX(130px);
}
100% {
transform: translateX(0px);
}
} @keyframes move
{
from
{
transform
:
translateX
(0px
)
;
25%, 50%
{
transform
:
translateX
(130px
)
;
100%
{
transform
:
translateX
(0px
)
;
Одному элементу можно назначить несколько анимаций, их имена и параметры надо писать в порядке присвоения: element {
animation-name: animation-1, animation-2;
animation-duration: 2s, 4s;
} element
{
animation-name
:
animation-1,
animation-2
;
animation-duration
:
2s,
4s
;
Подключение анимации к элементу происходит двумя командами — animation-name
и animation-duration
.
Свойство animation-name
задает имя анимации. Рекомендуется использовать название, отражающее суть анимации, при этом можно использовать одно слово или несколько, связанных между собой при помощи пробела — или нижнего подчеркивания _. animation-name: move; Свойство animation-timing-function
позволяет задать специальную функцию, отвечающую за скорость воспроизведения анимации. Обратим внимание, что скорость воспроизведения анимации чаще всего нелинейная, т.е. ее мгновенная скорость в разных участках будет отличаться. На данный момент существует несколько уже встроенных аргументов для этого правила: ease
, ease-in
, ease-out
, ease-in-out
, linear
, step-start
, step-end
. Однако такие функции можно создавать самому. Специальная функция cubic-bezier (P1x, P1y, P2x, P2y);
принимает четыре аргумента и строит на их основе кривую распределения значений в процессе анимации. Потренироваться в создании своих функций и посмотреть как они работают можно на этом сайте . И, наконец, анимацию можно превратить в набор дискретных значений с помощью функции steps
(количество шагов, направление), в качестве аргументов которой задаётся количество её шагов и направление, которое может принимать значения start
или end
. Визуальное сравнение Свойство animation-delay
определяет задержку до начала воспроизведения анимации, задаётся в секундах или миллисекундах. Отрицательная задержка начинает анимацию с определенного момента внутри её цикла, т.е. со времени, указанного в задержке. Это позволяет применять анимацию к нескольким элементам со сдвигом фазы, изменяя лишь время задержки. Если вы хотите, чтобы анимация началась с середины, задайте отрицательную задержку, равную половине времени, установленном в animation-duration
. Не наследуется. element {
animation-name: animation-1;
animation-duration: 2s;
animation-delay: 10s; // Перед стартом этой анимации пройдет 10 сек.
} Свойство animation-iteration-count
позволяет запустить анимацию несколько раз. Не наследуется. В качестве значения выставляем любое положительное значение 1, 2, 3 …
и т.д. либо infinite
для бесконечного повторения. Значение 0
или любое отрицательное число удаляют анимацию из проигрывания. 1
<div
class
=
"toSmallWidth"
>
div
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.toSmallWidth
{
margin
:
20px
auto
;
/*внешние отступы сверху и снизу по 20px и выравнивание по середине*/
background
:
red
;
/*красный фон у блока*/
height
:
100px
;
/*высота блока 100px*/
width
:
800px
;
/*начальная ширина 800px*/
-webkit-animation-name
:
animWidthSitehere;
-webkit-animation-duration
:
5s;
/* свойство с префиксом для браузеров Chrome, Safari, Opera */
animation-name
:
animWidthSitehere;
/* указываем название ключевых кадров (находятся ниже)*/
animation-duration
:
5s;
/*задаем длительность анимации*/
}
/* ключевые кадры с префиксом для браузеров Chrome, Safari, Opera */
@-webkit-keyframes animWidthSitehere {
from {
width
:
800px
;
}
to {
width
:
100px
;
}
}
@keyframes animWidthSitehere {
from {
width
:
800px
;
}
/*первый ключевой кадр, где ширина блока 800px*/
to {
width
:
100px
;
}
/*последний ключевой кадр, где ширина блока 100px*/
}
3. Примеры анимации CSS3 посложнее
Базовая HTML разметка
Бесконечная анимация
Заголовок
HTML
Заголовок
Делаем анимацию при прокрутке страницы
CSS 3D облака
Логотипы на чистом CSS
Алфавит с CSS анимацией
3D навигация для сайта
Дудл от Google на CSS
Слайдер
Двойное анимированное кольцо
Размытие на CSS
Полное руководство по Flexbox
Красочное и анимированное меню на CSS3
CSS фильтры
CSS формы
Прогресс бары на CSS
Анимация — Animate.css
Индикаторы загрузки — Spinkit
Кнопки
Генератор для создания переключателей
Всплывающие подсказки
Цветовые схемы
CSS transitions
CSS animations
Motion Path Module
Поддержка браузерами
Firefox:
16.0, 5.0 -moz-
Chrome:
43.0, 4.0 -webkit-
Safari:
4.0 -webkit-
Opera:
12.1, 12.0 -o-
iOS Safari:
9, 7.1 -webkit-
Opera Mini:
-
Android Browser:
44, 4.1 -webkit-
Chrome for Android:
44Правило @keyframes
Название анимации
Временная функция
Анимация с задержкой
Повтор анимации