Мини-туториал по анимации в CSS и HTML5
Рассказываем, как сделать анимацию без использования JavaScript. Пишем страницу авторизации пользователя на CSS и HTML5.
40К открытий44К показов
За годы работы с Front End технологиями мне приходилось работать с разными способами анимации. В этой статье я хочу подробнее разобрать, как работает анимация в CSS без использования JavaScript.
В CSS есть свойство animation, которое позволяет анимировать практически любое свойство HTML элемента. Правило анимации указывается в блоке keyframes.
Свойство animation может быть использовано для анимации других свойств CSS, таких как цвет фона, высота, длинна, положение элемента и многие другие.
Давайте рассмотрим пример, где мы меняем цвет фона у элемента.
Создадим в HTML элемент с классом «element»:
В CSS создаем правило для анимации в блоке keyframes. Назовем анимацию changeColor. Анимация будет менять цвет фона объекта с красного на синий.
Здесь 0% — это начало анимации, 100% — это конец анимации. Все что между движок CSS автоматически анимирует в плавное изменениe свойста, которое вы выбрали. В данном случае будет плавное изменение цвета.
Теперь добавим эту анимацию как свойство animation в CSS стилях для элемента. Наш CSS будет выглядеть таким образом:
Результат данной анимации будет выглядеть так:
{"@context":"http://schema.org","@type":"VideoObject","name":"u041cu0438u043du0438-u0442u0443u0442u043eu0440u0438u0430u043b u043fu043e u0430u043du0438u043cu0430u0446u0438u0438 u0432 CSS u0438 HTML5","description":"u0420u0430u0441u0441u043au0430u0437u044bu0432u0430u0435u043c, u043au0430u043a u0441u0434u0435u043bu0430u0442u044c u0430u043du0438u043cu0430u0446u0438u044e u0431u0435u0437 u0438u0441u043fu043eu043bu044cu0437u043eu0432u0430u043du0438u044f JavaScript. u041fu0438u0448u0435u043c u0441u0442u0440u0430u043du0438u0446u0443 u0430u0432u0442u043eu0440u0438u0437u0430u0446u0438u0438 u043fu043eu043bu044cu0437u043eu0432u0430u0442u0435u043bu044f u043du0430 CSS u0438 HTML5.","thumbnailUrl":"https://media.tproger.ru/uploads/2022/08/4735621_animation_character_design_development_game_icon-cover.png","uploadDate":"2022-08-01T11:27:09+03:00","embedUrl":"https://codepen.io/PavelT/pen/vYRWboG","regionsAllowed":"RU, EU"}
Мы можем контролировать анимацию при помощи дополнительных свойств.
В данном примере после имени анимации мы указали скорость анимации (2s) и количество повторений (в данном случае бесконечное количество повторений infinite).
Существует несколько свойств анимации. Рассмотрим каждый из них:
- animation-name: имя анимации определенным правилом keyframes
- animation-duration: сколько времени займет один цикл анимации от 0% до 100%
- animation-timing-function: определяет кривые ускорения, такие как ease и linear
- animation-delay: время задержки между моментом загрузки элемента в браузере и началом анимации.
- animation-direction: указывает направление анимации. По умолчанию анимация идет от 0% до 100%. С помощью данного свойства можно сделать так, чтобы анимация шла в обратную сторону от 100% до 0% или каждый раз меняла направление.
- animation-iteration-count: количество повторений цикла анимации. Можно установить число или указать infinite для бесконечного повторения анимации.
- animation-fill-mode: устанавливает значение, которое устанавливается до начала или после окончания анимации. Например, можно указать, что после завершения всех циклов анимации фон элемента будет зеленый.
- animation-play-state: проигрывает/ставит на паузу анимацию
Свойства анимации указываются таким образом:
Все эти свойства можно записать и одной строкой:
Свойства анимации могут принимать значения, указанные в таблице:
Правило keyframes может иметь неограниченное количество шагов. Не обязательно только начало и конец. Можно указать значения и для середины цикла анимации:
HTML элементу можно одновременно присвоить несколько анимаций. Давайте добавим нашему элементу анимацию move, которая будет двигать элемент влево и вправо.
Добавим новый блок keyframes
Перечислим анимации через запятую
Результат:
{"@context":"http://schema.org","@type":"VideoObject","name":"u041cu0438u043du0438-u0442u0443u0442u043eu0440u0438u0430u043b u043fu043e u0430u043du0438u043cu0430u0446u0438u0438 u0432 CSS u0438 HTML5","description":"u0420u0430u0441u0441u043au0430u0437u044bu0432u0430u0435u043c, u043au0430u043a u0441u0434u0435u043bu0430u0442u044c u0430u043du0438u043cu0430u0446u0438u044e u0431u0435u0437 u0438u0441u043fu043eu043bu044cu0437u043eu0432u0430u043du0438u044f JavaScript. u041fu0438u0448u0435u043c u0441u0442u0440u0430u043du0438u0446u0443 u0430u0432u0442u043eu0440u0438u0437u0430u0446u0438u0438 u043fu043eu043bu044cu0437u043eu0432u0430u0442u0435u043bu044f u043du0430 CSS u0438 HTML5.","thumbnailUrl":"https://media.tproger.ru/uploads/2022/08/4735621_animation_character_design_development_game_icon-cover.png","uploadDate":"2022-08-01T11:27:09+03:00","embedUrl":"https://codepen.io/PavelT/pen/wvmPOWp","regionsAllowed":"RU, EU"}
Как видите, мы присвоили одному элементу одновременно 2 анимации: движение и смену цветов.
На сайте MDN есть список всех CSS свойств, которые могут быть анимированы.
Практические примеры
Теперь давайте рассмотрим более практические примеры применения CSS анимации, которые используются в веб страницах и веб приложениях.
Анимация спиннера загрузки
Очень часто можно увидеть во время загрузки контента вращающийся спиннер. Давайте создадим такой спиннер при помощи CSS анимации.
{"@context":"http://schema.org","@type":"VideoObject","name":"u041cu0438u043du0438-u0442u0443u0442u043eu0440u0438u0430u043b u043fu043e u0430u043du0438u043cu0430u0446u0438u0438 u0432 CSS u0438 HTML5","description":"u0420u0430u0441u0441u043au0430u0437u044bu0432u0430u0435u043c, u043au0430u043a u0441u0434u0435u043bu0430u0442u044c u0430u043du0438u043cu0430u0446u0438u044e u0431u0435u0437 u0438u0441u043fu043eu043bu044cu0437u043eu0432u0430u043du0438u044f JavaScript. u041fu0438u0448u0435u043c u0441u0442u0440u0430u043du0438u0446u0443 u0430u0432u0442u043eu0440u0438u0437u0430u0446u0438u0438 u043fu043eu043bu044cu0437u043eu0432u0430u0442u0435u043bu044f u043du0430 CSS u0438 HTML5.","thumbnailUrl":"https://media.tproger.ru/uploads/2022/08/4735621_animation_character_design_development_game_icon-cover.png","uploadDate":"2022-08-01T11:27:09+03:00","embedUrl":"https://codepen.io/PavelT/pen/wvmPOgy","regionsAllowed":"RU, EU"}
В этом примере мы использовали анимацию rotate, где зациклили вращение спиннера на 360 градусов.
Далее мы использовали эту анимацию в списке стилей для элемента:
Анимированная форма авторизации
Давайте создадим что-то посложнее. Например анимированную форму авторизации.
Сделаем зацикленную анимацию для кнопки Submit. Добавим анимированный эффект для наведения курсора на кнопку. Сделаем так же анимацию для лейблов Username и Password в момент, когда поля ввода в фокусе.
Подготовим HTML:
Обратите внимание на несколько span в кнопке Submit. Именно их мы потом и будем анимировать.
Добавим статические стили в CSS, чтобы наша форма выглядела красиво:
Теперь добавим анимации. Анимировать мы будем элементы в кнопке Submit.
Добавим 4 блока keyframes с правилами анимации:
Как видно, мы будем использовать 4 анимации по одной для каждого . Наши элементы будут двигаться по очереди вверх, вниз, влево, вправо, создавая иллюзию беспрерывного вращения вокруг кнопки.
Добавим теперь эту анимацию каждому элементу:
Результат:
{"@context":"http://schema.org","@type":"VideoObject","name":"u041cu0438u043du0438-u0442u0443u0442u043eu0440u0438u0430u043b u043fu043e u0430u043du0438u043cu0430u0446u0438u0438 u0432 CSS u0438 HTML5","description":"u0420u0430u0441u0441u043au0430u0437u044bu0432u0430u0435u043c, u043au0430u043a u0441u0434u0435u043bu0430u0442u044c u0430u043du0438u043cu0430u0446u0438u044e u0431u0435u0437 u0438u0441u043fu043eu043bu044cu0437u043eu0432u0430u043du0438u044f JavaScript. u041fu0438u0448u0435u043c u0441u0442u0440u0430u043du0438u0446u0443 u0430u0432u0442u043eu0440u0438u0437u0430u0446u0438u0438 u043fu043eu043bu044cu0437u043eu0432u0430u0442u0435u043bu044f u043du0430 CSS u0438 HTML5.","thumbnailUrl":"https://media.tproger.ru/uploads/2022/08/4735621_animation_character_design_development_game_icon-cover.png","uploadDate":"2022-08-01T11:27:09+03:00","embedUrl":"https://codepen.io/PavelT/pen/zYWPogQ","regionsAllowed":"RU, EU"}
Как видите, мы добились стильной анимации, используя только HTML и CSS.
Заключение
В данной статье мы рассмотрели, как использовать анимацию CSS и HTML без использования JavaScript. Инструментарий предоставляемый CSS очень гибкий: можно использовать его для создания большого количество разных анимаций, где лимитом будет только ваше воображение и здравый смысл. Вот здесь можно посмотреть различные креативные CSS анимации для вдохновения.
40К открытий44К показов