transform
Атрибут transform определяет список определений преобразований, которые применяются к элементу и его потомкам.
Примечание: Начиная с SVG2, transform является атрибутом представления, что означает, что он может использоваться в качестве свойства CSS. Однако имейте в виду, что существует несколько различий в синтаксисе между свойством CSS и атрибутом. Обратитесь к документации свойства CSS transform для конкретного синтаксиса, который следует использовать в этом случае.
Вы можете использовать этот атрибут с любым элементом SVG.
Пример
<svg viewBox="-40 0 150 100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g fill="grey" transform="rotate(-10 50 100) translate(-36 45.5) skewX(40) scale(1 0.5)"> <path id="heart" d="M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z" /> </g> <use href="#heart" fill="none" stroke="red" /> </svg>
В SVG 1.1 этот атрибут разрешено использовать только для 16 элементов: <a>, <circle>, <clipPath>, <defs>, <ellipse>, <foreignObject>, <g>, <image>, <line>, <path>, <polygon>, <polyline>, <rect>, <switch>, <text> и <use>.
Также, как наследие от SVG 1.1, <linearGradient> и <radialGradient> поддерживают атрибут gradientTransform, а <pattern> поддерживает атрибут patternTransform, оба из которых работают точно так же, как и атрибут transform.
| Значение | <transform-list> |
|---|---|
| Значение по умолчанию | none |
| Анимируемо | Да |
Функции преобразования
Следующие функции преобразования могут использоваться атрибутом transform <transform-list>
Предупреждение: Согласно спецификации, вы также должны иметь возможность использовать функции преобразования CSS функции преобразования. Однако совместимость не гарантируется.
Матрица
Функция преобразования matrix(<a> <b> <c> <d> <e> <f>) задает преобразование в виде матрицы преобразования из шести значений. matrix(a,b,c,d,e,f) эквивалентно применению матрицы преобразования:
Что отображает координаты из предыдущей системы координат в новую систему координат с помощью следующих равенств матриц:
Пример
<svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"> <rect x="10" y="10" width="30" height="20" fill="green" /> <!-- In the following example we are applying the matrix: [a c e] [3 -1 30] [b d f] => [1 3 40] [0 0 1] [0 0 1] which transform the rectangle as such: top left corner: oldX=10 oldY=10 newX = a * oldX + c * oldY + e = 3 * 10 - 1 * 10 + 30 = 50 newY = b * oldX + d * oldY + f = 1 * 10 + 3 * 10 + 40 = 80 top right corner: oldX=40 oldY=10 newX = a * oldX + c * oldY + e = 3 * 40 - 1 * 10 + 30 = 140 newY = b * oldX + d * oldY + f = 1 * 40 + 3 * 10 + 40 = 110 bottom left corner: oldX=10 oldY=30 newX = a * oldX + c * oldY + e = 3 * 10 - 1 * 30 + 30 = 30 newY = b * oldX + d * oldY + f = 1 * 10 + 3 * 30 + 40 = 140 bottom right corner: oldX=40 oldY=30 newX = a * oldX + c * oldY + e = 3 * 40 - 1 * 30 + 30 = 120 newY = b * oldX + d * oldY + f = 1 * 40 + 3 * 30 + 40 = 170 --> <rect x="10" y="10" width="30" height="20" fill="red" transform="matrix(3 1 -1 3 30 40)" /> </svg>
Переместить
Функция преобразования translate(<x> [<y>]) перемещает объект на x и y. Если y не указано, оно предполагается равным 0.
Другими словами:
xnew = xold + <x> ynew = yold + <y>
Пример
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> <!-- No translation --> <rect x="5" y="5" width="40" height="40" fill="green" /> <!-- Horizontal translation --> <rect x="5" y="5" width="40" height="40" fill="blue" transform="translate(50)" /> <!-- Vertical translation --> <rect x="5" y="5" width="40" height="40" fill="red" transform="translate(0 50)" /> <!-- Both horizontal and vertical translation --> <rect x="5" y="5" width="40" height="40" fill="yellow" transform="translate(50 50)" /> </svg>
Масштабирование
Функция преобразования scale(<x> [<y>]) задает операцию масштабирования на x и y. Если y не указано, оно предполагается равным x.
Пример
<svg viewBox="-50 -50 100 100" xmlns="http://www.w3.org/2000/svg"> <!-- uniform scale --> <circle cx="0" cy="0" r="10" fill="red" transform="scale(4)" /> <!-- vertical scale --> <circle cx="0" cy="0" r="10" fill="yellow" transform="scale(1, 4)" /> <!-- horizontal scale --> <circle cx="0" cy="0" r="10" fill="pink" transform="scale(4, 1)" /> <!-- No scale --> <circle cx="0" cy="0" r="10" fill="black" /> </svg>
Поворот
Функция преобразования rotate(<a> [<x> <y>]) задаёт поворот на a градусов вокруг заданной точки. Если необязательные параметры x и y не указаны, поворот выполняется вокруг начала текущей системы координат пользователя. Если необязательные параметры x и y указаны, поворот выполняется вокруг точки (x, y).
Пример
<svg viewBox="-12 -2 34 14" xmlns="http://www.w3.org/2000/svg"> <rect x="0" y="0" width="10" height="10" /> <!-- rotation is done around the point 0,0 --> <rect x="0" y="0" width="10" height="10" fill="red" transform="rotate(100)" /> <!-- rotation is done around the point 10,10 --> <rect x="0" y="0" width="10" height="10" fill="green" transform="rotate(100, 10, 10)" /> </svg>
SkewX
Функция преобразования skewX(<a>) задаёт наклон по оси x на a градусов.
Пример
<svg viewBox="-5 -5 10 10" xmlns="http://www.w3.org/2000/svg"> <rect x="-3" y="-3" width="6" height="6" /> <rect x="-3" y="-3" width="6" height="6" fill="red" transform="skewX(30)" /> </svg>
SkewY
Функция преобразования skewY(<a>) задаёт наклон по оси y на a градусов.
Пример
<svg viewBox="-5 -5 10 10" xmlns="http://www.w3.org/2000/svg"> <rect x="-3" y="-3" width="6" height="6" /> <rect x="-3" y="-3" width="6" height="6" fill="red" transform="skewY(30)" /> </svg>
Спецификации
| Спецификация |
|---|
| CSS Transforms Модуль 1 уровня # svg-transform |
| Масштабируемая векторная графика (SVG) 2 # TransformProperty |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform