Spec-Zone.ru › CSS

<transform-function>

Базовая Широкодоступная

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Тип данных <transform-function> CSS данных представляет преобразование, влияющее на внешний вид элемента. Функции преобразования могут вращать, изменять размер, искажать или перемещать элемент в 2D или 3D пространстве. Она используется в свойстве transform.

Синтаксис

Тип данных <transform-function> задается с помощью одной из функций преобразования, перечисленных ниже. Каждая функция применяет геометрическую операцию в 2D или 3D.

Преобразование матрицы

matrix()

Описывает однородную 2D матрицу преобразования.

matrix3d()

Описывает 3D преобразование как 4×4 однородную матрицу.

Перспектива

perspective()

Устанавливает расстояние между пользователем и плоскостью z=0.

Вращение

rotate()

Вращает элемент вокруг фиксированной точки на 2D плоскости.

rotate3d()

Вращает элемент вокруг фиксированной оси в 3D пространстве.

rotateX()

Вращает элемент вокруг горизонтальной оси.

rotateY()

Вращает элемент вокруг вертикальной оси.

rotateZ()

Вращает элемент вокруг оси z.

Масштабирование (изменение размера)

scale()

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

scale3d()

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

scaleX()

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

scaleY()

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

scaleZ()

Масштабирует элемент вверх или вниз вдоль оси z.

Наклонение (искажение)

skew()

Наклоняет элемент на 2D плоскости.

skewX()

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

skewY()

Наклоняет элемент по вертикали.

Перемещение

translate()

Перемещает элемент на 2D плоскости.

translate3d()

Перемещает элемент в 3D пространстве.

translateX()

Перемещает элемент по горизонтали.

translateY()

Перемещает элемент по вертикали.

translateZ()

Перемещает элемент вдоль оси z.

Описание

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

Декартовы координаты

В декартовой системе координат двумерная точка описывается двумя значениями: координатой x (абсциссой) и координатой y (ординатой). Это представлено в виде векторной записи (x, y).

A cartesian plane showing the negative Y and positive X axis starting from origin with three points P1, P2 and P3 with corresponding X and Y values

В CSS (и большинстве компьютерной графики) начало координат (0, 0) представляет собой верхний левый угол любого элемента. Положительные координаты находятся ниже и правее начала координат, а отрицательные — выше и левее. Таким образом, точка, которая находится на 2 единицы вправо и на 5 единиц вниз, будет (2, 5), а точка, которая находится на 3 единицы влево и на 12 единиц вверх, будет (-3, -12).

Функции преобразования

Функции преобразования изменяют внешний вид элемента, манипулируя значениями его координат. Линейная функция преобразования описывается с помощью матрицы 2×2, как это:

( a c b d ) \begin{pmatrix} a & c \\ b & d \end{pmatrix}

Функция применяется к элементу, используя умножение матриц. Таким образом, каждая координата изменяется в зависимости от значений в матрице:

( a c b d ) ( x y ) = ( a x + c y b x + d y ) \left( \begin{array}{cc} a & c \\ b & d \end{array} \right) \left( \begin{array}{c} x \\ y \end{array} \right) = \left( \begin{array}{c} ax + cy \\ bx + dy \end{array} \right)

Даже можно применить несколько преобразований подряд:

( a 1 c 1 b 1 d 1 ) ( a 2 c 2 b 2 d 2 ) = ( a 1 a 2 + c 1 b 2 a 1 c 2 + c 1 d 2 b 1 a 2 + d 1 b 2 b 1 c 2 + d 1 d 2 ) \left( \begin{array}{cc} a_1 & c_1 \\ b_1 & d_1 \end{array} \right) \left( \begin{array}{cc} a_2 & c_2 \\ b_2 & d_2 \end{array} \right) = \left( \begin{array}{cc} a_1a_2 + c_1b_2 & a_1c_2 + c_1d_2 \\ b_1a_2 + d_1b_2 & b_1c_2 + d_1d_2 \end{array} \right)

С помощью этой записи можно описать и, следовательно, составить большинство распространённых преобразований: вращение, масштабирование или наклонение. (На самом деле, все преобразования, которые являются линейными функциями, могут быть описаны.) Составные преобразования применяются эффективно в порядке от правого к левому.

Однако одно важное преобразование не является линейным и поэтому должно быть обработано как специальный случай при использовании этой записи: перемещение. Вектор перемещения (tx, ty) должен быть выражен отдельно как два дополнительных параметра.

Примечание: Хотя однородные координаты более сложные, чем декартовы координаты, однородные координаты в проективной геометрии приводят к матрицам преобразования 3×3 и могут выражать перемещения как линейные функции.

Примечание: Функции преобразования используются со свойством transform, но не с отдельными свойствами преобразования-translate, scale и rotate.

END_OF_DOCUMENT_MARKER

Примеры

Сравнение функций преобразования

Следующий пример демонстрирует 3D куб, созданный из элементов DOM и преобразований, и выпадающее меню, позволяющее выбрать разные функции преобразования для преобразования куба, чтобы вы могли сравнить эффекты различных типов.

Выберите один, и преобразование будет применено к кубу; через 2 секунды куб вернётся в исходное состояние. Исходное состояние куба немного повернуто с помощью transform3d(), чтобы вы могли увидеть эффект всех преобразований.

HTML

<main>
  <section id="example-element">
    <div class="face front">1</div>
    <div class="face back">2</div>
    <div class="face right">3</div>
    <div class="face left">4</div>
    <div class="face top">5</div>
    <div class="face bottom">6</div>
  </section>

  <div class="select-form">
    <label for="transfunction">Select a transform function</label>
    <select id="transfunction">
      <option selected>Choose a function</option>
      <option>rotate(360deg)</option>
      <option>rotateX(360deg)</option>
      <option>rotateY(360deg)</option>
      <option>rotateZ(360deg)</option>
      <option>rotate3d(1, 1, 1, 90deg)</option>
      <option>scale(1.5)</option>
      <option>scaleX(1.5)</option>
      <option>scaleY(1.5)</option>
      <option>scaleZ(1.5)</option>
      <option>scale3d(1, 1.5, 1.5)</option>
      <option>skew(17deg, 13deg)</option>
      <option>skewX(17deg)</option>
      <option>skewY(17deg)</option>
      <option>translate(100px, 100px)</option>
      <option>translateX(100px)</option>
      <option>translateY(100px)</option>
      <option>translateZ(100px)</option>
      <option>translate3d(50px, 50px, 50px)</option>
      <option>perspective(200px)</option>
      <option>matrix(1, 2, -1, 1, 80, 80)</option>
      <option>matrix3d(1,0,0,0,0,1,3,0,0,0,1,0,50,100,0,1.1)</option>
    </select>
  </div>
</main>

CSS

main {
  width: 400px;
  height: 200px;
  padding: 50px;
  background-image: linear-gradient(135deg, white, cyan, white);
}

#example-element {
  width: 100px;
  height: 100px;
  transform-style: preserve-3d;
  transition: transform 1.5s;
  transform: rotate3d(1, 1, 1, 30deg);
}

.face {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  position: absolute;
  backface-visibility: inherit;
  font-size: 60px;
  color: #fff;
}

.front {
  background: rgb(90 90 90 / 70%);
  transform: translateZ(50px);
}

.back {
  background: rgb(0 210 0 / 70%);
  transform: rotateY(180deg) translateZ(50px);
}

.right {
  background: rgb(210 0 0 / 70%);
  transform: rotateY(90deg) translateZ(50px);
}

.left {
  background: rgb(0 0 210 / 70%);
  transform: rotateY(-90deg) translateZ(50px);
}

.top {
  background: rgb(210 210 0 / 70%);
  transform: rotateX(90deg) translateZ(50px);
}

.bottom {
  background: rgb(210 0 210 / 70%);
  transform: rotateX(-90deg) translateZ(50px);
}

.select-form {
  margin-top: 50px;
}

JavaScript

const selectElem = document.querySelector("select");
const example = document.querySelector("#example-element");

selectElem.addEventListener("change", () => {
  if (selectElem.value === "Choose a function") {
    return;
  } else {
    example.style.transform = `rotate3d(1, 1, 1, 30deg) ${selectElem.value}`;
    setTimeout(() => {
      example.style.transform = "rotate3d(1, 1, 1, 30deg)";
    }, 2000);
  }
});

Результат

Спецификации

Спецификация
CSS Transforms Module Level 1
# transform-functions
CSS Transforms Module Level 2
# transform-functions

Совместимость с браузерами

Настольный Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
transform-function 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
matrix 1 12
3.5До Firefox 16, значения преобразования matrix() могли быть <length>, в дополнение к стандартным <number>.
10.5 3.1 18 4 11 3.2 1.0 2
matrix3d 12 12
10До Firefox 16, значения преобразования matrix3d() могли быть <length>, в дополнение к стандартным <number>.
15 4 18 10 14 3.2 1.0 3
perspective 12 12 10 15 4 18 10 14 3.2 1.0 3
rotate 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
rotate3d 12 12 10 15 4 18 10 14 3.2 1.0 3
rotateX 12 12 10 15 4 18 10 14 3.2 1.0 3
rotateY 12 12 10 15 4 18 10 14 3.2 1.0 3
rotateZ 12 12 10 15 4 18 10 14 3.2 1.0 3
scale 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
scale3d 12 12 10 15 4 18 10 14 3.2 1.0 3
scaleX 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
scaleY 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
scaleZ 12 12 10 15 4 18 10 14 3.2 1.0 3
skew 1 12
3.5В Firefox 14 была удалена экспериментальная поддержка skew(), но она была возвращена в Firefox 15.
10.5 3.1 18 4 11 3.2 1.0 2
skewX 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
skewY 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
translate 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
translate3d 12 12 10 15 4 18 10 14 3.2 1.0 3
translateX 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
translateY 1 12 3.5 10.5 3.1 18 4 11 3.2 1.0 2
translateZ 12 12 10 15 4 18 10 14 3.2 1.0 3

См. также

  • CSS transform свойство
  • Отдельные свойства преобразования:
    • translate
    • scale
    • rotate

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API