变换
变换是一种样式属性,可帮助你使用 2D 或 3D 变换来修改组件的外观和位置。不过,一旦应用了变换,布局仍然会围绕变换后的组件保持不变,因此它可能会与附近的组件重叠。你可以为变换后的组件、附近的组件添加 margin,或者为容器添加 padding,以防止这种重叠。
示例
参考
变换
transform 接受一个由变换对象组成的数组,或以空格分隔的字符串值。每个对象都以要变换的属性作为键,以及用于变换的值作为值。对象不应组合使用。每个对象只使用一个键/值对。
旋转变换需要字符串,这样变换才能用度数(deg)或弧度(rad)表示。例如:
{
transform: [{rotateX: '45deg'}, {rotateZ: '0.785398rad'}],
}
也可以使用以空格分隔的字符串来实现相同效果:
{
transform: 'rotateX(45deg) rotateZ(0.785398rad)',
}
倾斜变换需要字符串,这样变换才能用度数(deg)表示。例如:
{
transform: [{skewX: '45deg'}],
}
矩阵变换
matrix 变换接受一个 4x4 变换矩阵,作为包含 16 个数字的数组。这使你可以在一次操作中应用结合了平移、旋转、缩放和倾斜的复杂变换。
矩阵按列主序指定:
{
transform: [
{
matrix: [
scaleX,
skewY,
0,
0,
skewX,
scaleY,
0,
0,
0,
0,
1,
0,
translateX,
translateY,
0,
1,
],
},
];
}
例如,要应用缩放和倾斜的组合:
{
transform: [
{
matrix: [
1, 0.5, 0, 0, 0.5, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
],
},
];
}
当你需要应用预先计算好的变换矩阵时,例如来自动画库的矩阵,或者在构建 UI 编辑器应用时,矩阵变换非常有用。对于基本变换,建议使用单独的变换属性(scale、rotate、translate 等),因为它们更易读。
| 类型 | 必需 |
|---|---|
object 数组:{matrix: number[]}、{perspective: number}、{rotate: string}、{rotateX: string}、{rotateY: string}、{rotateZ: string}、{scale: number}、{scaleX: number}、{scaleY: number}、{translateX: number}、{translateY: number}、{skewX: string}、{skewY: string} 或 string | 否 |
decomposedMatrix、rotation、scaleX、scaleY、transformMatrix、translateX、translateY
请改用 transform 属性。
变换原点
transformOrigin 属性用于设置视图变换的原点。变换原点是应用变换时所围绕的点。默认情况下,变换的原点是 center。
示例
值
变换原点支持 px、percentage 以及关键字 top、left、right、bottom、center 值。
transformOrigin 属性可以使用一个、两个或三个值来指定,每个值代表一个偏移量。
单值语法:
- 该值必须是
px、percentage,或关键字left、center、right、top和bottom之一。
{
transformOrigin: '20px',
transformOrigin: 'bottom',
}
双值语法:
- 第一个值(x 偏移)必须是
px、percentage,或关键字left、center、right之一。 - 第二个值(y 偏移)必须是
px、percentage,或关键字top、center、bottom之一。
{
transformOrigin: '10px 2px',
transformOrigin: 'left top',
transformOrigin: 'top right',
}
三值语法:
- 前两个值与双值语法相同。
- 第三个值(z 偏移)必须是
px。它始终表示 Z 偏移。
{
transformOrigin: '2px 30% 10px',
transformOrigin: 'right bottom 20px',
}
数组语法
transformOrigin 也支持数组语法。它让你在 Animated API 中更方便地使用它。它还避免了字符串解析,因此效率可能更高。
{
// 使用数值
transformOrigin: [10, 30, 40],
// 混合数值和百分比值
transformOrigin: [10, '20%', 0],
}
你也可以参考 MDN 关于 变换原点 的指南以获取更多信息。