This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

transform

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨сентябрь 2015 г.⁩.

« Справочник SVG атрибутов

В атрибуте transform перечисляются описания преобразований, применяемых как к самому элементу, так и к его последователям. Описания в списке разделяются пробелами или запятыми и применяются в порядке слева направо.

Контекст использования

Категории Нет
Значение <transform-list>
Анимация Да
Нормативная база SVG 1.1 (2nd Edition)

Типы преобразований

matrix(<a> <b> <c> <d> <e> <f>)

Преобразование с использованием матрицы из шести элементов. Преобразование matrix(a,b,c,d,e,f) равнозначно применению матрицы

(acebdf001)\begin{pmatrix} a & c & e \ b & d & f \ 0 & 0 & 1 \end{pmatrix},

которая отображает координаты из новой системы координат в предыдущую систему координат используя следующие формулы:

(xпред.yпред.1)=(acebdf001)(xнов.yнов.1)=(axнов.+cyнов.+ebxнов.+dyнов.+f1) \begin{pmatrix} x*{\mathrm{пред.}} \ y*{\mathrm{пред.}} \ 1 \end{pmatrix} = \begin{pmatrix} a & c & e \ b & d & f \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x*{\mathrm{нов.}} \ y*{\mathrm{нов.}} \ 1 \end{pmatrix} = \begin{pmatrix} a x*{\mathrm{нов.}} + c y*{\mathrm{нов.}} + e \ b x*{\mathrm{нов.}} + d y*{\mathrm{нов.}} + f \ 1 \end{pmatrix}
translate(<x> [<y>])

Перенос по осям x и y. Равнозначно matrix(1 0 0 1 x y). Если значение y опущено, оно принимается равным нулю.

scale(<x> [<y>])

Масштабирование по осям x и y. Равнозначно matrix(x 0 0 y 0 0). Если значение y опущено, оно принимается равным x.

rotate(<a> [<x> <y>])

Поворот на a градусов вокруг указанной точки. Если необязательные параметры x и y опущены, поворот будет осуществляться вокруг начала координат текущей пользовательской системы координат. Операция соответствует матрице

(cosa-sina0sinacosa0001)\begin{pmatrix} \cos a & -\sin a & 0 \ \sin a & \cos a & 0 \ 0 & 0 & 1 \end{pmatrix}

Если необязательные параметры x и y присутствуют, поворот будет осуществляться вокруг точки (x, y). Операция равнозначна следующему списку преобразований: translate(<x>, <y>) rotate(<a>) translate(-<x>, -<y>).

skewX(<a>)

Наклон относительно оси x на a градусов. Операция соответствует матрице

(1tga0010001)\begin{pmatrix} 1 & \tan(a) & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix}
skewY(<a>)

Наклон относительно оси y на a градусов. Операция соответствует матрице

(100tga10001) \begin{pmatrix} 1 & 0 & 0 \ \tan(a) & 1 & 0 \ 0 & 0 & 1 \end{pmatrix}

Примеры

Поворот и перенос SVG-элемента

В этом простом примере мы поворачиваем и переносим SVG-элемент, используя атрибут transform. Первоначальный элемент до преобразования показан полупрозрачным.

CSS (необязательный):

css
text {
  font: 1em sans-serif;
}

SVG:

html
<svg
  width="180"
  height="200"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <!-- Это элемент до применения переноса и поворота -->
  <rect
    x="50"
    y="50"
    height="100"
    width="100"
    style="stroke:#000; fill: #0086B2"
    fill-opacity="0.2"
    stroke-opacity="0.2"></rect>

  <!-- Здесь мы добавим текстовый элемент, повернём и перенесём оба элемента -->
  <rect
    x="50"
    y="50"
    height="100"
    width="100"
    style="stroke:#000; fill: #0086B2"
    transform="translate(30) rotate(45 50 50)"></rect>
  <text x="60" y="105" transform="translate(30) rotate(45 50 50)">
    Hello Moz!
  </text>
</svg>

Общее преобразование

Вот простой пример, чтобы понять общее преобразование. Мы рассмотрим матрицу преобразования matrix(1,2,3,4,5,6) и нарисуем жирную синюю линию из точки (10,20) в точку (30,40) в новой системе координат. Тонкая белая линия, проходящая через те же точки, нарисована над нею, используя первоначальную систему координат.

html
<svg width="160" height="230" xmlns="http://www.w3.org/2000/svg">
  <g transform="matrix(1,2,3,4,5,6)">
    <!-- Новая система координат (жирная синяя линия)
         x1 = 10 | x2 = 30
         y1 = 20 | y2 = 40
      -->
    <line
      x1="10"
      y1="20"
      x2="30"
      y2="40"
      style="stroke-width: 10px; stroke: blue;" />
  </g>

  <!-- Предыдущая система координат (тонкая белая линия)
       x1 = 1 * 10 + 3 * 20 + 5 = 75  | x2 = 1 * 30 + 3 * 40 + 5 = 155
       y1 = 2 * 10 + 4 * 20 + 6 = 106 | y2 = 2 * 30 + 4 * 40 + 6 = 226
    -->
  <line
    x1="75"
    y1="106"
    x2="155"
    y2="226"
    style="stroke-width: 1px; stroke: white;" />
</svg>

Элементы

Следующие элементы могут использовать атрибут transform: