0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Сегодня много способов создать 3D на странице, но CSS позволяет это сделать "нативно", то есть без применения сторонних плагинов. В оставшихся уроках этого курса мы рассмотрим все, что связано с трансформациями в трехмерном пространстве. От создания элементов, до их искажений.</p>
1
<p>Сегодня много способов создать 3D на странице, но CSS позволяет это сделать "нативно", то есть без применения сторонних плагинов. В оставшихся уроках этого курса мы рассмотрим все, что связано с трансформациями в трехмерном пространстве. От создания элементов, до их искажений.</p>
2
<p>Чем двухмерный объект отличается от трехмерного? Если говорить с точки зрения науки, то появляется новая ось координат. В прошлых уроках мы производили трансформации только по двум осям:<em>x</em>и<em>y</em>. В трехмерном пространстве появляется дополнительная ось<em>z</em>, благодаря которой мы можем добавить глубины объекту.</p>
2
<p>Чем двухмерный объект отличается от трехмерного? Если говорить с точки зрения науки, то появляется новая ось координат. В прошлых уроках мы производили трансформации только по двум осям:<em>x</em>и<em>y</em>. В трехмерном пространстве появляется дополнительная ось<em>z</em>, благодаря которой мы можем добавить глубины объекту.</p>
3
<p>В процессе прохождения второй части курса мы научимся работать с осью<em>z</em>, и для того, чтобы увидеть основные изменения в стилях вводится понятие<em>перспективы</em>, то есть расстояние между экраном и расположением элемента в глубине по оси<em>z</em>. Именно перспектива является тем, на что опирается мозг для определения трехмерности объекта.</p>
3
<p>В процессе прохождения второй части курса мы научимся работать с осью<em>z</em>, и для того, чтобы увидеть основные изменения в стилях вводится понятие<em>перспективы</em>, то есть расстояние между экраном и расположением элемента в глубине по оси<em>z</em>. Именно перспектива является тем, на что опирается мозг для определения трехмерности объекта.</p>
4
<h2>Перспектива</h2>
4
<h2>Перспектива</h2>
5
<p>Перспектива указывается у родительского объекта, внутри которого будут находиться элементы с трансформациями. Обратите внимание на следующий пример. В нем для объектов указаны одинаковые стили и одинаковая анимация с одной разницей: одна из сцен имеет перспективу в 800 пикселей. В этом примере обратите внимание на то, как вращаются элементы по оси<em>x</em>. В сцене с перспективой есть глубина и элемент не просто визуально меняет свои размеры, но и видно именно его поворот, в отличие от соседней сцены. В двухмерной сцене такое вращение достигается путем сжимания и разжимания элемента, а не непосредственного его вращения, так как отсутствует дополнительная ось<em>z</em>.</p>
5
<p>Перспектива указывается у родительского объекта, внутри которого будут находиться элементы с трансформациями. Обратите внимание на следующий пример. В нем для объектов указаны одинаковые стили и одинаковая анимация с одной разницей: одна из сцен имеет перспективу в 800 пикселей. В этом примере обратите внимание на то, как вращаются элементы по оси<em>x</em>. В сцене с перспективой есть глубина и элемент не просто визуально меняет свои размеры, но и видно именно его поворот, в отличие от соседней сцены. В двухмерной сцене такое вращение достигается путем сжимания и разжимания элемента, а не непосредственного его вращения, так как отсутствует дополнительная ось<em>z</em>.</p>
6
<p><a>https://codepen.io/hexlet/pen/OJgzPxZ</a></p>
6
<p><a>https://codepen.io/hexlet/pen/OJgzPxZ</a></p>
7
<p>Управлять перспективой в CSS можно используя свойство perspective. Оно может принимать любое значение, которыми можно определить размер: px, em, rem и так далее. Свойство показывает, на каком расстоянии по оси<em>z</em>располагается элемент.</p>
7
<p>Управлять перспективой в CSS можно используя свойство perspective. Оно может принимать любое значение, которыми можно определить размер: px, em, rem и так далее. Свойство показывает, на каком расстоянии по оси<em>z</em>располагается элемент.</p>
8
<p><strong>Важно:</strong>чем больше значение, тем дальше элемент находится от зрителя. Это означает, что его трансформации будут менее заметны, чем у объекта, который находится ближе. Но за этим стоит и проблема: малое значение перспективы может деформировать элемент не так, как мы это ожидаем.</p>
8
<p><strong>Важно:</strong>чем больше значение, тем дальше элемент находится от зрителя. Это означает, что его трансформации будут менее заметны, чем у объекта, который находится ближе. Но за этим стоит и проблема: малое значение перспективы может деформировать элемент не так, как мы это ожидаем.</p>
9
<p><a>https://codepen.io/hexlet/pen/RwgxWoN</a></p>
9
<p><a>https://codepen.io/hexlet/pen/RwgxWoN</a></p>
10
<p>В этом примере можно заметить, что чем меньше перспектива, тем ближе к нам происходит вращение. При значении в 200 пикселей возникает ощущение, что блок проворачивают прям перед нашими глазами, а значит объект искажается. При перспективе в 5000 пикселей эффект не такой заметный, так как объект очень далеко от нас. Если увеличить значение до размеров в 20000 пикселей, то вращение будет похоже на то, что происходит в двухмерном пространстве.</p>
10
<p>В этом примере можно заметить, что чем меньше перспектива, тем ближе к нам происходит вращение. При значении в 200 пикселей возникает ощущение, что блок проворачивают прям перед нашими глазами, а значит объект искажается. При перспективе в 5000 пикселей эффект не такой заметный, так как объект очень далеко от нас. Если увеличить значение до размеров в 20000 пикселей, то вращение будет похоже на то, что происходит в двухмерном пространстве.</p>
11
<h2>Точка зрения</h2>
11
<h2>Точка зрения</h2>
12
<p>Здесь мы говорим не о мыслях, а о действительной точке зрения на объект, то есть о том, в какой позиции мы находимся: слева, справа, сверху, снизу, немного сбоку и так далее. Изменение точки зрения сильно влияет на то, как объект будет трансформироваться. Чтобы в этом убедиться, вы можете взять любой объект в руку и начать его вращать. Постепенно меняйте положение своей головы или объекта и обратите внимание на то, как вы будете видеть то же вращение, но под другим углом.</p>
12
<p>Здесь мы говорим не о мыслях, а о действительной точке зрения на объект, то есть о том, в какой позиции мы находимся: слева, справа, сверху, снизу, немного сбоку и так далее. Изменение точки зрения сильно влияет на то, как объект будет трансформироваться. Чтобы в этом убедиться, вы можете взять любой объект в руку и начать его вращать. Постепенно меняйте положение своей головы или объекта и обратите внимание на то, как вы будете видеть то же вращение, но под другим углом.</p>
13
<p>Для определения точки зрения используется свойство perspective-origin. По своим значением оно схоже со свойством transform-origin, только теперь определяется не точка трансформации, а точка, с которой мы наблюдаем трансформацию. По умолчанию такой точкой является центр объекта, которое записывается так:</p>
13
<p>Для определения точки зрения используется свойство perspective-origin. По своим значением оно схоже со свойством transform-origin, только теперь определяется не точка трансформации, а точка, с которой мы наблюдаем трансформацию. По умолчанию такой точкой является центр объекта, которое записывается так:</p>
14
<p><a>https://codepen.io/hexlet/pen/XWgVmGQ</a></p>
14
<p><a>https://codepen.io/hexlet/pen/XWgVmGQ</a></p>
15
<p>В примере выше для каждого блока использовано только одно из трех значений. Обратите внимание на то, как меняется восприятие от вращения объекта при разных точках зрения.</p>
15
<p>В примере выше для каждого блока использовано только одно из трех значений. Обратите внимание на то, как меняется восприятие от вращения объекта при разных точках зрения.</p>
16
<p><strong>Важно:</strong>свойство perspective-origin используется для контейнера, внутри которого находятся трансформируемые элементы. Если для разных элементов вам нужны разные точки зрения, то используйте несколько контейнеров. В примерах выше свойства perspective и perspective-origin не будут работать, если указать значения у селектора .box</p>
16
<p><strong>Важно:</strong>свойство perspective-origin используется для контейнера, внутри которого находятся трансформируемые элементы. Если для разных элементов вам нужны разные точки зрения, то используйте несколько контейнеров. В примерах выше свойства perspective и perspective-origin не будут работать, если указать значения у селектора .box</p>
17
17