Анимация дерево с листьями

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

asbelous/htmlacademy-simple-animation

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Туториал. Простая анимация на чистом CSS

Мы привыкли использовать CSS по его прямому назначению — для построения сеток и стилизации интерфейсов. И это, бесспорно, основная задача. Но в этом туториале мы рассмотрим, как ещё можно использовать CSS — для создания и анимирования элементов. Чтобы понимать происходящее, достаточно владеть HTML и CSS на базовом уровне.

Начнём всё же с HTML, без него никак. Нам понадобится создать простую разметку для описания будущего дерева.

Рисуют обычно на холсте, и нам он тоже понадобится, поэтому для начала создадим блок .canvas . Внутри этого блока будет находиться непосредственно дерево .tree . У дерева будет ствол .trunk и несколько веток — элементы с классом .branch . По сути ветви — это части ствола, и мы отразим это в разметке, сделав их дочерними элементами блока .trunk . То же самое с листьями — элементы .leaf будут вложены в родительский элемент своей ветки.

Вот так выглядит фрагмент разметки дерева с одной веткой, остальные — по аналогии:

div > div class pl-s">tree"> div class pl-s">trunk"> div class pl-s">branch"> div class pl-s">leaf">div> div class pl-s">leaf">div> div class pl-s">leaf">div> div> div> div> div>

Конечно, пока это просто несколько пустых блоков, но каркас мы уже сформировали. Двигаемся дальше.

Переходим к CSS. Для начала нужно спозиционировать наше будущее дерево на холсте. Сделаем .canvas флекс-контейнером и выровняем вложенный элемент .tree по центру. Также определим размеры холста и зададим ему фоновый цвет.

.canvas < display: flex; justify-content: center; align-items: center; width: 100%; min-height: 600px; background-color: #d1cee0; >

Возможно, вы пока не знакомы с флексбоксами, но это не страшно. Сейчас мы используем их только чтобы отцентровать элемент. Если будет интересно, интерактивный курс про флексбоксы поможет разобраться в теме.

Читайте также:  Ремонт обшить все деревом

Всё, теперь мы точно добрались до рисования.

И ствол, и ветки будут одинакового цвета и формы, поэтому сразу объединим все CSS-свойства, с помощью которых добьёмся нужного эффекта. Цвет зададим с помощью градиента, чтобы элементы казались менее плоскими, а ещё добавим небольшое скругление на концах веток и ствола. Так будет выглядеть код:

.trunk, .branch < border-radius: 25px; background: linear-gradient(to right, #7f3333, #4d2020); >

Чтобы элементы, наконец, отобразились, нужно задать им размеры. Ствол сделаем шириной 10px , а ветки в два раза тоньше — по 5px . Плюс зададим стволу высоту и выровняем его по центру. На следующем шаге мы будем распределять ветки по своим местам на стволе дерева, а для этого нужно задать стволу относительное позиционирование, а веткам — абсолютное. Это позволит задавать положение каждой конкретной ветки относительно ствола свойствами top , right , bottom , left и имитировать рост веток.

trunk < position: relative; width: 10px; height: 500px; margin: 0 auto; > .branch < position: absolute; width: 5px; >

Пришло время нашей заготовке превратиться в то, что действительно будет похоже на дерево.

  1. Для начала часть веток должна быть слева, а другая — справа. Мы будем выбирать нужные ветки с помощью селектора nth-child(even) — для чётных элементов и nth-child(odd) — для нечётный, а затем вращать их с помощью свойства transform и функции rotate на 60 градусов влево и вправо.
.branch:nth-child(even) < transform: rotate(60deg); > .branch:nth-child(odd) < transform: rotate(-60deg); >

Здесь есть одна тонкость. По умолчанию элемент вращается относительно своего центра, а это не то поведение, которое нам нужно от веток. Они должны вращаться относительно нижней точки элемента — места прикрепления к стволу. И есть хорошая новость — мы можем переопределить поведение по умолчанию, используя свойство transform-origin с подходящим значением, тогда ветки будут вращаться относительно своей нижней точки, а не вокруг центра. Добавим элементу .branch нужное свойство в дополнение к уже существующим:

.branch < position: absolute; width: 5px; transform-origin: bottom center; >

Чтобы лучше понять, как работает свойство transform-origin , посмотрите эту демку.

  1. Теперь нам нужно учесть, что ветки расположены несколькими ярусами, и их длина становится тем меньше, чем ближе к верхушке дерева они растут. Укажем для каждой ветки расстояние от верхушки и её длину. Ниже фрагмент кода для первых трёх веток, а дальше зададим значения для остальных веток по аналогии:
.branch:nth-child(1) < top: 180px; height: 180px; > .branch:nth-child(2) < top: 160px; height: 150px; > .branch:nth-child(3) < top: 120px; height: 150px; >

Как видите, мы соблюдаем логику, заложенную природой — ветки выросли из ствола, а листья будут расти из веток. Листья — дочерние элементы, поэтому снова позиционируем их относительно родительского элемента .branch .

.leaf < position: absolute; width: 15px; height: 15px; border-radius: 75% 0 75% 0; background: linear-gradient(to right, #77ed9e, #53ad71); >

Ещё добавили листикам размер и цвет с помощью градиента, а также закруглили края. Осталось расположить каждый ряд на своём уровне, задав свойство top с соответствующими значениями. Вот код для первых двух рядов:

.leaf:nth-child(1) < top: 5px; > .leaf:nth-child(2) < top: 20px; >

На этом с созданием дерева мы закончили, осталось только разместить листочки на своих местах и, наконец, добавить анимацию.

Читайте также:  Обработка деревьев от клея

Давайте для начала выясним, как устроена анимация, и какие CSS-свойства нужны, чтобы её создать.

Для объявления анимации и задания ключевых кадров используется правило @keyframes , после которого указывается название анимации. С помощью ключевых кадров можно задать нужное поведение для элементов на любом этапе. Кадры можно задавать в процентах: например, 0% — это начало анимации, 100% — её конец. Это не единственный способ — можно воспользоваться ключевыми словами from и to , но проценты позволяют задать любое промежуточное состояние. Код нашей анимации:

@keyframes leaf-odd-grow < 0% < transform: scale(0); > 100% < transform: scale(1); > >

Что здесь происходит? Свойство transform мы уже применяли ранее, но теперь используем функцию scale , которая позволяет изменять масштаб элемента. В начале анимации масштаб нулевой (параметр 0 ), а затем он должен увеличиться до обычного масштаба (параметр 1 ). И это именно то, что нужно, чтобы имитировать плавный рост наших листьев.

2. Анимирование элементов: теория

Хорошо, мы создали анимацию, а теперь нам нужно её применить к конкретным элементам. Для этого понадобятся несколько CSS-свойств:

  • animation-name — название анимации. Мы уже задавали название при создании анимации с помощью @keyframes , именно его и нужно указать.
  • animation-duration — длительность анимации. Измеряется в секундах или миллисекундах.
  • animation-delay — задержка анимации. Свойство позволяет установить время между тем моментом, когда анимация была присвоена элементу, и непосредственно началом анимации.
  • animation-fill-mode — состояние элемента до и после анимации. С помощью этого свойства можно контролировать, как будет себя вести элемент до начала анимации и после её завершения. У свойства есть несколько значений.

Это только некоторые свойства, которые понадобятся нам сейчас, но есть и другие. Познакомиться с остальными можно, изучив MDN или курс по анимации.

3. Анимирование элементов: практика

Теперь мы знаем что делать — нужно задать созданную ранее анимацию leaf-odd-grow листочкам, и они начнут расти. Для этого укажем название анимации и её длительность.

.leaf:nth-child(odd) < left: 100%; transform-origin: 0% 100%; animation-name: leaf-odd-grow; animation-duration: 4s; animation-fill-mode: both; >

Но для чего мы задали значение both свойству animation-fill-mode ? По умолчанию после окончания анимации элементы возвращаются в исходное состояние, а в данном случае нам это не нужно. Мы хотим, чтобы исходное состояние анимации было как в первом ключевом кадре ( 0% ), а финальное состояние — как в последнем ( 100% ).

Читайте также:  Собери макулатуру сохрани дерево

Кроме самой анимации в этом фрагменте кода мы задаём положение листков относительно родительского элемента и точку применения трансформации с помощью уже знакомого свойства transform-origin . По умолчанию листки росли бы в центральной точке и увеличивались равномерно во все стороны. Но тогда в начале анимации они бы повисли в воздухе рядом с веткой, что не очень реалистично, поэтому мы переопределили это поведение и заставили их расти от начала ветки.

Возможно, вы обратили внимание, что мы анимировали только нечётные элементы. Для анимации остальных нам понадобится добавить поворот на 90 градусов, чтобы листки росли с обеих сторон ветки. Получается, чётные будут направлены в одну сторону, а нечётные — в другую.

@keyframes leaf-even-grow < 0% < transform: rotate(-90deg) scale(0); > 100% < transform: rotate(-90deg) scale(1); > > .leaf:nth-child(even) < left: -150%; transform-origin: 50% 100%; animation-name: leaf-even-grow; animation-duration: 4s; animation-fill-mode: both; >

Мы создали ещё одну анимацию, теперь чётные элементы будут увеличиваться в размере также, как и нечётные, но плюс к этому они с самого начала анимации будут повёрнуты под нужным углом.

Остался последних штрих — добавим задержку анимации для каждого ряда листьев, чтобы они появлялись не одновременно, а по очереди. Вот эти три листка появятся на концах веток и будут последними, так как у них самая большая задержка. Для всех остальных задержка будет уменьшаться с шагом 0.5s :

.leaf:nth-child(1) < top: 5px; animation-delay: 3.5s; > .leaf:nth-child(2) < top: 20px; animation-delay: 3s; > .leaf:nth-child(3) < top: 50px; animation-delay: 2.5s; >

Весь код анимации, который мы написали в этом туториале, доступен на CodePen.

Возможно, в процессе изучения этой анимации прагматичность не давала вам покоя, и в голове крутилась мысль: зачем это нужно? Есть несколько причин, почему вам может быть это интересно:

  • Подобные анимации позволяют глубже изучить технологии и редкие свойства, а ещё научиться решать нестандартные задачи.
  • Даже таким вроде бы непрактичным анимациям как наше дерево можно найти применение — например, после небольших модификаций сделать лоадер на сайте. Дерево будет расти и отвлекать пользователей, пока обрабатываются запросы к серверу.
  • Иногда это просто захватывающе.

Источник

анимация дерево png

  • Дерево анимации, другие, Разное, ребенок, Форматы файлов изображений png thumbnail836x800px 191.1KB
  • Кустарник Анимация, дерево, лист, трава, цветок png thumbnail960x480px 93.65KB
  • Дерево анимации, дерево, лист, растение стебель, цвет png thumbnail1419x2091px 2.19MB
  • Дерево 3D компьютерной графики Анимация, дерево, 3D Компьютерная графика, растение Стебель, цветок png thumbnail3322x4000px 5.19MB
  • зеленые лиственные деревья иллюстрация коллаж, трехмерное пространство дерево анимации, мультфильм 3D деревья, лист, ветка дерева, завод ствол png thumbnail1024x1024px 566.04KB
  • дом красный гриб рядом с деревом иллюстрации, иллюстрации, анимация кабины, лист, фотография, компьютерные обои png thumbnail800x551px 568.72KB
  • Бочка Вуд Анимация, дерево, фотография, инкапсулированный PostScript, pflock png thumbnail2819x3315px 910.41KB
  • Мультфильм Дерево Анимация, Дерево материал, лист, текст, трава png thumbnail1000x1000px 46.76KB
  • Анимация рисования дерева, Толстое дерево, лист, трава, мультфильм png thumbnail771x900px 99.07KB
  • дом и дерево иллюстрации, мультфильм рисования анимации Dessin animxe9, мультфильм дом, Мультипликационный персонаж, комиксы, лист png thumbnail1938x1830px 57.49KB
  • Японское дерево, мультфильм, анимация, японский мультфильм, комиксы, архитектура, дорога, силуэт, мультфильм, угол, анимация png thumbnail1988x1136px 130.26KB
  • Живопись зеленого дерева, Дерево Анимация Живопись, Деревья, граница, окрашенный, ветвь дерева png thumbnail1181x785px 900.24KB
  • Дерево анимации, винтаж, разное, лист, ветка png thumbnail1200x1200px 668.8KB
  • Арековое дерево Анимация, пальма, лист, филиал, пальма png thumbnail2000x1995px 309.14KB
  • Анимация рендеринга деревьев, арбол, 3D Компьютерная графика, лист, ветка png thumbnail1024x597px 247.81KB
  • водопады возле зеленых лиственных деревьев арт, анимация мультфильмов банок, водопад джунглей, трава, камень, вымышленный персонаж png thumbnail2650x2537px 1.25MB
  • Зеленая трава, дерево, мультфильм, древесные растения, лист, рисунок, растения, анимация, мультфильм, анимация, Рисование png thumbnail1000x1000px 50.61KB
  • Живопись, Рисование, Изба, Мультфильм, Дом, Анимация, Дерево, Maison En Bois, мультфильм, анимация, строительство png thumbnail800x711px 410.06KB
  • Пиксель-арт дерево, Рисование, Вспышка морды, Мультфильм, Спрайт, Анимация, мультфильм, анимация, Рисование png thumbnail1152x1152px 8.71KB
  • дерево, Microsoft PowerPoint шаблон анимации мультфильм, мультфильм дерево кружева границы, бордюр, рамка, компьютерные обои png thumbnail1276x1276px 847.3KB
  • Веточка, ветка, лист, анимация, растение, стебель растения, трава, трава, дерево, анимация, ветка, трава png thumbnail1280x424px 434.61KB
  • Дерево Анимация Рисование, Кабан, лист Овощной, животные, лист png thumbnail516x600px 308.88KB
  • Дерево, Искусство, Иллюстрации, Ствол, Мультфильм, Природа, Дизайн, Творческие, Декоративные, Анимация, png thumbnail698x1280px 142.57KB
  • Рамки из дерева Оконная бумага Анимация, дерево, рамка, прямоугольник, фотография png thumbnail500x500px 337.71KB
  • Мужчина несет женщину возле деревьев, Романтическая пара анимации, Романтические пары, любовь, пара, любовь пара png thumbnail1500x1500px 300.65KB
  • Кошка и собака, Бурундук, Белка, Анимация, Рисование, Белка дерева, Живопись, Усы, мультфильм, животное, анимация png thumbnail512x512px 204.2KB
  • Деньги Анимация Бизнес Инвестиции Финансы, денежное дерево, компания, филиал, завод Стебель png thumbnail518x800px 214.17KB
  • Дерево белки Анимация, Анимация, млекопитающее, фауна, мультфильм png thumbnail576x1166px 851.58KB
  • Дерево анимации, черное дерево, лист, фотография, филиал png thumbnail631x561px 1.35MB
  • Зеленая трава, Дерево, Анимация, Рисование, Мультфильм, Растения, Древесное растение, Лист, мультфильм, анимация, Рисование png thumbnail717x800px 112.46KB
  • Мультфильм дерево рисования анимации, мультфильм дерево дом, Ветвь дерева, пальма, вектор дерева png thumbnail3270x571px 323.18KB
  • Дерево Анимация, дерево, лист, филиал, трава png thumbnail1502x1911px 1.39MB
  • Попугай Lovebird Красивая анимация австралийских птиц, попугай сидит на дереве, акварельная живопись, животные, ветка дерева png thumbnail789x680px 631.48KB
  • дерево и гриб, иллюстрация насекомого анимация, прекрасный материал грибов деревья, любовь, еда, фотография png thumbnail790x906px 222.54KB
  • Кактус, Живопись, Анимация, Зеленый, Растение, Цветочный горшок, Дерево, Стебель растения, мультфильм, анимация, кактус png thumbnail1400x1400px 206.69KB
  • Дерево, Искусство, Иллюстрации, Ствол, Мультфильм, Природа, Дизайн, Творческие, Декоративные, Анимация, png thumbnail640x1280px 107.28KB
  • Розовый цветок, анимация, комиксы, морской анемон, рыба-клоун, растение, пурпурный, дерево, мультфильм, анимация, клоуны png thumbnail1024x882px 247KB
  • Концепт-арт Рисование анимации, 3D деревья, Ветвь дерева, ретро, ​​ветвь png thumbnail564x797px 576.36KB
  • Шоколад, Мультфильм, Анимация, Воздушный змей, Сахар, Комиксы, Живопись, Дерево Какао, печенье, мультфильм, анимация png thumbnail990x983px 55KB
  • Анимация, Сова на дереве, нарисованный, животные, ветка дерева png thumbnail695x703px 721.38KB
  • Вуд бесплатно анимация, кусок дерева, окрашенный, прямоугольник, рука png thumbnail742x800px 155.25KB
  • Анимация дерева, Круглое дерево, фотография, ветка дерева, трава png thumbnail539x720px 154.87KB
  • Елка Анимация Елочное украшение, Мертвое дерево, декор, рождественские украшения, рождественские огни png thumbnail600x600px 66.83KB
  • девушка и мальчик сидят на скамейке, анимация мультфильм пара любовь, свежий милый мультфильм детское сиденье дерева лягушка, ребенок, животные, ветка дерева png thumbnail1023x723px 190.72KB
  • Рисование осенних листьев, графика движения, анимация, компьютерная графика, кленовый лист, дерево, растение, анимация, осень, компьютерная графика png thumbnail568x600px 175.1KB
  • Дерево, Искусство, Ствол, Иллюстрации, Мультфильм, Природа, Дизайн, Творческие, Декоративные, Анимация, png thumbnail1057x1280px 398.75KB
  • Дерево белки Анимация, животные, млекопитающее, животные, фотография png thumbnail1772x1033px 979.93KB
  • Дерево анимации Arecaceae, Пальма, лист, филиал, завод Стебель png thumbnail999x888px 165.16KB
  • Кактус, Рисование, Анимация, Лист, Цветок, Растение, Вазон, Дерево, мультфильм, анимация, кактус png thumbnail2107x2107px 137.04KB
  • Анимация деревьев, арболы, фотография, ветка, анимация png thumbnail597x699px 409.36KB
  • Ветка дерева Цветок Анимация Рисунок, дерево, лист, филиал, растение Стебель png thumbnail744x1000px 368.38KB
  • Дерево, Искусство, Ствол, Иллюстрации, Мультфильм, Природа, Дизайн, Творческие, Декоративные, Анимация, png thumbnail1268x1280px 471.54KB
  • Мультфильм комиксы анимация, мультфильм дерево, лист, текст, плакат png thumbnail2124x2148px 1.76MB
  • Анимация деревьев, арболы, лист Овощной, лист, компьютерные обои png thumbnail1200x630px 310.84KB
  • Tree Cartoon Drawing, Cartoon Tree s, лист, трава, карикатура png thumbnail4810x5122px 1.11MB
  • Дерево, Стол, Стул, Мультфильм, Мебель, Рисование, Анимация, Желтый, мультфильм, анимация, стул png thumbnail623x800px 260.69KB
  • Дерево 3D компьютерной графики Wavefront .obj file Анимация 3D моделирование, арболы, 3D Компьютерная графика, ветка, лиственные png thumbnail750x527px 331.04KB
  • Дерево, Ствол, Природа, Листья, Дизайн, Творческие, Филиалы, Декоративные, Анимация, Графика, png thumbnail1280x802px 455.42KB
  • Сова, Дерево, Анимация, Рисование, Филиал, Лист, Флора, Веточка, мультфильм, анимация, ветка png thumbnail600x600px 183.01KB
  • Рисование дерева, мультфильм, анимация, дом, сжатие данных, дом, здание, завод, мультфильм, анимация, строительство png thumbnail800x630px 468.4KB
  • Источник

    Оцените статью