Лого www.SiteHere.ru

3D преобразования и анимация CSS — Урок 1. Вращение

3D преобразования и анимация CSS - Урок 1. Вращение

Вследствие того, что CSS развивается стремительными темпами и создавать анимацию стало еще проще без использования Javascript на многих сайтах появились очень интересные элементы, которыми нельзя не заинтересоваться. В сегодняшнем уроке мы посмотрим как можно создавать анимацию с помощью ключевых кадров (это еще интереснее чем просто с помощью CSS преобразований). Также наша анимация будет находится не просто в одной плоскости, а будет с эффектом 3D. Если вы не знаете для чего и где можно применить такой эффект — переходите в полную новость и там я вам об этом расскажу.

Сегодня мы идем дальше в изучении CSS анимации. Поэтому рекомендую изучить предыдущие уроки «Анимация с помощью CSS преобразований» (эта анимация значительно проще, а изучив ее — здесь вы также с легкостью всё поймете :) ):

Если CSS преобразований из предыдущей серии уроков работали в браузерах Firefox, Chrome, Safari и Internet Explorer 10+, то в при создании 3D анимации она будет работать только в WebKit браузерах и браузере Mozilla. Самые простые преобразования будут работать и в IE10, но что-то более сложное — нет, так как этот браузер не поддерживает параметр preserve-3d для создания 3D слоев.

Анимация CSS

Анимация, которую мы создадим будет содержать в себе изображение, которое вращается вокруг оси Y:

Классно?!

Для тех, у кого нет анимации 😉 :

Немного HTML

Всё понятно и просто в HTML структуре:

1
2
3
<div id="stage"> 
    <p id="spinner">Классно?!</p>
</div>

Ключевые кадры CSS

Что такое ключевые кадры?

В блоке @keyframes находится ряд правил, которые называются ключевыми кадрами. Ключевые кадры содержат свойства, которые применяются в определенный момент времени при анимации. При анимации значения интерполируются («плавно переходят» от одного значения к другому) и мы видим лишь плавный переход.

Вам это может показаться сложным, но это один из самых простых примеров.

Определим начальный и конечный ключевой кадр:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* WebKit и Opera */ 
@-webkit-keyframes spinner { 
    from { 
        -webkit-transform: rotateY(0deg); 
    } 
    to { 
        -webkit-transform: rotateY(-360deg); 
    } 
} 
 
/* Все остальные браузеры */ 
@keyframes spinner { 
    from { 
        -moz-transform: rotateY(0deg); 
        -ms-transform: rotateY(0deg); 
        transform: rotateY(0deg); 
    } 
    to { 
        -moz-transform: rotateY(-360deg); 
        -ms-transform: rotateY(-360deg); 
        transform: rotateY(-360deg);
    } 
}

Кроме ключевых кадров нас также интересует @keyframes spinner, где мы указываем на что будем ссылаться при анимации позже, а именно на spinner.

Создаем сцену

Нам нужен элемент, в котором наша анимация обрела бы объем и появился эффект объема. Сцена, в отличие от вращающегося изображения, зафиксирована на странице.

Для сцены мы будем использовать новое для нас свойство perspective, которое придает глубину. Значение задается в пикселях. Оно определяет расстояние от пользователя до элементов в перспективе. Знаю, это сложно сразу понять :) . Давайте уменьшим с 1200px до 300px и взгляните на результат ниже:

Классно?!

А также видео:

Связываем анимацию с элементом

Сейчас вы увидите еще несколько новых свойств. И я даже не хочу вас сразу заставлять их запоминать сразу и разбираться в значениях. Можно поступить иначе: вы просто на них посмотрите и что поймете, то поймете. На самом деле, изучая дальше уроки вы будете встречать их часто и начнете понимать для чего они. Поэтому не волнуйтесь на счет того, что их много и вы не знаете и не понимаете что-то!

А свойства следующие:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#spinner { 
    width: 250px;
    height: 290px;
    background: url('http://www.sitehere.ru/wp-content/uploads/2014/10/baby-l1.jpg') no-repeat; 
    text-align: center; 
    color: #fff;
    margin:0 auto;
 
 
    -webkit-animation-name: spinner; 
    -webkit-animation-timing-function: linear; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-animation-duration: 6s; 
 
    animation-name: spinner;  /* указываем на ключевые кадры анимации с названием "spinner" */
    animation-timing-function: linear; /* функция синхронизации, с помощью которой будут происходить преобразования */
    animation-iteration-count: infinite; /* количество повторов анимации. "infinite" - значит бесконечно */
    animation-duration: 6s; /* длительность анимации */
 
    -webkit-transform-style: preserve-3d; 
    -moz-transform-style: preserve-3d; 
    -ms-transform-style: preserve-3d; 
    transform-style: preserve-3d; /* указываем что это 3D преобразование */
} 
 
#spinner:hover { 
    -webkit-animation-play-state: paused; 
    animation-play-state: paused; /* останавливаем анимацию */
}

Я подписал свойства без префиксов, потому что те выполняют аналогичные функции, только для других браузеров. Также хочу заметить что мы останавливаем анимацию с помощью специального свойства animation-play-state при наведении на изображение.

Вывод

Возможно и сейчас кто-нибудь может сказать «А где же я на своём сайте могу применить этот эффект?». Первое что пришло мне в голову — это оповещение о каком-либо событии. Согласитесь, когда что-то вращается, да еще и так красиво, оно обязательно привлечет внимание!

Вы можете изменить вращение, редактируя градусы в ключевых кадрах и удивляться как это легко и, в это же время, очень красиво.

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

Успехов!

С Уважением, Юрий Немец

3D преобразования и анимация CSS — Урок 1. Вращение 5.00/5 (100.00%) 2 голос(ов)

Понравилась статья - расскажи друзьям! :)

Из чего состоит любой сайт? HTML
+
CSS
+
JS
Технологии не поддаются обучению?
Комментарии (3) к записи
  • Ирина

    Спасибо автору за статью. Вы, видимо, пропустили код для #stage 

     
    • Юрий

      Здравствуйте, Ирина.

      Код для #stage я не приводил, т. к. в пункте "Создаем сцену" пояснил как ее реализовать.

      Понимаю, что не всё так легко, поэтому вот стили для блока #stage:

      #stage {
          background-color: #ffdce1;
          margin: 1em auto;
          perspective: 1200px;
      }

       

       
  • Ремонт

    Очень интересно! обязательно еще раз к вам загляну!

     

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *