Функций трансформаций довольно много и они делятся по следующим группам: поворот, масштабирование, наклон и сдвиг, а также на двухмерные и трёхмерные трансформации. Последние обозначаются добавлением 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()
Сдвигает элемент по горизонтали на указанное значение. Положительное значение сдвигает вправо, отрицательное влево.
transform: translateX(tx)
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()
Наклоняет элемент на заданный угол по горизонтали. Положительное значение наклоняет влево, отрицательное вправо.
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()
Наклоняет элемент на заданный угол по вертикали.
transform: skewY(α)
Здесь: α — угол наклона по оси Y. Положительное значение наклоняет вниз, отрицательное вверх.
perspective()
Функция задаёт степень перспективы элемента в трёхмерном пространстве. Выражается расстоянием по оси Z от плоскости экрана до точки схода на линии горизонта. Чем меньше расстояние в пикселях, тем сильнее выражены искажения и наоборот.
transform: perspective(l)
Здесь: l — размер в пикселях или других единицах CSS. Процентная запись неприменима. Если значение равно 0 или отрицательное, то функция не работает.