transform
可以修改元素的可视化模型,类似于position: relative;
之后位置偏移,只修改视觉显示,不会影响旁边元素的布局。
先按照常规布局绘制元素,确定布局和显示之后应用transform规则修改视觉效果。
使用transform
可以对元素视图进行移动,旋转,缩放,skew。
设置none
以外的取值时,会创建一个[stacking context],这个上下文会成为内部position: fixed
元素的包含块。
百分数长度计算依据为元素吃尺寸.
transform默认的原点是元素的中心(50%, 50%)处,使用transform-origin可以修改原点位置。
效果和解释: https://www.webkit.org/blog-files/3d-transforms/transform-style.html
deg为正时将元素顺时针旋转对应角度,为负时逆时针旋转对应角度。旋转中心为transform-origin
如下面的例子:
旋转矩形后面的灰色矩形模拟元素原始的位置。
以transform-origin为中心缩放元素,x,y大于1时放大,小于1时缩小。
根据指定的x,y移动元素
以transform-origin为中心,将元素在X轴上倾斜,使元素竖直方向于Y轴产生deg度夹角
以transform-origin为中心,将元素在Y轴上倾斜,使元素水平方向于X轴产生deg度夹角
所有2d transform都可以通过matrix() 实现,window.getComputedStyle()返回的transform对应值也是matirx()表示
2d transform 实现立方体效果
尽量使用foo3d()版本的函数以减少hardware compositing以提高性能(rotate3d太难计算了http://stackoverflow.com/questions/15207351/rotate3d-shorthand)
3d transform需要建立一个视角(perspective), 有以下两种方式建立视角:
perspective
属性perspective()
函数两种方法的区别是父元素上使用perspective属性创建的节点为所有子节点共用, 单独在元素
上使用的perspective()
函数为每个元素创建视角
想象一个金字塔位于z平面和观察者之间, 金字塔的底部平行于z平面且位于坐标0处. perspective
的值表示金字塔顶部到
z平面的距离, 类似于摄像机镜头的位置, 它的值越大, 金字塔越尖, 元素变换看起来就越不明显, 通常700到1000被认为是
正常距离, 可以用来作为初始值开始调整.
perspective-origin
用于控制视点的位置MDN perspective-origin demo
以x轴方向为轴旋转元素
以y轴方向为轴旋转元素
以z轴方向为轴旋转元素