变形
范围框
- 受css控制的元素,其范围框是边框框,即元素边框的边界。在计算范围框时是不算上轮廓和外边距的。
注意
-
对于所有变形函数,元素都有自己的堆叠上下文。例如,经过缩放/放大的元素,其所占的空间大小是不变的,这一点对所有变形函数都成立。
-
变形函数的书写顺序可能会影响最后的显示结果,变形函数实施顺序,左->右
//书写1
img{
tranform: translate(200px) rotate(45deg);
}
//书写2
img{
transform: translate(200px) rotate(45deg);
}
- 旋转图像的过程中,主轴和垂轴也会变

-
当有多个变形函数时,每一个函数都要正确设置,否则整个变形都将失效
-
变形函数不能应用在基元行内框上,例如,span元素、a元素
平移函数
- translateX():延x轴平移
- translateY():延y轴平移
- translate():同时设置x轴和y轴的平移距离
- translateZ():设置z轴方向的平移,不能取值百分数。任何有关z轴的百分数都不能取值百分数
- translate3d():能同时设定x轴、y轴、z轴的平移距离
- 取值百分数相对于自身的宽度计算
缩放函数
- scaleX():缩放/放大宽度
- scaleY():缩放/放大高度
- scale():缩放/放大宽度和高度
- scaleZ():在z轴上缩放/放大
- scale3d():在三个方向上缩放/放大
旋转函数
- rotate():效果等同于rotateZ()
- rotateX():绕x轴旋转
- rotateY():绕y轴旋转
- rotateZ():绕z轴旋转
- rotate3d():前三个值指定x轴、y轴和z轴的分量。第四个值为角度值。
- 判断旋转的方向:站在向量的终点,顺时针旋转角度
倾斜函数
- skewX()
- skewY()
- skew()
视域函数
- perspective():参数为length,参数值必须为正数,不能为0,其它值将导致视域函数失效
- 当值越大,视觉越温和;当值越小,视觉越极端
- 若想在变形函数列表中设定视域值,要将视域函数放在最前面
参数分别为200px、800px、2000px

矩阵函数
- matrix()
- matrix3d()
变形原点
- transform-origin
- 取值:英文字母,例如,top、left、center等,百分数,长度值。对于z轴只能取长度值,百分数相对于自身的宽高计算
- 移动函数不受变形原点影响
开启3D变形
未开启3D立体模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#outer{
width: 200px;
height: 200px;
background-color: red;
transform: perspective(500px) rotateY(45deg);
}
#inner{
width: 100px;
height: 50px;
background-color: blue;
transform: perspective(500px) translateZ(50px) rotateX(45deg);
}
</style>
</head>
<body>
<div id="outer">
outer
<div id="inner">inner</div>
</div>
</body>
</html>
- 效果图

开启3D立体模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#outer{
width: 200px;
height: 200px;
background-color: red;
transform: perspective(500px) rotateY(45deg);
transform-style: preserve-3d;
}
#inner{
width: 100px;
height: 50px;
background-color: blue;
transform: perspective(500px) translateZ(50px) rotateX(45deg);
}
</style>
</head>
<body>
<div id="outer">
outer
<div id="inner">inner</div>
</div>
</body>
</html>
- 效果图

- 阻碍开启3D模式的属性如下:必须设置为以下值或不声明

定义视域
-
perspective属性
-
视域函数效果
.container{
display: flex;
justify-content: center;
}
.container>div{
width: 100px;
height: 100px;
background-color: red;
margin-left: 50px;
transform: perspective(500px) rotateX(-45deg);
}

- 视域属性效果
.container{
display: flex;
justify-content: center;
perspective: 500px;
}
.container>div{
width: 100px;
height: 100px;
background-color: red;
margin-left: 50px;
transform: rotateX(-45deg);
}

- 两者的区别:视域属性与视域函数不同的是,视域属性会应用到当前元素及其所有子元素上,所以,子元素会在其共有的父元素视域上变形。即perspective属性用来设定共有视域
移动视域的原点
- perspective-origin:能够设置的值与transform-origin相同
