SVG的transform
SVG的transform
transform属性定义了应用于元素和元素的子元素的变换定义的列表。变换列表中的项目由空格和/或逗号分隔,并从右到左应用。 SVG的transform属性中的所有函数的参数只能是纯数字,比如说,我们不能在translate函数中使用%单位(虽说在火狐浏览器中的CSS transform属性也不能使用—此处有链接—),rotate,skew角度只能使用deg单位,我们能在CSS transform属性中可以使用的所有其它单位在这里都不能使用。
注:火狐浏览器现在已经支持transform-origin上应用带有%的值,不过与chorme不同的是,火狐的%是相对于svg画布而不是元素自身。 SVG元素和HTML元素工作方式的差异,主要是由元素坐标系的不同造成的。无论是HTML元素还是SVG元素,都有一个自己的坐标系。对于HTML元素,初始的坐标原点在元素的中心。对于SVG元素,其坐标系原点是在SVG画板的(0,0)处(假设在SVG标签内祖先元素和自身都不存在任何变换)。如果SVG元素的中心点不在画板的(0,0)点,像rotate,scale或者skew这些变换的结果,都会与HTML元素上应用的结果大不一样。
translate transform: HTML 元素 (左边) vs SVG 元素 (右边)
上面的图片展示了当translate
分别应用到HTML元素和SVG元素上的区别。
正如我们看到的,它们的区别在于各自坐标系的位置。HTML元素的坐标原点在自身50% 50%
处,SVG元素的坐标原点在SVG画布0 0
处,不过无论坐标原点处在什么位置,它们最后呈现的效果都是一样的。
对于HTML和SVG元素,我们都可以在 CSS transform
中使用3种2D的位移函数:translateX(tx)
,translateY(ty)
和translate(tx[,
ty])
。前两个分别作用在 X
方向 和 Y
方向(相对于元素自身的坐标系)。需要注意的是,如果在translate
之前存在另外的变换,X
方向,Y
方向就可能不再代表着水平方向,垂直方向。而第三个位移函数则同时在x
,y
方向上分别移动tx
,ty
个单位,ty
是可选的,如果不明确指定,默认是0
。
SVG元素除了CSS tranform
属性,还有SVG tranform
属性。在这个例子中,我们在tranform
属性中只定义了translate
,SVG属性中可以使用逗号分隔,或者空格分隔,其中1
代表着1px
,下面的两种为SVG元素应用位移的方式是等价的:
使用CSS transform
:
连续的translate()
将会被相加在一起,比如我们可以书写一个与translate(tx1
+ tx2, ty1 + ty2)
等价的链式写法translate(tx1, ty1) translate(tx2, ty2)
,注意,这种等价关系只有当两个translate()
之间没有任何其它的转换的情况下成立。从translate(tx,
ty)
返回到初始状态,应用translate(-tx, -ty)
即可。
transform转换
通过 CSS3 转换,我们能够对元素进行移动、缩放、转动、拉长或拉伸。转换是使元素改变形状、尺寸和位置的一种效果。
语法:transform: none|transform-functions;
2D 转换方法:
- translate()
- rotate()
- scale()
- skew()
- matrix()
值 | 描述 |
---|---|
none | 定义不进行转换。 |
matrix(n,n,n,n,n,n) | 定义 2D 转换,使用六个值的矩阵。 |
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) | 定义 3D 转换,使用 16 个值的 4x4 矩阵。 |
translate(x,y) | 定义 2D 转换。 |
translate3d(x,y,z) | 定义 3D 转换。 |
translateX(x) | 定义转换,只是用 X 轴的值。 |
translateY(y) | 定义转换,只是用 Y 轴的值。 |
translateZ(z) | 定义 3D 转换,只是用 Z 轴的值。 |
scale(x[,y]?) | 定义 2D 缩放转换。 |
scale3d(x,y,z) | 定义 3D 缩放转换。 |
scaleX(x) | 通过设置 X 轴的值来定义缩放转换。 |
scaleY(y) | 通过设置 Y 轴的值来定义缩放转换。 |
scaleZ(z) | 通过设置 Z 轴的值来定义 3D 缩放转换。 |
rotate(angle) | 定义 2D 旋转,在参数中规定角度。 |
rotate3d(x,y,z,angle) | 定义 3D 旋转。 |
rotateX(angle) | 定义沿着 X 轴的 3D 旋转。 |
rotateY(angle) | 定义沿着 Y 轴的 3D 旋转。 |
rotateZ(angle) | 定义沿着 Z 轴的 3D 旋转。 |
skew(x-angle,y-angle) | 定义沿着 X 和 Y 轴的 2D 倾斜转换。 |
skewX(angle) | 定义沿着 X 轴的 2D 倾斜转换。 |
skewY(angle) | 定义沿着 Y 轴的 2D 倾斜转换。 |
perspective(n) | 为 3D 转换元素定义透视视图。 |