Покадровая (спрайтовая) анимация на CSS. Бегущий Дед Мороз

анимация движения css

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

Анимация движения с помощью CSS

Если говорить о реализации спрайтовой анимации на CSS, то суть такой анимации заключается в следующем:

  1. Несколько изображений располагаются в одном графическом файле.
  2. Чтобы разложить этот графический файл на несколько изображений, применяется ограничение размеров изображения по размеру одного спрайта в атласе.
  3. Далее осуществляется сдвиг background-position, или самой картинки со спрайтами.

Таким образом, один файл может обеспечить иконками весь сайт.

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

Готовая анимация CSS

Например, у нас есть одна картинка бегущего Деда Мороза с 6-ю спрайтами. Давайте на её основе сделаем покадровою анимацию, чтобы этот Дед мороз не просто шевелился (имитировал бег), а ещё и перемещался с левого края экрана до правого.

Пример анимации спрайта на CSS

Код в таком случае будет достаточно простым.

Файл index.html

<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Анимация Спрайта c Дедом Морозом</title>
    <link rel="stylesheet" href="/style.css">
</head>

<body>

    <div class="sprite-container">
        <div class="sprite-image"></div>
    </div>

</body>

</html>

Файл style.css

.sprite-container {
    height: 100vh; /*100% высоты экрана*/
    display: flex;
    align-items: center; /*чтобы картинка была по центру*/
}

.sprite-image {
    height: 50px; /*высота спрайта (высота одного кадра)*/
    width: 50px; /*ширина спрайта (ширина одного кадра)*/
    background: url(img/walk-2.png) 0px 0px; /*картинка со спрайтами с позицией в верхнем левом углу (0px 0px)*/
    animation: play 0.8s steps(6) infinite, /*анимация называется play, скорость анимации 0.8s, нужно сделать 6 шагов (6 кадров), анимация происходит непрерывно (зациклено) - infinite*/
        step 15s linear infinite; /*ещё одна анимация, длительностью 15s, линейный, зацикленый*/
    position: absolute; 
    left: 0;
}

@keyframes play {
    100% {
        background-position: -285px; /*ширина картинки со спрайтами*/
    }
}

@keyframes step {
    100% {
        left: 100%; /*передвижение влево до самого конца*/
    }
}

Чтобы найти спрайт можно использовать поисковый запрос sprite sheet. Просто введите в поле поиска этот запрос, а затем перейдите в раздел "Картинки", чтобы выбрать уже готовые изображения для анимации.

Видео, как делается покадровая анимация CSS

Main Menu