Transform
Generate multiple transform function strings easily without the need of template strings.
This will give you more flexibility when creating or updating transform functions all over your app. It has sensible defaults, but any length value can be overridden either in the generator function or the actual value declaration.
Usage
import { generateTransform } from 'style-genie'
const transform = generateTransform()
// default usage
transform({ translate: 10 }) // 'translate(10%)'
transform({ translate: [10, 20] }) // 'translate(10%, 20%)'
transform({ translate: { x: 10, y: 20 } }) // 'translate(10%, 20%)'
transform({ translate: '10em' }) // 'translate(10em)'
// multiple transforms
transform({
translate: 10,
scale: 1.5,
}) // 'translate(10%) scale(1.5)'
// duplicate transforms
transform([
{
translate: 10,
},
{
translate: 10,
},
]) // 'translate(10%) translate(10%)'
// custom unit override for this call
transform(
{
translate: 10,
},
{
units: { transform: { xy: 'em' } },
}
) // 'translate(10em)'
Parameters
The generateTransform function accepts only one options parameter used to set the default values. It can have the following properties.
property
type
description
units
object
holds properties to change the default units
units.perspective
string
changes default unit for perspective
units.rotate
string
changes default unit for rotate
units.skew
string
changes default unit for skew
units.translate
object
translate xy can have different props than z
units.translate.xy
string
changes default unit for translateX/Y
units.translate.z
string
change default unit for translateZ
Default options
{
units: {
perspective: 'px', // Affects the perspective() function
rotate: 'deg', // Affects rotate, rotateX/Y/Z and rotate3d
skew: 'deg', // Affects skew, skewX/Y
translate: {
xy: '%', // Affects translate, translateX/Y and translate3d
z: 'px', // Affects translateZ and translate3d
}
}
}
Note: The functions matrix, matrix3d, scale, scaleX, scaleY, scaleZ, scale3d do not user units and thus can not be overridden.
Transform function
The transform is the result of the generator function. You have to call it to get an actual transform string as output and it can be used throughout your app.
parameters
type
description
transforms
object
| object[]
can have any of the transform functions as properties
overrides
object
options
object that will override units for this function call only
The transforms
parameter can have one or more of the following properties.
parameters
description
matrix
Describes a homogeneous 2D transformation matrix
matrix3d
Describes a 3D transformation as a 4×4 homogeneous matrix
perspective
Sets the distance between the user and the z=0 plane
rotate
Rotates an element around a fixed point on the 2D plane
rotateX
Rotates an element around the horizontal axis
rotateY
Rotates an element around the vertical axis
rotateZ
Rotates an element around the z-axis
rotate3d
Rotates an element around a fixed axis in 3D space
scale
Scales an element up or down on the 2D plane
scaleX
Scales an element up or down horizontally
scaleY
Scales an element up or down vertically
scaleZ
Scales an element up or down along the z-axis
scale3d
Scales an element up or down in 3D space
skew
Skews an element on the 2D plane
skewX
Skews an element in the horizontal direction
skewY
Skews an element in the vertical direction
translate
Translates an element on the 2D plane
translateX
Translates an element horizontally
translateY
Translates an element vertically
translateZ
Translates an element along the z-axis
translate3d
Translates an element in 3D space
Matrix
The matrix
property describes a homogeneous 2D transformation matrix.
interface MatrixObject {
a: number; b: number;
c: number; d: number;
tx: number; ty: number;
}
type MatrixArray = [
number, number,
number, number,
number, number
]
// Usage
transform({ matrix: MatrixObject | MatrixArray })
Matrix3d
Similar to matrix, the matrix3d
property describes a 3D transformation as a 4×4 homogeneous matrix.
interface Matrix3dObject {
a1: number; a2: number; a3: number; a4: number;
b1: number; b2: number; b3: number; b4: number;
c1: number; c2: number; c3: number; c4: number;
d1: number; d2: number; d3: number; d4: number;
}
type Matrix3dArray = [
number, number, number, number,
number, number, number, number,
number, number, number, number,
number, number, number, number
]
// Usage
transform({ matrix3d: Matrix3dObject | Matrix3dArray })
Perspective
Although not commonly used, the perspective
property sets the distance between the user and the z=0 plane.
// Usage
transform({ perspective: number | string })
Rotate/X/Y/Z
The rotate
property allows for the rotation of an element around a fixed point on the 2D plane. The some of the other rotation properties have the same signature, but affect only a single axis. The rotateX
property describes the rotation of an element around the horizontal axis, rotateY
will affect the vertical axis, while rotateZ
will work only on the z-axis.
// Usage
transform({ rotate: number | string })
transform({ rotateX: number | string })
transform({ rotateY: number | string })
transform({ rotateZ: number | string })
Rotate3d
The property rotate3d
will allow for the rotation around a fixed axis in 3D space
interface Rotate3dObject {
x: number
y: number
z: number
a: number | string
}
type Rotate3dArray = [number, number, number, number | string]
// Usage
transform({ rotate3d: Rotate3dObject | Rotate3dArray | string })
Scale
Using the Scale
property allows for scaling an element up or down on the 2D plane
interface ScaleObject {
sx: number
sy?: number
}
type ScaleArray = [number, number?]
// Usage
transform({ scale: ScaleObject | ScaleArray | number })
ScaleX/Y/Z
Similar to the scale property, scaleX
, scaleY
and scaleZ
will only have effect on their respective axes.
// Usage
transform({ scaleX: number })
transform({ scaleY: number })
transform({ scaleZ: number })
Scale3d
When dealing with scaling the the 3D space, the scale3d
property will allow you to change the scaling on all dimensions at once.
interface Scale3dObject {
sx: number
sy: number
sz: number
}
type Scale3dArray = [number, number, number]
// Usage
transform({ scale3d: Scale3dObject | Scale3dArray })
Skew
The property skew
can be used to skew an element on the 2D plane.
interface SkewObject {
ax: number | string
ay?: number | string
}
type SkewArray = [number | string, (number | string)?]
// Usage
transform({ skew: SkewObject | SkewArray | number | string })
SkewX/Y
The simpler skewX
and skewY
are a subset of the skew function and will skew an element in the horizontal or vertical direction, respectively.
// Usage
transform({ skewX: number | string })
transform({ skewY: number | string })
Translate
The translate
property allows the user to move an element on the 2D plane.
interface TranslateObject {
tx: number | string
ty?: number | string
}
type TranslateArray = [number | string, (number | string)?]
// Usage
transform({ translate: TranslateObject | TranslateArray | number | string })
TranslateX/Y/Z
The axis locked translates, translateX
, translateY
, translateZ
allow for an element to be moved on their specific planes.
// Usage
transform({ translateX: number | string })
transform({ translateY: number | string })
transform({ translateZ: number | string })
Translate3d
A junction of the previous translate functions, the translate3d
property is used to translate an element in all planes at once.
interface Translate3dObject {
tx: number | string
ty: number | string
tz: number | string
}
type Translate3dArray = [number | string, number | string, number | string]
// Usage
transform({ translate3d: Translate3dObject | Translate3dArray | string })
Last updated
Was this helpful?