Функции трансформации

Функций трансформаций довольно много и они делятся по следующим группам: поворот, масштабирование, наклон и сдвиг, а также на двухмерные и трёхмерные трансформации. Последние обозначаются добавлением 3d к имени функции. Кроме того, с помощью этих трансформаций можно делать отражение элемента, задавая отрицательные значения параметров у некоторых функций. Все функции комбинируются между собой, позволяя тем самым получить множество новых фигур.

Любая трансформация происходит относительно центральной точки элемента, её положение можно задать с помощью свойства transform-origin. Координатные оси показаны на рис. 1; оси X и Y находятся в плоскости экрана, а ось Z ему перпендикулярна.

Координатные оси

Рис. 1. Координатные оси

translate()

Сдвигает элемент на заданное значение по горизонтали и вертикали в плоскости экрана.

transform: translate(tx[, ty])

Здесь: tx — значение смещения по оси X в пикселях, процентах или других единицах CSS; ty — смещение по оси Y. Если значение ty не указано, то оно считается равным tx: translate(2) соответствует translate(2, 2).

translate3d()

Сдвигает элемент на заданное значение в трёхмерном пространстве.

transform: translate3d(tx, ty, tz)

Здесь: tx — смещение по оси X; ty — смещение по оси Y; tz — смещение по оси Z. tz не может указываться в процентах, в этом случае функция игнорируется.

translateX()

Сдвигает элемент по горизонтали на указанное значение. Положительное значение сдвигает вправо, отрицательное влево.

translateX()

transform: translateX(tx)

translateY()

Сдвигает элемент по вертикали на указанное значение. Положительное значение сдвигает вниз, отрицательное вверх.

translateY()

transform: translateY(ty)

translateY(ty) является синонимом translate(0, ty).

translateZ()

Сдвигает элемент по оси Z в трёхмерном пространстве. Положительное значение сдвигает вперёд, отрицательное назад.

transform: translateZ(tz)

translateZ(tz) является синонимом translate3d(0, 0, tz).

scale()

Задаёт масштаб элемента по горизонтали и вертикали.

transform: scale(sx[, sy]);

Здесь: sx — изменение масштаба по оси X; sy — изменение масштаба по оси Y. Значение больше 1 увеличивает масштаб элемента, меньше 1, наоборот, его уменьшает. Если задано только одно значение, то масштабирование будет происходить пропорционально в обе стороны.

scale3d()

Масштабирует элемент в трёхмерном пространстве.

transform: scale3d(sx, sy, sz)

scaleX()

Масштабирует элемент по горизонтали.

transform: scaleX(sx);

Значение -1 отражает элемент по горизонтали (пример 1).

Пример 1. Отражение по горизонтали

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Отражение</title> <style> .mirrorX { transform: scaleX(-1) translateX(-20px); } </style> </head> <body> <img src="image/igels.png" alt=""> <img src="image/igels.png" alt="" class="mirrorX"> </body> </html>

scaleX() не только отражает изображение, но и меняет направление координат. Поэтому для сдвига картинки вправо применяется отрицательное значение в функции translateX() (рис. 1).

Отражение картинки по горизонтали

Рис. 1. Отражение картинки по горизонтали

scaleY()

Масштабирует элемент по вертикали.

transform: scaleY(sy);

Значение -1 отражает элемент по вертикали (пример 2).

Пример 2. Отражение по вертикали

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Отражение</title> <style> .mirrorY { transform: scaleY(-1); /* Отражаем по вертикали */ opacity: 0.2; /* Полупрозрачность */ } </style> </head> <body> <img src="image/igels.png" alt=""> <img src="image/igels.png" alt="" class="mirrorY"> </body> </html>

Результат данного примера показан на рис. 2.

Отражение картинки по вертикали

Рис. 2. Отражение картинки по вертикали

scaleZ()

Масштабирует элемент по оси Z.

transform: scaleZ(sz);

scaleZ(sz) является синонимом scale3d(1, 1, sz).

rotate()

Поворачивает элемент на заданный угол относительно точки трансформации, задаваемой свойством transform-origin.

transform: rotate(α)

Здесь: α — угол поворота. Положительное значение поворачивает элемент по часовой стрелке, отрицательное против.

rotate3d()

Поворачивает элемент в трёхмерном пространстве без искажений. Вращающийся элемент имеет три степени свободы — оси X, Y и Z, относительно которых происходит поворот. Они задаются с помощью вектора [x, y, z] с учётом точки вращения.

transform: rotate3d(x, y, z, α)

Здесь: x — целое число описывающее координату X вектора оси вращения; y — целое число описывающее Y-координату вектора оси вращения; z — целое число описывающее координату Z вектора оси вращения; α — угол поворота. Положительное значение угла поворачивает элемент по часовой стрелке, отрицательное против.

rotateX()

Поворачивает элемент вокруг оси X на заданный угол α.

transform: rotateX(α)

rotateX(α) является синонимом rotate3D(1, 0, 0, α).

rotateY()

Поворачивает элемент вокруг оси Y на заданный угол α.

transform: rotateY(α)

rotateY(α) является синонимом rotate3D(0, 1, 0, α).

rotateZ()

Поворачивает элемент вокруг оси Z на заданный угол α.

transform: rotateZ(α)

rotateZ(α) является синонимом rotate3D(0, 0, 1, α).

skew()

Наклоняет элемент на заданное значение по горизонтали и вертикали в плоскости экрана.

transform: skew(ax[, ay])

Здесь: ax — угол наклона по оси X; ay — угол наклона по оси Y. Если значение ay не указано, то оно считается равным ax: skew(30deg) соответствует skew(30deg, 30deg).

skewX()

Наклоняет элемент на заданный угол по горизонтали. Положительное значение наклоняет влево, отрицательное вправо.

skewX()

transform: skewX(α)

Здесь: α — угол наклона по оси X. В примере 3 показано создание наклонного меню с помощью функции skewX().

Пример 3. Использование skewX()

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Трансформация</title> <style> li { background: #a9c358; /* Цвет фона */ list-style: none; /* Убираем маркеры */ width: 300px; /* Ширина списка */ margin-bottom: 10px; /* Отступ снизу */ transform: skewX(-30deg); /* Наклоняем вправо */ } li a { color: #2c285d; /* Цвет ссылок */ text-decoration: none; /* Убираем подчёркивание */ display: block; /* Блочные ссылки */ padding: 5px 20px; /* Поля */ transform: skewX(30deg); /* Наклоняем ссылки обратно */ } </style> </head> <body> <ul> <li><a href="#">Пирамида Хеопса</a></li> <li><a href="#">Висячие сады Семирамиды</a></li> <li><a href="#">Статуя Зевса в Олимпии</a></li> <li><a href="#">Храм Артемиды в Эфесе</a></li> <li><a href="#">Мавзолей в Галикарнасе</a></li> <li><a href="#">Колосс Родосский</a></li> <li><a href="#">Александрийский маяк</a></li> </ul> </body> </html>

Результат данного примера показан на рис. 3. Поскольку трансформация действует на содержимое всего элемента, то ссылки внутри <li> тоже окажутся под наклоном. Нам это не требуется, поэтому ещё раз применяем функцию skewX() для <a>, но уже с противоположным знаком.

Наклон пунктов меню

Рис. 3. Наклон пунктов меню

skewY()

Наклоняет элемент на заданный угол по вертикали.

skewY()

transform: skewY(α)

Здесь: α — угол наклона по оси Y. Положительное значение наклоняет вниз, отрицательное вверх.

perspective()

Функция задаёт степень перспективы элемента в трёхмерном пространстве. Выражается расстоянием по оси Z от плоскости экрана до точки схода на линии горизонта. Чем меньше расстояние в пикселях, тем сильнее выражены искажения и наоборот.

transform: perspective(l)

Здесь: l — размер в пикселях или других единицах CSS. Процентная запись неприменима. Если значение равно 0 или отрицательное, то функция не работает.

Автор: Влад Мержевич
Последнее изменение: 15.02.2024