CSS3 Анимация с несколькими облаками
Данная CSS3 анимация создается с правилами @ KeyFrames . Облако, как в этом примере, запускается в указанное время различными состояниями или так называемыми ключевыми кадрами. Каждое изображение может иметь, таким образом, различные свойства, такие как размер или положение.
В простейшем случае, анимация создается двумя ключевыми кадрами. Облако движется после загрузки страницы, в пределах 20 секунд от точки А в точку Б, и он будет медленно уменьшаться.
HTML является относительно простым.
<div id="wolken1"> <img src="/bilder/wolke.png" alt="animierte Wolke" title="animierte weiße Wolke" width="140" height="167"> </div>
И связанный CSS3.
#wolken1 { overflow: hidden; height: 13.75em; background: #1f4778; border: 5px solid #eee; box-shadow: 1px 1px 5px 2px #777; margin: 2em; } #wolken1 img { animation: wolken11 20s infinite linear; } @keyframes wolken11 { 0%{transform: scale(1.5) translate3d(-130px,20px,0)} 100%{transform: scale(1) translate3d(620px,20px,0)} }
“overflow: hidden” в “контейнере “DIV” это требуется, чтобы облако было только в кадре. Изображение в контейнере затем вызывает “@keyframes” правило с именем “wolken11” и устанавливает продолжительность анимации на 20 секунд, количество повторений не ограничено (бесконечно) и движется прямолинейно.
Отдельные шаги “@keyframes” правил будут указаны в процентах, от 0% и до 100%. Проценты должны быть заданы относительно заданной длительности.
Облако установлено в масштабе “(1,5) ” при запуске, и достигает нормального размера в конце анимации.Устанавливая “translate3d (х, у, г)” вы определяете направление движения. Первое значение – горизонтальное направлении, второе для вертикального направлении и третье по глубине. 3D-преобразования имеют большое преимущество, они могут быть вычислены с графической карты и, следовательно, работать немного более гладко, чем, например, путем указания “налево”!
#wolke22 { position: absolute; top: 200px; animation: wolken22 20s infinite linear; } @keyframes wolken22 { 0%{left: -130px;transform: scale(1.5)} 100%{left: 620px;transform: scale(1)} }
В следующем примере, три шага определены, а кроме того, перечислен CSS свойство для прозрачности и вертикальное направление изменяется на половину времени . Измените CSS3-линию для первой инстанции, чтобы увидеть это.
@keyframes wolken31 { 0%{opacity: 1;transform: scale(1.5) translate3d(-130px,20px,0)} 50%{opacity: .2;transform: scale(1.5) translate3d(100px,20px,0)} 100%{opacity: 1;transform: scale(1) translate3d(620px,-10px,0)} }
Но для красивого примера нужно больше облаков, и они также должны двигаться с разной скоростью.
Во-первых, div-Container должен быть с “position: relative”, так, что бы можно было каждое облако соответственно позиционировать. И чтобы второе облако начинало движение только через 20 секунд, вы должны с помощью “left: 135px” сделать, так, что облако сначала помещается вне поля зрения контейнера.
Для временной задержки (в данном примере: 20s). Второе облако также получает другую внутреннюю линию в горизонтальной »ScaleX (2)” и слегка поворачивается вправо “rotate (5deg)”. При этом CSS3 выглядит следующим образом:
#wolke41 { position: absolute; animation: wolke41 40s infinite linear; } @keyframes wolke41 { from{transform: scale(2) translate3d(-130px,30px,0)} to{transform: scale(1.5) translate3d(670px,30px,0)} } #wolke42 { position: absolute; left: -135px; animation: wolke42 40s infinite linear 20s; } @keyframes wolke42 { from{transform: scaleX(2) translate3d(-30px,50px,0)} to{transform: scaleX(2.5) rotate(5deg) translate3d(400px,90px,0)} }
Но всегда следует иметь в виду: CSS3 анимации работает не во всех браузерах, и поэтому их следует использовать с осторожностью!
Полная анимация облаков
Для моего облака или “tagcloud” я использую для фона градиент от темно-синего до светло-голубого. При этом каждое облако с различными анимациями, соответствует своему собственному “id-Klasse”.
Строки в HTMLвыглядят так:
<div id="wolken5"> <img src="/bilder/wolke.png" alt="" width="140" height="167" id="wolke51"> <img src="/bilder/wolke.png" alt="" width="140" height="167" id="wolke52"> <img src="/bilder/wolkedunkel.png" alt="" width="140" height="167" id="wolke53"> <img src="/bilder/wolkedunkel.png" alt="" width="140" height="167" id="wolke54"> <img src="/bilder/wolkedunkel.png" alt="" width="140" height="167" id="wolke55"> <img src="/bilder/wolke.png" alt="" width="140" height="167" id="wolke56"> </div>
И соответствующий CSS3.
#wolken5 { position: relative; overflow: hidden; height: 34em; background: linear-gradient(#1f4778,#4584b4); border-radius: 30px; border: 5px solid #eee; box-shadow: 1px 1px 5px 2px #777; margin: 2em; } #wolke51, #wolke52, #wolke53, #wolke54, #wolke55, #wolke56 { position: absolute; } #wolke51 { animation: wolke51 50s infinite linear; } @keyframes wolke51 { from{transform: scale(2) translate3d(-130px,100px,0)} to{transform: scale(1.5) translate3d(670px,100px,0)} } #wolke52 { left: 435px; animation: wolke52 20s infinite linear; } @keyframes wolke52 { from{transform: scale(.01)} to{transform: scale(1.3) rotate(30deg) translate3d(-90px,-130px,0)} } #wolke53 { animation: wolke53 60s infinite linear; z-index: 1; } @keyframes wolke53 { from{transform: scale(1.3) translate3d(-210px,270px,0)} to{transform: scale(1) rotate(10deg) translate3d(720px,120px,0)} } #wolke54 { animation: wolke55 100s infinite linear; } #wolke55 { left: -135px; animation: wolke55 100s infinite linear 50s; } @keyframes wolke55 { from{transform: scaleX(7) translate3d(-80px,350px,0)} to{transform: scaleX(10) translate3d(130px,350px,0)} } #wolke56 { left: -135px; animation: wolke56 40s infinite linear 20s; } @keyframes wolke56 { from{transform: scaleX(2) translate3d(-30px,50px,0)} to{transform: scaleX(2.5) rotate(5deg) translate3d(400px,-40px,0)} }
Таким образом, анимация для облаков закончена.