0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Вращение объекта на странице - без преувеличения одна из самых полезных функций при разработке анимаций и не только. Этот эффект, будучи простым в понимании, содержит некоторые хитрости, о которых не стоит забывать во время разработки шаблона.</p>
1
<p>Вращение объекта на странице - без преувеличения одна из самых полезных функций при разработке анимаций и не только. Этот эффект, будучи простым в понимании, содержит некоторые хитрости, о которых не стоит забывать во время разработки шаблона.</p>
2
<p>Вращение объекта достигается путём использования функции rotate() свойства transform. В отличие от функции перемещения, вращение не может быть описано пикселями, процентами и другими привычными единицами измерения. Для вращения объекта используются специальные "угловые" единицы, среди которых:</p>
2
<p>Вращение объекта достигается путём использования функции rotate() свойства transform. В отличие от функции перемещения, вращение не может быть описано пикселями, процентами и другими привычными единицами измерения. Для вращения объекта используются специальные "угловые" единицы, среди которых:</p>
3
<ul><li>deg - Градусы. Знакомая многим единица измерения, по которой можно указать, на какой угол повернуть объект относительно его начального положения.</li>
3
<ul><li>deg - Градусы. Знакомая многим единица измерения, по которой можно указать, на какой угол повернуть объект относительно его начального положения.</li>
4
<li>grad - Градианы. Отличительной особенностью такой единицы является количество град на один квадрант - 100. То есть полный круг описывается в 400 град.</li>
4
<li>grad - Градианы. Отличительной особенностью такой единицы является количество град на один квадрант - 100. То есть полный круг описывается в 400 град.</li>
5
<li>rad - Радианы. Мера, при которой за одну единицу принимается угол дуги, длина которой равна радиусу окружности.</li>
5
<li>rad - Радианы. Мера, при которой за одну единицу принимается угол дуги, длина которой равна радиусу окружности.</li>
6
<li>turn - Оборот. Количество оборотов окружности, где единица равна одному полному обороту.</li>
6
<li>turn - Оборот. Количество оборотов окружности, где единица равна одному полному обороту.</li>
7
</ul><p>Не пугайтесь этих единиц, если вы с ними не знакомы. Для большинства действий нет необходимости использовать их все, при этом в каждой единице есть свои плюсы, которые помогут выразительнее использовать функцию rotate(). Для удобства, в этом курсе мы будем использовать только привычные градусы.</p>
7
</ul><p>Не пугайтесь этих единиц, если вы с ними не знакомы. Для большинства действий нет необходимости использовать их все, при этом в каждой единице есть свои плюсы, которые помогут выразительнее использовать функцию rotate(). Для удобства, в этом курсе мы будем использовать только привычные градусы.</p>
8
<p><strong>Важно:</strong>для вращения объекта по часовой стрелке используются положительные значения функции rotate()</p>
8
<p><strong>Важно:</strong>для вращения объекта по часовой стрелке используются положительные значения функции rotate()</p>
9
<p><a>https://codepen.io/hexlet/pen/PopZRYa</a></p>
9
<p><a>https://codepen.io/hexlet/pen/PopZRYa</a></p>
10
<p>Взгляните на наложение элементов. Изменив положение в пространстве, они не стали занимать "особое" положение в потоке документов. Для потока с этими элементами ничего и не случалось. То место, в котором они находились до трансформации всё так же зарезервировано и не занимается другими элементами. Это же пространство так же не изменяется вне зависимости от значений свойства transform. Такое поведение обеспечивает корректность отображения страницы браузерами на случай, если они не поддерживают свойство transform.</p>
10
<p>Взгляните на наложение элементов. Изменив положение в пространстве, они не стали занимать "особое" положение в потоке документов. Для потока с этими элементами ничего и не случалось. То место, в котором они находились до трансформации всё так же зарезервировано и не занимается другими элементами. Это же пространство так же не изменяется вне зависимости от значений свойства transform. Такое поведение обеспечивает корректность отображения страницы браузерами на случай, если они не поддерживают свойство transform.</p>
11
<p>Как и с перемещением, функция rotate() не является единственной функцией для поворота элемента. Существует еще несколько:</p>
11
<p>Как и с перемещением, функция rotate() не является единственной функцией для поворота элемента. Существует еще несколько:</p>
12
<ul><li>rotateX()</li>
12
<ul><li>rotateX()</li>
13
<li>rotateY()</li>
13
<li>rotateY()</li>
14
<li>rotateZ()</li>
14
<li>rotateZ()</li>
15
</ul><p>Про rotateZ() и похожие функции будет подробнее рассказано в темах, посвящённых 3D трансформациям. Работа двух других функций в двумерной области может поначалу запутать. Как это вращать объект только по одной оси? Ответ на этот вопрос будет ближе к концу урока. А сейчас стоит понять, как именно вращаются элементы и можно ли управлять точкой, вокруг которой и произойдёт вращение.</p>
15
</ul><p>Про rotateZ() и похожие функции будет подробнее рассказано в темах, посвящённых 3D трансформациям. Работа двух других функций в двумерной области может поначалу запутать. Как это вращать объект только по одной оси? Ответ на этот вопрос будет ближе к концу урока. А сейчас стоит понять, как именно вращаются элементы и можно ли управлять точкой, вокруг которой и произойдёт вращение.</p>
16
<h2>Точка вращения</h2>
16
<h2>Точка вращения</h2>
17
<p>Если вы попробуете вращать любой HTML-элемент на странице, то cможете заметить, что браузер за точку вращения устанавливает центр элемента. Именно вокруг этой точки и происходит всё вращение. Это позволяет не выходить объекту за пределы своего изначального положения и является самым интуитивным способом. Скорее всего, мысленно, вы сможете перевернуть объект на 90 градусов по часовой стрелке и, еще до трансформации, определить конечный результат преобразования.</p>
17
<p>Если вы попробуете вращать любой HTML-элемент на странице, то cможете заметить, что браузер за точку вращения устанавливает центр элемента. Именно вокруг этой точки и происходит всё вращение. Это позволяет не выходить объекту за пределы своего изначального положения и является самым интуитивным способом. Скорее всего, мысленно, вы сможете перевернуть объект на 90 градусов по часовой стрелке и, еще до трансформации, определить конечный результат преобразования.</p>
18
<p>В следующих примерах ось вращения будет обозначена тёмной точкой в квадрате. Следите за тем, как вращается элемент, но не поддавайтесь гипнозу :)</p>
18
<p>В следующих примерах ось вращения будет обозначена тёмной точкой в квадрате. Следите за тем, как вращается элемент, но не поддавайтесь гипнозу :)</p>
19
<p><a>https://codepen.io/hexlet/pen/QWpGpqR</a></p>
19
<p><a>https://codepen.io/hexlet/pen/QWpGpqR</a></p>
20
<p>Используя CSS мы можем произвольно изменять точку, вокруг которой будет происходить вращение. Для этого используется свойство transform-origin, оно может принимать от одного до трёх значений одновременно. Третье значение отвечает за ось<em>z</em>, и к ней мы вернёмся во время изучения 3D трансформаций. Поведение при указании одного или двух значений следующее:</p>
20
<p>Используя CSS мы можем произвольно изменять точку, вокруг которой будет происходить вращение. Для этого используется свойство transform-origin, оно может принимать от одного до трёх значений одновременно. Третье значение отвечает за ось<em>z</em>, и к ней мы вернёмся во время изучения 3D трансформаций. Поведение при указании одного или двух значений следующее:</p>
21
<ul><li>Одно значение: устанавливается точка по оси<em>x</em>. Значение по оси<em>y</em>будет равняться<em>center</em></li>
21
<ul><li>Одно значение: устанавливается точка по оси<em>x</em>. Значение по оси<em>y</em>будет равняться<em>center</em></li>
22
<li>Два значения: устанавливаются точки по оси<em>x</em>и по оси<em>y</em></li>
22
<li>Два значения: устанавливаются точки по оси<em>x</em>и по оси<em>y</em></li>
23
</ul><p>В качестве значений могут выступать проценты или специальные ключевые слова<em>top</em>,<em>right</em>,<em>bottom</em>,<em>left</em>,<em>center</em>. Добавим для квадрата из примера выше в качестве точки вращения левый верхний угол. Этого можно добиться двумя способами:</p>
23
</ul><p>В качестве значений могут выступать проценты или специальные ключевые слова<em>top</em>,<em>right</em>,<em>bottom</em>,<em>left</em>,<em>center</em>. Добавим для квадрата из примера выше в качестве точки вращения левый верхний угол. Этого можно добиться двумя способами:</p>
24
<ul><li>transform-origin: left top</li>
24
<ul><li>transform-origin: left top</li>
25
<li>transform-origin: 0% 0%</li>
25
<li>transform-origin: 0% 0%</li>
26
</ul><p><a>https://codepen.io/hexlet/pen/ZEeBKOe</a></p>
26
</ul><p><a>https://codepen.io/hexlet/pen/ZEeBKOe</a></p>
27
<p>При использовании процентных значений можно добиться интересных эффектов, так как можно не привязываться к конкретному краю объекта, а разместить точку в любом месте самого объекта.</p>
27
<p>При использовании процентных значений можно добиться интересных эффектов, так как можно не привязываться к конкретному краю объекта, а разместить точку в любом месте самого объекта.</p>
28
<p><a>https://codepen.io/hexlet/pen/BaWQwro</a></p>
28
<p><a>https://codepen.io/hexlet/pen/BaWQwro</a></p>
29
<p>Обратите внимание на последний пример. В нём точка вращения вынесена за пределы самого объекта. Таким образом создается эффект, что объект перемещается не по определённой точке вращения, а вокруг неё. Попробуйте изменять значения, чтобы убедиться в понимании точки вращения объекта.</p>
29
<p>Обратите внимание на последний пример. В нём точка вращения вынесена за пределы самого объекта. Таким образом создается эффект, что объект перемещается не по определённой точке вращения, а вокруг неё. Попробуйте изменять значения, чтобы убедиться в понимании точки вращения объекта.</p>
30
<h2>Вращение по одной оси</h2>
30
<h2>Вращение по одной оси</h2>
31
<p>В самом начале урока говорилось о том, что существуют еще две функции для вращения 2D объектов:</p>
31
<p>В самом начале урока говорилось о том, что существуют еще две функции для вращения 2D объектов:</p>
32
<ul><li>rotateX()</li>
32
<ul><li>rotateX()</li>
33
<li>rotateY()</li>
33
<li>rotateY()</li>
34
</ul><p>Как можно вращать двумерный объект по одной из осей? Добавим вращение по оси<em>x</em>на 360 градусов c точкой вращения по центру</p>
34
</ul><p>Как можно вращать двумерный объект по одной из осей? Добавим вращение по оси<em>x</em>на 360 градусов c точкой вращения по центру</p>
35
<p><a>https://codepen.io/hexlet/pen/WNpoZqj</a></p>
35
<p><a>https://codepen.io/hexlet/pen/WNpoZqj</a></p>
36
<p>Для большей наглядности на объекте используется градиент. Во время изучения трехмерных объектов станет понятнее, что происходит с двумерным объектом. Он действительно крутится только по одной оси. В данном случае наклоняясь вперёд и проходя под осью<em>x</em>. Это похоже на качели, которые раскручивают "солнышком", только мы не видим глубину объекта. Вращение по оси<em>y</em>работает по тому же принципу, только визуально объект будет вращаться вокруг вертикальной оси.</p>
36
<p>Для большей наглядности на объекте используется градиент. Во время изучения трехмерных объектов станет понятнее, что происходит с двумерным объектом. Он действительно крутится только по одной оси. В данном случае наклоняясь вперёд и проходя под осью<em>x</em>. Это похоже на качели, которые раскручивают "солнышком", только мы не видим глубину объекта. Вращение по оси<em>y</em>работает по тому же принципу, только визуально объект будет вращаться вокруг вертикальной оси.</p>
37
<p>У двумерных объектов нет глубины, и именно поэтому визуально происходит скорее деформация объекта, чем его вращение. Такой принцип можно использовать при создании небольших анимаций. Например, используя :hover на кнопке можно изменить угол её положения относительно пользователя. Похожим приёмом можно добиться эффекта трехмерности в двумерной плоскости. Подробнее об анимации будет в следующих курсах, но этот пример уже можно взять на вооружение для создания простых анимаций интерфейсов.</p>
37
<p>У двумерных объектов нет глубины, и именно поэтому визуально происходит скорее деформация объекта, чем его вращение. Такой принцип можно использовать при создании небольших анимаций. Например, используя :hover на кнопке можно изменить угол её положения относительно пользователя. Похожим приёмом можно добиться эффекта трехмерности в двумерной плоскости. Подробнее об анимации будет в следующих курсах, но этот пример уже можно взять на вооружение для создания простых анимаций интерфейсов.</p>
38
<p><a>https://codepen.io/hexlet/pen/wvJoPqq</a></p>
38
<p><a>https://codepen.io/hexlet/pen/wvJoPqq</a></p>
39
<h2>Дополнительное задание</h2>
39
<h2>Дополнительное задание</h2>
40
<p>Используя последний пример с кнопкой, попробуйте изученные свойства трансформации, чтобы увидеть, как будет вести себя объект при наведении. Скорость трансформации можно изменить в свойстве transition.</p>
40
<p>Используя последний пример с кнопкой, попробуйте изученные свойства трансформации, чтобы увидеть, как будет вести себя объект при наведении. Скорость трансформации можно изменить в свойстве transition.</p>
41
<h2>Полезные ссылки</h2>
41
<h2>Полезные ссылки</h2>
42
<ul><li><a>Единица градус</a></li>
42
<ul><li><a>Единица градус</a></li>
43
<li><a>Единица град</a></li>
43
<li><a>Единица град</a></li>
44
<li><a>Единица радиан</a></li>
44
<li><a>Единица радиан</a></li>
45
</ul>
45
</ul>