web前端开发——进阶css(平面转换)

目录

一.平面转换

1.位移:使用translate实现元素位移效果

2.旋转:平面旋转实现元素旋转效果(角度单位是:deg)

3.缩放:使用scale改变元素的尺寸 


一.平面转换

平面转换概念:使用transform属性实现元素的位移、旋转、缩放等效果。

1.位移:使用translate实现元素位移效果

  1. 语法:transform: translate(水平移动距离,垂直移动距离);
  2. 取值(正负均可):像素单位数值;百分比(参照物为盒子自身尺寸)
  3. 注意: X轴正向为右, Y轴正向为下
  4. 技巧: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属性改变转换原点

  1. 语法:默认圆点是盒子中心点;transform-origin: 原点水平位置原点垂直位置;
  2. 取值:方位名词(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改变元素的尺寸 

  1. 语法:transform: scale(x轴缩放倍数, y轴缩放倍数);
  2. 技巧:一 般情况下,只为scale设置-一个值, 表示x轴和y轴等比例缩放;transform: scale(缩放倍数);scale值大于1表示放大, scale值小于1表示缩小
  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>
			.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端挣扎的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值