CSS свойство transform позволяет манипулировать элементами на вашей веб-странице, изменяя их форму, размер и положение.

В общем виде свойство transform записывается так: transform: функция(значение);, где функция — это тип преобразования, который вы хотите применить, а значение — параметры этого преобразования.

Свойство transform может принимать следующие значения:

  • none — никакого преобразования не применяется.
  • rotate(angle) — вращает элемент на заданный угол.
  • scale(x,y) — масштабирует элемент по осям X и Y.
  • translate(x,y) — перемещает элемент на заданные координаты.
  • skew(x-angle,y-angle) — наклоняет элемент на заданные углы по осям X и Y.

Есть некоторые другие варианты преобразований, например, на основе матриц — смотрите их в спецификации. Но они для математиков всяких :)

Примеры использования

Вращение элемента — rotate

Свойство rotate вращает элемент вокруг его центра.

div {
  transform: rotate(20deg);
}

В этом примере элемент повернётся на 20 градусов по часовой стрелке (оси вы не увидите).

Масштабирование элемента — scale

Свойство scale изменяет размер элемента.

div {
  transform: scale(1.5);
}

Обратите внимание, при масштабировании изменяются все параметры элемента — например, рамка становится в полтора раза толще.

Перемещение элемента — translate

Свойство translate позволяет вам перемещать элемент по экрану.

div {
  transform: translate(50px, 100px);
}

Наклон элемента — skew

Свойство skew позволяет вам наклонять элемент по осям X и Y — как если бы вы нажимали на его углы.

div {
  transform: skew(20deg, 10deg);
}

Анимация превращений

Логично, что такую красоту используют для анимаций. transform легко анимируется с помощью свойства transition или ключевых кадров (@keyframes).

Анимация с помощью transition

Свойство transition позволяет анимировать плавное изменение свойств CSS от одного состояния к другому за определённое время. Вот пример анимации сдвига элемента при наведении курсора.

div {
  transition: transform 2s;
}

div:hover {
  transform: skew(20deg, 10deg);
}

В этом примере, когда вы наводите курсор на <div>, он очень по-дизайнерски изгибается. Смотрите:

Анимация с помощью @keyframes

Свойство @keyframes позволяет вам создавать более сложные анимации из нескольких частей. Вот пример анимации, где элемент сначала увеличивается в размере, затем вращается и сдвигается:

@keyframes example {
  0% { transform: scale(1); }
  50% { transform: scale(1.2); }
  70% { transform: rotate(30deg); }
  100% { transform: skew(20deg, 10deg);}
}

div {
  animation: example 4s infinite;
}

В этом примере <div> сначала увеличивается в размере за 2 секунды, а затем вращается на 30 градусов за следующие 2 секунды, а в конце к нему применяется skew. Этот цикл анимации повторяется бесконечно благодаря свойству infinite.

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

transform не должен использоваться для изменения основной структуры веб-страницы. Он нужен для создания эффектов и анимаций, а не для основного макета страницы

Например, если вы захотите расставить элементы на странице с помощью translate, то лучше не надо. Для этого лучше использовать другие CSS свойства, такие как flexbox или grid.

Запомните:

  • CSS свойство transform позволяет применять 2D и 3D преобразования к элементам.

  • С помощью transform можно вращать, масштабировать, перемещать и наклонять элементы.

  • Не все CSS свойства могут быть преобразованы с помощью transform.

  • Вместе с transition получаются неплохие анимации. Главное — знать меру.

Материалы по теме