← Назад к вопросам

Что такое transform?

1.0 Junior🔥 221 комментариев
#HTML и CSS

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое transform?

Transform в CSS — это свойство, которое позволяет изменять визуальное представление элемента БЕЗ изменения его положения в потоке документа (без влияния на разметку и соседние элементы). Transform используется для скейлирования, поворота, смещения и наклона элементов с помощью 2D или 3D преобразований.

Основные функции transform

1. translate() — смещение

/* Сдвиг на 50px вправо и 20px вниз */
.box {
  transform: translate(50px, 20px);
}

/* Или отдельно */
.box {
  transform: translateX(50px);  /* Только по X */
  transform: translateY(20px);  /* Только по Y */
}

/* В 3D */
.box {
  transform: translate3d(50px, 20px, 10px);  /* X, Y, Z */
}

2. scale() — масштабирование

/* Увеличение в 1.5 раза */
.box {
  transform: scale(1.5);
}

/* Разные масштабы по осям */
.box {
  transform: scale(1.5, 0.8);  /* X: 1.5x, Y: 0.8x */
}

/* Отдельно */
.box {
  transform: scaleX(2);  /* В два раза шире */
  transform: scaleY(0.5);  /* В два раза ниже */
}

3. rotate() — поворот

/* Поворот на 45 градусов */
.box {
  transform: rotate(45deg);
}

/* В 3D — вокруг осей */
.box {
  transform: rotateX(45deg);  /* Поворот вокруг оси X */
  transform: rotateY(45deg);  /* Поворот вокруг оси Y */
  transform: rotateZ(45deg);  /* Поворот вокруг оси Z (как обычный rotate) */
}

/* Можно комбинировать */
.box {
  transform: rotate3d(1, 1, 1, 45deg);  /* Поворот по 3D вектору */
}

4. skew() — наклон

/* Наклон по обеим осям */
.box {
  transform: skew(20deg, 10deg);  /* X: 20deg, Y: 10deg */
}

/* Отдельно */
.box {
  transform: skewX(20deg);  /* Наклон по X */
  transform: skewY(10deg);  /* Наклон по Y */
}

5. matrix() — матричное преобразование

/* Полное преобразование через матрицу */
.box {
  transform: matrix(a, b, c, d, e, f);
}

/* Это редко используется, т.к. сложно вычислять вручную */

Комбинирование преобразований

/* Несколько трансформаций одновременно */
.box {
  transform: translate(50px, 20px) scale(1.5) rotate(45deg);
}

/* Порядок имеет значение! */
.box1 {
  transform: translate(50px) rotate(45deg);
  /* Сначала сдвиг, потом поворот */
}

.box2 {
  transform: rotate(45deg) translate(50px);
  /* Сначала поворот, потом сдвиг (результат будет другой!) */
}

transform-origin — точка трансформации

По умолчанию преобразования происходят относительно центра элемента (50%, 50%):

.box {
  transform: rotate(45deg);
  transform-origin: center;  /* По умолчанию */
}

/* Можно изменить точку вращения */
.box {
  transform: rotate(45deg);
  transform-origin: top left;  /* Вращать от верхнего левого угла */
}

/* Или с координатами */
.box {
  transform: rotate(45deg);
  transform-origin: 0 0;  /* От верхнего левого угла */
  /* или */
  transform-origin: 20% 30%;
}

Почему transform лучше, чем изменение position или size?

❌ Плохо — изменение top/left:

.box {
  position: relative;
  top: 50px;
  left: 50px;
  /* Это вызывает перерасчет layout (reflow) */
  /* Медленно! */
}

✅ Хорошо — использование transform:

.box {
  transform: translate(50px, 50px);
  /* Это происходит на слое композиции (composite layer) */
  /* Быстро! Не вызывает reflow */
}

Transform работает с GPU, не требует перерасчета layout. Это намного быстрее!

Пример: анимация кнопки при наведении

.button {
  transform: scale(1);  /* Нормальный размер */
  transition: transform 0.3s ease;  /* Плавная анимация */
}

.button:hover {
  transform: scale(1.1) translateY(-2px);  /* Увеличение и поднятие */
}
<button class="button">Нажми меня</button>

Пример: 3D флип карточки

.card {
  width: 200px;
  height: 300px;
  perspective: 1000px;  /* Перспектива для 3D */
}

.card-inner {
  position: relative;
  width: 100%;
  height: 100%;
  transform-style: preserve-3d;  /* Сохранить 3D пространство для детей */
  transition: transform 0.6s;
}

.card:hover .card-inner {
  transform: rotateY(180deg);  /* Повернуть на 180 градусов по Y */
}

.card-front, .card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;  /* Скрыть обратную сторону */
}

.card-back {
  transform: rotateY(180deg);  /* Начально скрыта */
}
<div class="card">
  <div class="card-inner">
    <div class="card-front">Фронт</div>
    <div class="card-back">Бэк</div>
  </div>
</div>

transform vs transition vs animation

transform — свойство для изменения формы/размера/положения

transition — плавная смена значений transform

.box {
  transform: scale(1);
  transition: transform 0.3s ease;  /* Плавно изменяет transform */
}

.box:hover {
  transform: scale(1.2);  /* Плавное увеличение */
}

animation — более сложные, многошаговые анимации

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

.spinner {
  animation: spin 2s linear infinite;  /* Крутится бесконечно */
}

Производительность

✅ Используй для анимаций:

  • transform
  • opacity

❌ Не используй для анимаций:

  • width, height
  • top, left, bottom, right
  • margin, padding
  • Другие свойства, вызывающие reflow

3D трансформации

Для работы с 3D нужна перспектива:

.container {
  perspective: 1000px;  /* Расстояние в пиксели для перспективы */
}

.box {
  transform: rotateX(45deg) rotateY(45deg) translateZ(50px);
  /* translateZ требует perspective у родителя */
}

Transform — это один из самых важных инструментов для оптимизации анимаций в современном веб-дизайне!

Что такое transform? | PrepBro