Снегопад на сайте
Вот уже скоро наступят новогодние праздники и рождество. Медленно падающий пушистый снег является одним из символов наступающего торжества. В данном уроке мы представим очень простую технику CSS для вывода снегопада на вашем сайте. Кроме отличного эффекта вы получите представление о работе с множественными фонами и кадрами анимации в CSS.
Примечание
Поддержка кадров анимации, к сожалению, далека от совершенства. Поэтому, если вы ищете решение, которое будет работать в большом количестве браузеров, вам следует поискать плагин jQuery, например такой. Ну а те, кто хочет расширить свои знания по CSS, могут продолжать чтение урока.
В примерах кода не будут использоваться префиксы браузеров для наглядности.
Использование фона
Нужно подготовить три изображения со снегопадом формата PNG. Пример такого изображения приведен ниже, прозрачный фон заменен черным цветом для наглядности. На нем присутствуют простые круги (можно подключить фантазию и изобразить ажурные снежинки) белого цвета на прозрачном фоне. На всех трех изображениях снежинки надо сделать разных размеров, чтобы потом создавалась иллюзия перспективы.
Данные изображения будут использоваться в качестве фона в CSS.
Применение множественного фона абсолютно идентично единичному. Разница заключается только в том, что вы ставите запятую после URL первого изображения и добавляете еще одно. Вот как будет выглядеть код. Помните, что изображения по умолчанию будут повторяться.
Code
body {
background-color: #6b92b9;
background-image: url('snow1.png'), url('snow2.png'), url('snow3.png');
}
background-color: #6b92b9;
background-image: url('snow1.png'), url('snow2.png'), url('snow3.png');
}
Множественные фоны отлично поддерживаются и беспокоиться стоит только о старых версиях IE. Как и все новое в CSS множественные фоны поддерживаются начиная с версии IE9.
Устанавливаем кадры анимации
Code
@keyframes snow {
0% {background-position: 0px 0px, 0px 0px, 0px 0px;}
100% {background-position: 500px 1000px, 400px 400px, 300px 300px;}
}
0% {background-position: 0px 0px, 0px 0px, 0px 0px;}
100% {background-position: 500px 1000px, 400px 400px, 300px 300px;}
}
"@keyframes” является ключевым словом для определения последовательности кадров, "snow” - имя данной последовательности. Вы можете установить любое понравившееся имя.
Затем мы определяем два кадра анимации. Первый задает вид страницы до начала анимации, второй - после ее завершения. В начале все изображения фона помещаются в верхний левый угол страницы с помощью установки координат "0px 0px”. В конце каждое изображение будет передвинуто в новое положение. Также, как и при определении фона, координаты для каждого изображения просто разделяются запятыми.
Логика позиционирования
Положение каждого изображения в конце анимации кажется выбранным произвольно. Но в действительности все установлено преднамеренно. Чтобы заставить анимацию работать правильно нужно разобраться с несколькими моментами.
Причина, по которой выбраны кадры анимации вместо простого и лучше поддерживаемого свойства transition, заключается в том, что анимация, основанная на кадрах может повторяться бесконечно. Поэтому нужно помнить, что как только анимация закончит воспроизведение последнего кадра, она начнется снова. Если не уделить должного внимания позиционированию, то в момент перехода на экране будет виден рывок кадров.
Трюк заключается в том, чтобы установить размер изображения так, чтобы последний кадр соответствовал первому. В результате получится иллюзия бесконечного плавного движения. Второе изображение имеет размер 400px Х 400px, поэтому второй фон смещается на 400px вниз в ходе анимации. А а третий фон по томуже принципу смещается на 300px. Для первого изображения используется другой трюк. Его нужно смещать несколько быстрее, поэтому его высота удваивается (1000px). Благодаря умножению высоты на целое число, последний кадр соответствует первому.
Таким же образом смещаются изображения и по горизонтали. Создается иллюзия снегопада.
Реализация анимации
Заключительным шагом будет установка в селекторе body свойства "animation”. Первым в нем указано имя последовательности кадров "snow", затем длительность анимации 20 секунд, потом устанавливается функция времени (linear) и завершает определение бесконечного проигрывания.
Code
body {
background-color: #6b92b9;
background-image: url('snow.png'), url('snow3.png'), url('snow2.png');
animation: snow 20s linear infinite;
}
background-color: #6b92b9;
background-image: url('snow.png'), url('snow3.png'), url('snow2.png');
animation: snow 20s linear infinite;
}
Готово!
-
FalleN -
1550 -
1 -
222
Но только нужно ставить наверное на те модули которые обновляться должны не раньше через пару тройку минут
С Уважением, Андрей...