目录
一.平面转换
平面转换概念:使用transform属性实现元素的位移、旋转、缩放等效果。
1.位移:使用translate实现元素位移效果
- 语法:transform: translate(水平移动距离,垂直移动距离);
- 取值(正负均可):像素单位数值;百分比(参照物为盒子自身尺寸)
- 注意: X轴正向为右, Y轴正向为下
- 技巧:translate()如果只给出一个值, 表示x轴方向移动距离;单独设置某个方向的移动距离: translateX() & translateY()
实现代码:
1.位移—水平/垂直移动
<!DOCTYPE html>
<html>
<head lang="en">
<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>
.father{
width: 300px;
height: 300px;
margin: 50px auto;
border: 1px solid black;
}
.son{
width: 100px;
height:100px;
background-color: pink;
translate: all 0.5s; /*位移慢慢变化*/
}
/*鼠标移到父盒子 ,son改变位置*/
.father:hover .son{
transform: translate(50px,100px); /*水平50 垂直100*/
transform: translate(-50px,-100px);
transform: translate(-50%,-100%); /* %参考自身像素决定 */
transform: translate(50px); /* 只水平移动50px */
transform: translateX(50px); /* 只水平移动50px */
transform:translateY(100px); /* 垂直移动 */
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
2.位移—绝对居中
<!DOCTYPE html>
<html>
<head lang="en">
<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>
.father{
width: 500px;
height: 300px;
margin: 100px auto;
border: 1px solid black;
}
.son{
/* 绝对定位居中*/
position: absolute;
left: 50%;
top: 50%;
/* 位移的方法 :百分比从参考盒子自身的大小 计算结果*/
transform: translate(-50%,-50%);
width: 200px;
height:100px;
background-color: pink;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
3.双开门案例
<!DOCTYPE html>
<html>
<head lang="en">
<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>
*{
margin: 0;
padding: 0;
}
.box{
width: 1000px;
height: 600px;
margin: 0 auto;
background:url("./image/DSCN0013.JPG");
overflow: hidden;
}
/* 伪元素: */
.box::before,
.box::after{
float: left;
content:'' ;
width: 50%;
height: 600px;
background-image: url("./image/DSCN0028.JPG");
transition: all 0.5s;
}
/*单独控制after的背景图位置*/
.box::after{
background-position: right 0;
}
/*鼠标移入box,before向左移动 100%*/
.box:hover::before{
transform: translate(-100%);
}
/*鼠标移入box,after右侧移动*/
.box:hover::after{
transform: translateX(100%);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
2.旋转:平面旋转实现元素旋转效果(角度单位是:deg)
1.平面旋转:transform:rotate( )
实现代码:
<!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>
img{
width: 250px;
transition: all 2s;
}
img:hover{
/* 顺时针旋转 */
transform: rotate(360deg);
/* 逆时针旋转 */
transform: rotate(-360deg);
}
</style>
</head>
<body>
<img src="./img/rotate.jpg" alt=""/>
</body>
</html>
效果图:
QQ录屏20230411165728
2.旋转原点:使用transform-origin属性改变转换原点
- 语法:默认圆点是盒子中心点;transform-origin: 原点水平位置原点垂直位置;
- 取值:方位名词(left. top. right. bottom. center);像素单位数值;百分比(参照盒子自身尺寸计算)
3.实现代码:
<!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>
img{
width:250px;
border: 1px solid black;
transition: all 2s;
transform-origin:right bottom; /* 以盒子右下点为圆心旋转 */
transform-origin: left bottom; /* 以盒子左下点为圆心旋转 */
}
img:hover{
transform:rotate(360deg) ;
}
</style>
</head>
<body>
<img src="./img/rotate.jpg" alt=""/>
</body>
</html>
效果图:
3.多重转换 :使用transform复合属性实现多形态转换
1.语法: transform:translate()rotate();
2.实现代码:
<!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>
.box{
width: 600px;
height: 200px;
border: 1px solid black;
}
img{
width: 200px;
transition: all 2s;
}
.box:hover img{
/* translate()和rotate()属性不能颠倒 ,旋转会改变坐标轴向,如果先旋转会改变坐标轴向,位移方向会受影响,旋转属性放在最后*/
transform: translate(400px) rotate(360deg);
}
</style>
</head>
<body>
<div class="box">
<img src="./img/rotate.jpg" alt=""/>
</div>
</body>
</html>
效果图(旋转滚动):
QQ录屏20230411184638
3.缩放:使用scale改变元素的尺寸
- 语法:transform: scale(x轴缩放倍数, y轴缩放倍数);
- 技巧:一 般情况下,只为scale设置-一个值, 表示x轴和y轴等比例缩放;transform: scale(缩放倍数);scale值大于1表示放大, scale值小于1表示缩小
- 实现代码:
<!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>
.box{
width: 300px;
height: 200px;
margin: 100px auto;
background-color: pink;
}
.box img{
width: 100%;
transition: all 0.5s;
}
.box:hover img{
transform:scale(1.2) ; /* 放大1.2倍 */
transform:scale(0.7) ; /* 缩小0.7倍 */
}
</style>
</head>
<body>
<div class="box">
<img src="./img/rotate.jpg" alt=""/>
</div>
</body>
</html>
效果图:
缩放
<!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>
*{
margin: 0;
padding: 0;
}
li{
list-style: none;
}
img{
width: 100%;
}
.box{
width: 300px;
height: 300px;
margin: 100px auto;
/* 超出父级的隐藏 */
overflow: hidden;
}
.box p{
color: blue;
padding: 10px 10px 0 10px;
}
.box .pic{
position: relative;
}
/* 1.播放按钮压在img上面(绝对定位)
2.hover的时候实现缩放
3.默认 看不见,hover以后变大 */
.box .pic::after{
position: absolute;
left: 50%;
top:50%;
/* margin-left: -25%;
margin-top: -25%; */ /* 居中 */
content:'';
width: 50px;
height: 50px;
background-image: url("img/bubiao.png");
transform:translate(-50%,-50%) scale(5); /* translate(-50%,-50%)居中 */
opacity: 0;
transition: all 0.5s;
}
/* 鼠标移到li,让after有变化 */
.box li:hover .pic::after{
opacity: 1;
transform:translate(-50%,-50%) scale(1);
}
</style>
</head>
<body>
<div class="box">
<ul>
<li>
<div class="pic">
<img src="./img/baobao.jpeg" alt=""/>
<!-- 用伪元素添加播放按钮 -->
</div>
<p>我是海绵宝宝,我是派大星,你们好呀!</p>
</li>
</ul>
</div>
</body>
</html>
效果图:
haimianbaobao