变形 transform(2D)
变形可以改变盒子在平面内的形态(位移、旋转、缩放等等)
位移 translate
translate可以让盒子沿着x轴或者y轴来移动。
语法:
transform: translate(x, y);
transform: translateX(x);
transform: translateY(y);
他和margin的区别。
- margin移动盒子**会**影响其余的盒子。把其他人挤走。
- 位移translate移动盒子**不会**影响其他的盒子。不脱标。
注意:
移动的时候可以写百分比,如果使用的百分比,移动的是盒子自身的宽度
transform: translateX(100%);
应用- 盒子水平和垂直
可以让一个子盒子在父盒子里面水平和垂直居中。
.inner {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: 100px;
background-color: skyblue;
transform: translate(-50%, -50%);
}
/* .inner {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 200px;
height: 200px;
background-color: skyblue;
} */
开门大吉案例
效果:
<!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>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.box {
overflow: hidden;
width: 1366px;
height: 600px;
margin: 50px auto;
background: url(./images/bg.jpg) no-repeat top center;
}
.box::before,
.box::after {
content: '';
width: 50%;
height: 600px;
transition: .5s;
background: url(./images/fm.jpg) no-repeat;
}
.box::before {
float: left;
background-color: pink;
}
.box::after {
float: right;
background-color: purple;
/* 背景图片右对齐 */
background-position: right center;
}
/* .box:hover
.box::before */
/* 鼠标经过 box 大盒子, 两个子盒子(before 和 after)来拉动 */
.box:hover::before {
/* 百分比是盒子自身的宽度 */
transform: translateX(-100%);
}
.box:hover::after {
/* 百分比是盒子自身的宽度 */
transform: translateX(100%);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
旋转 rotate
旋转可以让盒子旋转角度。
语法:
transform: rotate(45deg); 一定要写单位
如果是正度数,则是顺时针旋转
如果是负度数,则是逆时针旋转
设置中心点 transform-origin
设置旋转的中心点位置
transform-origin: right bottom;
多形态变形小技巧
-
如果需要移动,也需要旋转,则一定要先写移动,后写旋转,css属性书写顺序影响代码执行。
transform: translate(-50%, -50%) rotate(360deg); -
注意,多个值之前用 空格隔开。
缩放 scale
语法:
transform: scale(1.2);
他是用中心点来进行缩放的,不会影响其他的盒子。