css3 中 transfrom 属性用户元素空间位置的变换。
本文结果中展现的画面都是基于下图进行的变换css
translate(15px, 25px) #元素沿着 X轴正方向平移 15px,沿着 Y轴正方向平移 25px
Matrix(1, 0, 0, 1, 15, 25) #效果相同
复制代码
scale(2, 0.5) #元素在 X轴上拉伸一倍,在 Y轴上缩小一倍
Matrix(2, 0, 0, 0.5, 0, 0) #效果相同
复制代码
rotate(30deg) #围绕屏幕法向量顺时针旋转 30度
Matrix(0.866, 0.5, -0.5, 0.866, 0, 0) #效果相同 Sin(30) ≈ 0.866
复制代码
transform 变换原点html
rotate(30deg);
复制代码
rotate(30deg);
transform-origin: 'left top';
复制代码
设置 transform-origin 为元素坐上点后,元素围绕左上角旋转css3
transform: translateX(100px) rotate(90deg);
复制代码
结果以下图所示,能够发现,结果中黄色方框先沿着X轴正方向移动100px,而后绕Z轴进行了90度顺时针渲染。故 transform 中,各个变换是从左往右依次执行 web
transform: rotate(90deg) translateX(100px);
复制代码
接着,咱们将 transform 中两个变换顺序调转,结果以下图所示。能够发现黄色方框先绕Z轴旋转90度,而后沿着X轴正方向移动100px。 bash
由上一章节可知,本章节中平移变换 translateX(100px) 对应的变换矩阵 translateMat 为spa
rotate(90deg)对应的变换矩阵 rotateMat 为3d
对 translateMat 和 rotateMat 进行矩阵乘积运算,并将运算结果导入 transform 属性,查看结果code
CSS 代码为transform: matrix(0, 1, -1, 0, 0, 0)
,运行结果以下图所示,可见设置 matrix 等于 rotateMat * translateMat 的变换效果等效于transform: rotate(90deg) translateX(100px);
orm
CSS3三维世界坐标系以下图所示,采用的是左手坐标系,Y轴方向沿着屏幕向下 cdn
perspective 设置的是透视点到屏幕及(XYZ空间中Z=0平面的距离),即透视点位置为(0, 0, 150px)
<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
position: relative;
height: 150px;
width: 150px;
margin: 50px;
padding:10px;
border: 1px solid black;
-webkit-perspective:150; /* Safari and Chrome */ #设置 perspecctive 为 150px
}
#div2
{
padding:50px;
position: absolute;
border: 1px solid black;
background-color: yellow;
-webkit-transform: rotateX(45deg); /* Safari and Chrome */
}
</style>
</head>
<body>
<div id="div1">
<div id="div2">HELLO</div>
</div>
</body>
</html>
复制代码
结果:
<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
position: relative;
height: 150px;
width: 150px;
margin: 50px;
padding:10px;
border: 1px solid black;
-webkit-perspective:150; /* Safari and Chrome */ #设置 perspecctive 为 150px
}
#div2
{
padding:50px;
position: absolute;
border: 1px solid black;
background-color: yellow;
-webkit-transform: translateZ(-50px) rotateX(45deg); /* Safari and Chrome */
}
</style>
</head>
<body>
<div id="div1">
<div id="div2">HELLO</div>
</div>
</body>
</html>
复制代码
在 id=div2 的元素上添加了 translateZ(-50px),即将元素沿着 Z轴负轴平移了 150px,结果为:
rotateY(45deg) #围绕 Y轴顺时针旋转 45 度
rotateX(-45deg) #围绕 Z轴逆时针旋转 45 度
复制代码