0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Модуль<em>CSS Transform</em>для двумерного пространства предоставляет несколько функций, с помощью которых возможно трансформировать элемент по системе координат:</p>
1
<p>Модуль<em>CSS Transform</em>для двумерного пространства предоставляет несколько функций, с помощью которых возможно трансформировать элемент по системе координат:</p>
2
<ul><li>translate() - перемещение объекта по координатам<em>x</em>и<em>y</em></li>
2
<ul><li>translate() - перемещение объекта по координатам<em>x</em>и<em>y</em></li>
3
<li>rotate() - поворот объекта относительно его центра</li>
3
<li>rotate() - поворот объекта относительно его центра</li>
4
<li>scale() - масштабирование объекта</li>
4
<li>scale() - масштабирование объекта</li>
5
<li>skew() - наклон элемента. В двумерном пространстве функция деформирует элемент</li>
5
<li>skew() - наклон элемента. В двумерном пространстве функция деформирует элемент</li>
6
</ul><p>В этом курсе будут рассмотрены все эти трансформации и особенности их работы. Не пугайтесь, что в уроках может встречаться математика - для простых трансформаций не нужно быть отличником в геометрии.</p>
6
</ul><p>В этом курсе будут рассмотрены все эти трансформации и особенности их работы. Не пугайтесь, что в уроках может встречаться математика - для простых трансформаций не нужно быть отличником в геометрии.</p>
7
<h2>Система координат</h2>
7
<h2>Система координат</h2>
8
<p>Ещё в школе нас учили, что в типичной прямоугольной системе координат положительные значения по оси<em>x</em>идут из центра вправо, а положительные значения по оси<em>y</em>из центра вверх.</p>
8
<p>Ещё в школе нас учили, что в типичной прямоугольной системе координат положительные значения по оси<em>x</em>идут из центра вправо, а положительные значения по оси<em>y</em>из центра вверх.</p>
9
<p>В браузерах же ось<em>y</em>инвертирована и её положительные значения идут из центра вниз. Это важно запомнить, чтобы не запутаться при перемещении объектов. С этой же особенностью вы могли встретиться при использовании свойства top в курсе<a>CSS: Позиционирование</a>.</p>
9
<p>В браузерах же ось<em>y</em>инвертирована и её положительные значения идут из центра вниз. Это важно запомнить, чтобы не запутаться при перемещении объектов. С этой же особенностью вы могли встретиться при использовании свойства top в курсе<a>CSS: Позиционирование</a>.</p>
10
<h3>Точка отсчёта</h3>
10
<h3>Точка отсчёта</h3>
11
<p>Важной особенностью модуля CSS Transform является точка отсчёта, от которой и происходит трансформация. Этой точкой является верхний левый угол<em>объекта</em>. Такое поведение очень похоже на относительное позиционирование, позволяя использовать у одного элемента и возможности абсолютного позиционирования, и относительного.</p>
11
<p>Важной особенностью модуля CSS Transform является точка отсчёта, от которой и происходит трансформация. Этой точкой является верхний левый угол<em>объекта</em>. Такое поведение очень похоже на относительное позиционирование, позволяя использовать у одного элемента и возможности абсолютного позиционирования, и относительного.</p>
12
<p>Любой HTML-объект на странице - прямоугольник, вне зависимости от его внешнего вида. Для примера создадим круг и добавим границу свойством outline, чтобы увидеть реальные границы блока. Точки с координатами<em>(0, 0)</em>находятся в левом верхнем углу элемента.</p>
12
<p>Любой HTML-объект на странице - прямоугольник, вне зависимости от его внешнего вида. Для примера создадим круг и добавим границу свойством outline, чтобы увидеть реальные границы блока. Точки с координатами<em>(0, 0)</em>находятся в левом верхнем углу элемента.</p>
13
<p><a>https://codepen.io/hexlet/pen/XWMmqeP</a></p>
13
<p><a>https://codepen.io/hexlet/pen/XWMmqeP</a></p>
14
<h2>Перемещение объекта</h2>
14
<h2>Перемещение объекта</h2>
15
<p>Для перемещения объекта вдоль осей координат<em>x</em>и<em>y</em>используется функция translate() свойства transform. Это сокращение от двух функций:</p>
15
<p>Для перемещения объекта вдоль осей координат<em>x</em>и<em>y</em>используется функция translate() свойства transform. Это сокращение от двух функций:</p>
16
<ul><li>translateX()</li>
16
<ul><li>translateX()</li>
17
<li>translateY()</li>
17
<li>translateY()</li>
18
</ul><p>которые позволяют перемещать объект по осям<em>x</em>и<em>y</em>соответственно. Синтаксис функции перемещения может иметь разный вид:</p>
18
</ul><p>которые позволяют перемещать объект по осям<em>x</em>и<em>y</em>соответственно. Синтаксис функции перемещения может иметь разный вид:</p>
19
<ul><li>transform: translate(x, y)</li>
19
<ul><li>transform: translate(x, y)</li>
20
<li>transform: translateX(x) translateY(y)</li>
20
<li>transform: translateX(x) translateY(y)</li>
21
</ul><p>Как видно, свойство transform может принимать одновременно несколько функций. Это пригодится при изучении большего количества доступных функций.</p>
21
</ul><p>Как видно, свойство transform может принимать одновременно несколько функций. Это пригодится при изучении большего количества доступных функций.</p>
22
<p><a>https://codepen.io/hexlet/pen/PopPBVY</a></p>
22
<p><a>https://codepen.io/hexlet/pen/PopPBVY</a></p>
23
<p><strong>Важно:</strong>translate() отсчитывается именно от нулевой точки объекта, а не страницы.</p>
23
<p><strong>Важно:</strong>translate() отсчитывается именно от нулевой точки объекта, а не страницы.</p>
24
<p>Обратите внимание на наложение элементов друг на друга при использовании свойства transform. Элемент с данным свойством будет находится выше по оси<em>z</em>, чем другие элементы при прочих равных условиях.</p>
24
<p>Обратите внимание на наложение элементов друг на друга при использовании свойства transform. Элемент с данным свойством будет находится выше по оси<em>z</em>, чем другие элементы при прочих равных условиях.</p>
25
<p><a>https://codepen.io/hexlet/pen/OJpMRby</a></p>
25
<p><a>https://codepen.io/hexlet/pen/OJpMRby</a></p>
26
<h2>Relative VS Translate</h2>
26
<h2>Relative VS Translate</h2>
27
<p>В течение урока может не покидать мысль, а зачем использовать функцию translate(), если давно существует относительное позиционирование и свойства top, right, bottom, left?</p>
27
<p>В течение урока может не покидать мысль, а зачем использовать функцию translate(), если давно существует относительное позиционирование и свойства top, right, bottom, left?</p>
28
<p>С точки зрения визуального эффекта оба подхода дадут одинаковый результат, но, как обычно, дьявол кроется в деталях. Этих дьяволов два:</p>
28
<p>С точки зрения визуального эффекта оба подхода дадут одинаковый результат, но, как обычно, дьявол кроется в деталях. Этих дьяволов два:</p>
29
<ul><li>Использование процентных значений</li>
29
<ul><li>Использование процентных значений</li>
30
<li>Работа с анимациями</li>
30
<li>Работа с анимациями</li>
31
</ul><p>Преимущества использования свойства transform в анимации будет рассмотрено в соответствующем курсе. Если кратко, то браузеры быстрее обрабатывают анимации перемещения с использованием translate(), чем с использованием позиционирования.</p>
31
</ul><p>Преимущества использования свойства transform в анимации будет рассмотрено в соответствующем курсе. Если кратко, то браузеры быстрее обрабатывают анимации перемещения с использованием translate(), чем с использованием позиционирования.</p>
32
<p>При этом разницу использования процентных значений желательно знать в самом начале изучения трансформаций. Это момент, который часто забывается и приводит к потере времени при разработке страницы. В примере ниже находятся два квадрата. Изначально они отцентрированы в своих колонках, после чего применяются следующие свойства:</p>
32
<p>При этом разницу использования процентных значений желательно знать в самом начале изучения трансформаций. Это момент, который часто забывается и приводит к потере времени при разработке страницы. В примере ниже находятся два квадрата. Изначально они отцентрированы в своих колонках, после чего применяются следующие свойства:</p>
33
<ul><li>Квадрат с номером 1: translateX(50%)</li>
33
<ul><li>Квадрат с номером 1: translateX(50%)</li>
34
<li>Квадрат с номером 2: left: 50% с относительным позиционированием</li>
34
<li>Квадрат с номером 2: left: 50% с относительным позиционированием</li>
35
</ul><p><a>https://codepen.io/hexlet/pen/qBrbagz</a></p>
35
</ul><p><a>https://codepen.io/hexlet/pen/qBrbagz</a></p>
36
<p>При прочих равных, оба квадрата сместились на разное количество пикселей вправо относительно своего первоначального положения. Особенность состоит из системы отсчёта, от которой считаются относительные величины этих двух свойств. Для функции translateX() этой системой является сам объект, а для относительно позиционированного элемента - контейнер, в котором он находится. В данном случае получается, что</p>
36
<p>При прочих равных, оба квадрата сместились на разное количество пикселей вправо относительно своего первоначального положения. Особенность состоит из системы отсчёта, от которой считаются относительные величины этих двух свойств. Для функции translateX() этой системой является сам объект, а для относительно позиционированного элемента - контейнер, в котором он находится. В данном случае получается, что</p>
37
<ul><li>Квадрат с номером 1 был сдвинут на<em>100px / 2 = 50px</em>вправо. 100px - это ширина квадрата</li>
37
<ul><li>Квадрат с номером 1 был сдвинут на<em>100px / 2 = 50px</em>вправо. 100px - это ширина квадрата</li>
38
<li>Квадрат с номером 2 был сдвинут на<em>500px / 2 = 250px</em>право. 500px - это ширина контейнера</li>
38
<li>Квадрат с номером 2 был сдвинут на<em>500px / 2 = 250px</em>право. 500px - это ширина контейнера</li>
39
</ul><p>Такие манипуляции могут применяться при позиционировании элементов внутри страницы. Одна из самых распространённых задач - центрирование модального окна. В курсе про позиционирование уже было похожее<a>испытание</a>. Как известно, сделать аккуратное позиционирование используя только абсолютное позиционирование сложно. Есть десятки способов это сделать, но использование связки абсолютного позиционирования и функции translate() - лучший вариант.</p>
39
</ul><p>Такие манипуляции могут применяться при позиционировании элементов внутри страницы. Одна из самых распространённых задач - центрирование модального окна. В курсе про позиционирование уже было похожее<a>испытание</a>. Как известно, сделать аккуратное позиционирование используя только абсолютное позиционирование сложно. Есть десятки способов это сделать, но использование связки абсолютного позиционирования и функции translate() - лучший вариант.</p>
40
<h2>Дополнительное задание</h2>
40
<h2>Дополнительное задание</h2>
41
<p>Решите испытание<a>Позиционирование модального окна</a>используя абсолютное позиционирование и функцию translate().</p>
41
<p>Решите испытание<a>Позиционирование модального окна</a>используя абсолютное позиционирование и функцию translate().</p>