Назад

Свойства CSS transform

В мире веб-разработки и дизайна постоянно растет потребность в создании динамичных, визуально привлекательных интерфейсов. Одним из краеугольных камней современной верстки стало свойство CSS transform. Это мощнейший инструмент, который позволяет манипулировать элементами страницы, изменяя их геометрию и положение в пространстве, не затрагивая при этом поток документа вокруг них. В отличие от таких свойств, как margin или position, которые могут вызывать нежелательные сдвиги соседних блоков, transform работает как бы в отдельном слое, обеспечивая плавные и изолированные визуальные изменения.

Свойство transform CSS — это CSS-свойство, которое позволяет визуально трансформировать элемент в двухмерном или трехмерном пространстве. С его помощью вы можете перемещать, масштабировать, поворачивать, наклонять элемент и даже задавать ему перспективу, создавая тем самым эффекты, которые раньше были возможны только с использованием изображений или Flash. Все это достигается с помощью различных функций трансформации, которые и являются главным фокусом данной статьи.

Ниже мы детально рассмотрим каждую функцию-трансформатор, чтобы вы могли в полной мере использовать их потенциал в своих проектах.

translate() — функция перемещения

translate(tx, ty) - это базовая функция для перемещения элемента. Она принимает один или два значения. Первое значение (tx) определяет смещение по горизонтальной оси (X), второе (ty) — по вертикальной оси (Y). Если указано только одно значение, оно применяется только для оси X, а значение Y принимается за 0. Например, transform: translate(50px, -20px); сдвинет элемент на 50 пикселей вправо и на 20 пикселей вверх. Ключевое преимущество — процентные значения рассчитываются от размеров самого элемента, а не от родительского контейнера, что делает translate идеальным для выравнивания элементов по центру.

transform: translate(,);
Hello, World!
div {
    transform: translate(30px, 20px);
}

translateX()

translateX(tx) - узкоспециализированная функция, которая перемещает элемент только по горизонтальной оси X. Положительное значение сдвигает элемент вправо, отрицательное — влево. Это эквивалентно использованию translate(tx, 0).

transform: translateX();
Hello, World!
div {
    transform: translateX(30px);
}

translateY()

Функция translateY(ty) - аналогична translateX, но работает исключительно с вертикальной осью Y. Положительное значение сдвигает элемент вниз, отрицательное — вверх. Эквивалентна translate(0, ty).

transform: translateY();
Hello, World!
div {
    transform: translateY(20px);
}

translateZ()

translateZ(tz) - эта функция работает в контексте 3D-трансформаций. Она перемещает элемент вдоль оси Z, которая условно направлена "на зрителя" из экрана. Положительное значение "приближает" элемент, делая его визуально крупнее, отрицательное — "отдаляет". Для работы этой функции обязательно должен быть задан 3D-контейнер (с помощью perspective).

translate3d()

translate3d(tx, ty, tz) - комбинированная функция, позволяющая задать перемещение по всем трем осям одновременно: X, Y и Z. Это наиболее мощный инструмент для позиционирования в трехмерном пространстве. Синтаксис: translate3d(50px, 10px, 100px).

scale()

scale(sx, sy) - принимает одно или два значения, которые являются множителями. Единица (1) соответствует исходному размеру. Значение 2 удвоит элемент, 0.5 — уменьшит вдвое. Первый аргумент масштабирует по оси X (ширина), второй — по оси Y (высота). Если указан только один аргумент, он используется для обеих осей. transform: scale(1.2); равномерно увеличит элемент на 20%.

transform: scale(,);
Hello, World!
div {
    transform: scale(1, 1);
}

scaleX()

scaleX(sx) - масштабирует элемент только по горизонтальной оси X. scaleX(2) растянет элемент вширь в два раза, а scaleX(0.5) — сожмет.

transform: scaleX();
Hello, World!
div {
    transform: scaleX(1);
}

scaleY()

scaleY(sy) - масштабирует элемент только по вертикальной оси Y. scaleY(1.5) вытянет элемент в высоту в полтора раза.

transform: scaleY();
Hello, World!
div {
    transform: scaleY(1);
}

scaleZ() и scale3d()

scaleZ(sz) и scale3d(sx, sy, sz) - эти функции работают в 3D-пространстве. scaleZ масштабирует элемент по оси Z, что визуально влияет на его толщину, но этот эффект сложно заметить без других 3D-преобразований. scale3d позволяет задать масштаб по всем трем осям одновременно.

rotate()

Функция CSS rotate() - классическая функция для 2D-вращения. Элемент поворачивается вокруг своей оси Z (условно "выходя из экрана"). Угол задается в градусах (deg), радианах (rad), градах (grad) или поворотах (turn). transform: rotate(45deg); повернет элемент на 45 градусов по часовой стрелке.

transform: rotate(deg );
Hello, World!
div {
    transform: rotate(0deg);
}

rotateZ()

rotateZ(angle) - функционально идентична rotate(), так как по умолчанию вращение происходит именно вокруг оси Z (как колесо)

transform: rotateZ(deg );
Hello, World!
div {
    transform: rotateZ(0deg);
}

rotateX()

rotateX(angle) - cовершает вращение вокруг горизонтальной оси X. Это создает эффект "кувыркания" элемента. Положительный угол наклонет верхнюю часть элемента "назад", а нижнюю — "вперед".

transform: rotateX(deg );
Hello, World!
div {
    transform: rotateX(0deg);
}

rotateY()

rotateY(angle) - вращает элемент вокруг вертикальной оси Y. Эффект похож на поворот двери или страницы книги. Положительный угол повернет элемент влево, показывая его левую грань.

transform: rotateY(deg );
Hello, World!
div {
    transform: rotateY(0deg);
}

rotate3d()

rotate3d(x, y, z, angle) - самая продвинутая функция вращения. Она позволяет задать собственную векторную ось, вокруг которой будет происходить поворот. Первые три аргумента (x, y, z) определяют вектор направления. Например, rotate3d(1, 1, 0, 45deg) повернет элемент на 45 градусов вокруг оси, идущей из левого нижнего угла в правый верхний.

perspective() - функция перспективы и 3D

Функция perspective() - не трансформирует сам элемент, а задает расстояние от зрителя до плоскости z=0, создавая тем самым точку схода для всех 3D-преобразований дочерних элементов. Меньшее значение (напр., 300px) создает более выраженный, драматичный 3D-эффект, так как перспектива искажается сильнее. Большее значение (напр., 2000px) создает более мягкий, едва заметный эффект. Важно применять это свойство к родительскому контейнеру, а не к самому трансформируемому элементу, для единообразной перспективы всех дочерних элементов.

transform: perspective(px)rotateY(deg);
Hello, World!
div {
    transform: perspective(350px) rotateY(0deg);
}

skew() - функция наклона

skew(ax, ay) - наклоняет элемент на заданные углы по осям X и Y. Первый аргумент (ax) определяет угол наклона по горизонтали (ось Y при этом наклоняется), второй (ay) — угол наклона по вертикали (ось X при этом наклоняется). Если второй аргумент опущен, он считается равным нулю. transform: skew(15deg, -10deg); создаст сложный эффект "скручивания" элемента.

transform: skew(deg,deg );
Hello, World!
div {
    transform: skew(0deg, 0deg);
}

skewX()

skewX(ax) - наклоняет элемент только по оси X. Визуально это выглядит как наклон вертикальных линий элемента. Положительное значение наклонит левую часть элемента вверх, а правую — вниз.

transform: skewX(deg );
Hello, World!
div {
    transform: skewX(0deg);
}

skewY()

skewY(ay) - наклоняет элемент только по оси Y. Это приводит к наклону горизонтальных линий. Положительное значение поднимет левую часть и опустит правую.

transform: skewY(deg );
Hello, World!
div {
    transform: skewY(0deg);
}

matrix() - матричные преобразования

matrix(sx, ay, ax, sy, tx, ty) - это низкоуровневая функция, которая объединяет в себе все 2D-трансформации (перемещение, масштабирование, наклон, вращение) с помощью математической матрицы 2x3. Параметры sx, ay, ax, sy отвечают за масштаб, наклон и вращение, а tx, ty — за перемещение. Прямое использование matrix требует глубоких математических знаний, но она крайне полезна для сложных анимаций и генерации преобразований через JavaScript, так как позволяет описать любое 2D-преложение одной строкой.

transform: matrix(,,,,,);
Hello, World!
div {
    transform: matrix(1, 0, 0, 1, 0, 0);
}

Отдельные CSS свойства: translate, rotate и scale

Современный CSS не стоит на месте, и одна из самых ожидаемых инноваций — появление отдельных свойств для трансформаций: translate, rotate и scale. Это не просто синтаксический сахар над знакомым свойством transform. Это фундаментальное изменение в подходе к анимации, которое делает код чище, а анимации — производительнее и проще в управлении.

Раньше, если нужно было анимировать только перемещение, но при этом элемент уже имел комплексную трансформацию, приходилось переписывать все значение transform целиком. Это было неудобно и часто приводило к ошибкам. Новые свойства решают эту проблему, позволяя управлять каждой составляющей трансформации независимо.

Важный нюанс: Если вы используете отдельные свойства (translate, rotate, scale) и одновременно общее свойство transform на одном элементе, то transform будет проигнорировано. Поэтому стоит выбрать один подход для всего проекта.

Отдельные свойства translate, rotate и scale — это значительный шаг вперед для веб-разработки. Они не только делают написание кода более приятным, но и открывают новые горизонты для создания высокопроизводительных и визуально впечатляющих пользовательских интерфейсов.

Свойство translate

Свойство translate - это независимое CSS-свойство, которое отвечает исключительно за перемещение элемента вдоль осей X, Y и Z. Оно пришло на смену функциям translateX(), translateY() и translateZ(), когда они используются внутри transform. Свойство translate принимает от одного до трех значений, что делает его невероятно гибким. translate: 50px 100px -20px; — переместит элемент в 2D-пространстве и добавит перемещение по оси Z на -20px ( "отодвинет" элемент). Эквивалентно translate3d(50px, 100px, -20px).

translate:;
Hello, World!
div {
    translate: 30px 20px;
}

Свойство scale

Свойство scale - это независимое свойство, которое управляет масштабированием элемента, то есть его увеличением или уменьшением. Оно пришло на смену функциям scale(), scaleX() и scaleY(). Свойство scale принимает от одного до трех значений. scale: 1.5 1 2; — масштабирует элемент по осям X, Y и Z соответственно. Масштабирование по Z в отрыве от других 3D-трансформаций визуально малозаметно.

scale:;
Hello, World!
div {
    scale: 1 1;
}

Свойство rotate

Свойство rotate - это независимое свойство, предназначенное для вращения элемента вокруг одной или нескольких осей. Оно заменяет функции rotate(), rotateX(), rotateY() и rotateZ(). rotate: x 90deg y 0.15turn; — позволяет комбинировать повороты вокруг разных осей в одном объявлении. Порядок осей имеет значение, так как каждое последующее вращение применяется в новой системе координат.

rotate:deg
Hello, World!
div {
    rotate: 0deg;
}

Заключение

Свойство CSS transform — это не просто набор функций для украшательства. Это фундаментальный инструмент для создания современного, отзывчивого и интерактивного пользовательского опыта. От микро-взаимодействий, таких как плавное поднятие кнопки при наведении (scale(1.05)), до сложных 3D-галерей и анимированных интерфейсов — понимание и умелое применение каждой из его функций открывает перед разработчиком безграничные возможности. Комбинируя несколько функций в одном правиле (напр., transform: rotate(45deg) scale(1.2) translateX(100px);), вы можете создавать по-настоящему уникальные и запоминающиеся визуальные эффекты, которые сделают ваш сайт живым и динамичным.