# 2D变形
变形是CSS3中比较颠覆性的特征之一,今天介绍四种2D变形旋转、缩放、倾斜、位移变形。
变形在CSS3用 transform 属性 来实现。
# transform-origin 属性
transform-origin 表示旋转的原点,默认是在盒子的中心位置(center)。
transform-origin 的值可以是一个、两个或者三个,其中的每个值都表示一个方向上的偏移量。没有明确定义将默认为 center。
transform-origin: x y z;
- 第一个值 表示X轴上的偏移量, 可以使用 像素等长度单位、百分比 表示;也可以使用 left、center、right、top、bottom当中的一个值表示。
- 第二个值 表示Y轴上的偏移量, 可以使用 像素等长度单位、百分比 表示;也可以使用 left、center、right、top、bottom当中的一个值表示。
- 第三个值 表示Z轴上的偏移量,只能使用 像素 等长度单位表示。
# 旋转变形
旋转变形即使一个盒子发生旋转。
用rotate() 函数来给 transform 属性赋值,即可实现旋转变形,若角度为正,则顺时针旋转,否则逆时针旋转。
语法
transform: rotate(45deg)
举例
盒子以中心为原点,旋转 45度。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>旋转变形</title>
<style>
.box {
margin: 50px;
width: 100px;
height: 100px;
background-color: blue;
transform-origin: center;
transform: rotate(45deg);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
# 缩放变形
缩放变形即放大缩小一个盒子。
用scale() 函数来给 transform 属性赋值,即可实现缩放变形, scale 函数接受的值为缩放比例, 大于1 表示放大, 小于1表示缩小。
语法
transform: scale(2);
举例
三个盒子,一个放大,一个缩小,一个不变。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
div {
display: inline-block;
width: 100px;
height: 100px;
background-color: orange;
margin: 50px;
}
.box1 {
transform: scale(2);
}
.box3 {
transform: scale(0.5);
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</body>
</html>
# 倾斜变形
倾斜变形即使一个盒子倾斜。
用skew() 函数来给 transform 属性赋值,即可实现倾斜变形, skew 函数接受两个值, 第一个值表示X轴的斜切角度,第二个值表示Y轴的斜切角度。
语法
tranform: skew(10deg, 20deg)
举例
两个盒子,其中一个盒子不变,另一个盒子x轴倾斜10 度, Y轴倾斜0度。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>斜切变形</title>
<style>
div {
display: inline-block;
width: 100px;
height: 100px;
background-color: orange;
margin: 50px;
}
.box2 {
transform-origin: center;
transform: skew(10deg, 0deg);
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
# 位移变形
位移变形即使一个盒子的 位置发生位移, 有点像之前讲到过的 相对定位,同样位移变形后,原来的位置无法被别的盒子占用。
用translate() 函数来给 transform 属性赋值,即可实现位移变形, translate函数接受两个值, 第一个值表示向右移动距离, 第二个值表示向下移动距离。
语法
transform: translate(100px 200px)
举例
三个盒子,使得第二个盒子的位置发生变化。
<!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>位移变形</title>
<style>
.box1 {
width: 100px;
height: 100px;
background-color: red;
}
.box2 {
width: 100px;
height: 100px;
background-color: green;
transform: translate(200px, 200px);
}
.box3 {
width: 100px;
height: 100px;
background-color: blue;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</body>
</html>