Ноябрь 4, 2019 Запись была обновлена
3D преобразования и анимация CSS — Урок 1. Вращение
Вследствие того, что CSS развивается стремительными темпами и создавать анимацию стало еще проще без использования Javascript на многих сайтах появились очень интересные элементы, которыми нельзя не заинтересоваться. В сегодняшнем уроке мы посмотрим как можно создавать анимацию с помощью ключевых кадров (это еще интереснее чем просто с помощью CSS преобразований). Также наша анимация будет находится не просто в одной плоскости, а будет с эффектом 3D. Если вы не знаете для чего и где можно применить такой эффект — переходите в полную новость и там я вам об этом расскажу.
Сегодня мы идем дальше в изучении CSS анимации. Поэтому рекомендую изучить предыдущие уроки «Анимация с помощью CSS преобразований» (эта анимация значительно проще, а изучив ее — здесь вы также с легкостью всё поймете 🙂 ):
- Анимация с помощью CSS преобразований. Часть 1 — введение
- Анимация с помощью CSS преобразований. Часть 2 — реальный пример
- Анимация с помощью CSS преобразований. Часть 3 — продвинутая анимация
Если CSS преобразований из предыдущей серии уроков работали в браузерах Firefox, Chrome, Safari и Internet Explorer 10+, то в при создании 3D анимации она будет работать только в WebKit браузерах и браузере Mozilla. Самые простые преобразования будут работать и в IE10, но что-то более сложное — нет, так как этот браузер не поддерживает параметр preserve-3d для создания 3D слоев.
Анимация CSS
Анимация, которую мы создадим будет содержать в себе изображение, которое вращается вокруг оси Y:
Классно?!
Для тех, у кого нет анимации 😉 :
Немного HTML
Всё понятно и просто в HTML структуре:
1 2 3 | <div id="stage"> <p id="spinner">Классно?!</p> </div> |
Ключевые кадры CSS
Что такое ключевые кадры?
В блоке @keyframes находится ряд правил, которые называются ключевыми кадрами. Ключевые кадры содержат свойства, которые применяются в определенный момент времени при анимации. При анимации значения интерполируются («плавно переходят» от одного значения к другому) и мы видим лишь плавный переход.
Вам это может показаться сложным, но это один из самых простых примеров.
Определим начальный и конечный ключевой кадр:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* WebKit и Opera */ @-webkit-keyframes spinner { from { -webkit-transform: rotateY(0deg); } to { -webkit-transform: rotateY(-360deg); } } /* Все остальные браузеры */ @keyframes spinner { from { -moz-transform: rotateY(0deg); -ms-transform: rotateY(0deg); transform: rotateY(0deg); } to { -moz-transform: rotateY(-360deg); -ms-transform: rotateY(-360deg); transform: rotateY(-360deg); } } |
Кроме ключевых кадров нас также интересует @keyframes spinner, где мы указываем на что будем ссылаться при анимации позже, а именно на spinner.
Создаем сцену
Нам нужен элемент, в котором наша анимация обрела бы объем и появился эффект объема. Сцена, в отличие от вращающегося изображения, зафиксирована на странице.
Для сцены мы будем использовать новое для нас свойство perspective, которое придает глубину. Значение задается в пикселях. Оно определяет расстояние от пользователя до элементов в перспективе. Знаю, это сложно сразу понять 🙂 . Давайте уменьшим с 1200px до 300px и взгляните на результат ниже:
Классно?!
А также видео:
Связываем анимацию с элементом
Сейчас вы увидите еще несколько новых свойств. И я даже не хочу вас сразу заставлять их запоминать сразу и разбираться в значениях. Можно поступить иначе: вы просто на них посмотрите и что поймете, то поймете. На самом деле, изучая дальше уроки вы будете встречать их часто и начнете понимать для чего они. Поэтому не волнуйтесь на счет того, что их много и вы не знаете и не понимаете что-то!
А свойства следующие:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #spinner { width: 250px; height: 290px; background: url('https://sitehere.ru/wp-content/uploads/2014/10/baby-l1.jpg') no-repeat; text-align: center; color: #fff; margin:0 auto; -webkit-animation-name: spinner; -webkit-animation-timing-function: linear; -webkit-animation-iteration-count: infinite; -webkit-animation-duration: 6s; animation-name: spinner; /* указываем на ключевые кадры анимации с названием "spinner" */ animation-timing-function: linear; /* функция синхронизации, с помощью которой будут происходить преобразования */ animation-iteration-count: infinite; /* количество повторов анимации. "infinite" - значит бесконечно */ animation-duration: 6s; /* длительность анимации */ -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d; /* указываем что это 3D преобразование */ } #spinner:hover { -webkit-animation-play-state: paused; animation-play-state: paused; /* останавливаем анимацию */ } |
Я подписал свойства без префиксов, потому что те выполняют аналогичные функции, только для других браузеров. Также хочу заметить что мы останавливаем анимацию с помощью специального свойства animation-play-state при наведении на изображение.
Вывод
Возможно и сейчас кто-нибудь может сказать «А где же я на своём сайте могу применить этот эффект?». Первое что пришло мне в голову — это оповещение о каком-либо событии. Согласитесь, когда что-то вращается, да еще и так красиво, оно обязательно привлечет внимание!
Вы можете изменить вращение, редактируя градусы в ключевых кадрах и удивляться как это легко и, в это же время, очень красиво.
Следите за обновлениями на сайте, чтобы не пропустить следующий урок, в котором мы создадим галерею изображений. Вы удивитесь что это также не так и сложно!
Успехов!
С Уважением, Юрий Немец
Спасибо за ваше обращение!
Мы свяжемся с вами в течение 2-х часов (график работы: пн-пт, с 10 до 19)
Спасибо автору за статью. Вы, видимо, пропустили код для #stage
Здравствуйте, Ирина.
Код для #stage я не приводил, т. к. в пункте "Создаем сцену" пояснил как ее реализовать.
Понимаю, что не всё так легко, поэтому вот стили для блока #stage:
Очень интересно! обязательно еще раз к вам загляну!
Спасибо, то что надо
Где применить мы сами придумаем, а вам спасибо за фишку. Мне например нравятся "живые" логотипчики, так что поддерживаю Шокена — То что надо