Функции 3D-трансформаций

Как веб-дизайнер, вы, вероятно, хорошо знакомы с работой в двух измерениях — X и Y, размещая элементы по горизонтали и вертикали. Теперь, когда 3D-пространство инициализировано с помощью perspective, мы можем трансформировать элементы в трёх пространственных измерениях, добавив третье измерение — Z.

3D-преобразования используют тот же свойство transform, что и для 2D-преобразований. Если вы знакомы с 2D-преобразованиями, основные функции 3D-преобразований покажутся вам похожими.

Тогда как translateX() перемещает элемент вдоль горизонтальной оси X, translateZ() перемещает его вдоль оси Z, которая проходит от нас к экрану в 3D-пространстве. Положительные значения сдвигают элемент ближе к зрителю, отрицательные — дальше.

Функции rotate вращают элемент вокруг соответствующей оси. Это может быть немного контр-интуитивно на первый взгляд, так как можно подумать, что rotateX() будет вращать объект горизонтально, влево или вправо. Но на самом деле, используя rotateX(), элемент вращается вокруг горизонтальной оси X, так что верхняя часть элемента наклоняется назад и уходит, а нижняя — наклоняется к нам.

translateZ(-200px)
translateZ(200px)
rotateX(45deg)
rotateY(45deg)
rotateZ(45deg)

Edit this demo on CodePen

Существует несколько сокращённых функций преобразования, с помощью которых можно задать значения для всех трёх измерений:

Аппаратное ускорение

Эти функции transform3d() с тремя аргументами также имеют преимущество в виде активации аппаратного ускорения. Дин Джексон, автор спецификации CSS 3D преобразований и главный чувак WebKit, написал:

По сути, любое преобразование, в котором есть 3D-операция, активирует аппаратное композитирование, даже если само преобразование 2D или вообще ничего не делает (например, translate3d(0,0,0)). Обратите внимание, что это текущее поведение, и оно может измениться в будущем (именно поэтому мы не документируем и не рекомендуем его). Однако это очень полезно в некоторых ситуациях и может значительно улучшить производительность при перерисовке.

Эта заметка была написана в 2010 году. С тех пор другие браузеры приняли это поведение, но результаты могут различаться. Аппаратное ускорение в браузерах остаётся загадочной темой, о которой редко пишут в документации.

Для ясности, в демонстрациях в этом материале будут использованы базовые функции преобразования, но если вы хотите повысить производительность, попробуйте использовать transform3d().


Далее: Переворот карточки →