css3 transform(2D)的使用

13 篇文章 1 订阅

transform的使用
transform 属性允许你修改CSS视觉格式模型的坐标空间
transform 属性 , 只对 block 级元素生效!

transfrom的基本属性有:
①translate:平移
②rotate:旋转
③skew:倾斜
④transform-origin:基点的变换
⑤scale:缩放
⑥matrix:矩阵。旋转;平移;缩放;

(1) translate的用法
X方向平移:transform: translateX(tx)
Y方向平移:transform: translateY(ty)
二维平移:transform: translate(tx, ty); 如果ty没有指定,它的值默认为0。
可设单值,也可设双值。
正数表示XY轴正向位移,负数为反向位移。设单值表示只X轴位移,Y轴坐标不变,
例如transform: translate(100px);等价于transform: translate(100px,0);
代码如下所示:

body:hover #test{
				transform: translateX(300px);
			}

(2) rotate的用法
transform:rotate(angle);
正值:顺时针旋转 rotate(360deg)
负值:逆时针旋转 rotate(-360deg)
只能设单值。正数表示顺时针旋转,负数表示逆时针旋转
代码如下所示:

body:hover #test{ 
				transform: rotate(45deg);
			}

(3) skew的用法
transform:skewX(45deg);
X方向倾斜:transform: skewX(angle)
skewX(45deg):参数值以deg为单位 代表与y轴之间的角度
Y方向倾斜:transform: skewY(angle)
skewY(45deg):参数值以deg为单位 代表与x轴之间的角度
二维倾斜:transform: skew(ax[, ay]); 如果ay未提供,在Y轴上没有倾斜
skew(45deg,15deg):参数值以deg为单位 第一个参数代表与y轴之间的角度
第二个参数代表与x轴之间的角度
单值时表示只X轴扭曲,Y轴不变,如transform: skew(30deg);等价于 transform: skew(30deg, 0)

考虑到可读性,不推荐用单值,应该用transform: skewX(30deg);。skewY表示 只Y轴扭曲,X轴不变

正值:拉正斜杠方向的两个角
负值:拉反斜杠方向的两个角

代码如下:

body:hover #box{
				transform: skewY(-30deg);
			}

(4) transform-origin
transform-origin CSS属性让你更改一个元素变形的基点。
transform-origin的写法如下:
transform-origin: 100px 100px;
transform-origin: top left;

如下案例:
设置基点前的如下图所示
在这里插入图片描述
设置基点后的位置:
在这里插入图片描述
代码如下:

#test{
				width: 300px;
				height: 100px;
				background: pink;
				transition: 2s;
				transform-origin: top left;
			}

(5) 缩放scale
transform:scale(2);
X方向缩放:transform: scaleX(sx);
Y方向缩放:transform: scaleY(sy);
二维缩放 :transform: scale(sx[, sy]); (如果sy 未指定,默认认为和sx的值相同)

要缩小请设0.01~0.99之间的值,要放大请设超过1的值。
例如缩小一倍可以transform: scale(.5);
放大一倍可以transform: scale(2);
如果只想X轴缩放,可以用scaleX(.5)相当于scale(.5, 1)。
同理只想Y轴缩放,可以用scaleY(.5)相当于scale(1, .5)
正值:缩放的程度
负值:不推荐使用(有旋转效果)
单值时表示只X轴,Y轴上缩放粒度一样,如transform: scale(2);等价于transform: scale(2,2);

案例如下: 将正方形缩小到一半

(6) Matrix矩阵
在 2D变换 中,矩阵变换函数 matrix() 接受 6个值,语法形式如下:
transform: matrix(a, b, c, d, e, f);
这相当于,对元素应用一个如下的变换矩阵:
点(Xi,Yi,1)进行变换后的新坐标
即根据变换矩阵进行变换之后点 (xi,yi) 的坐标是(axi+cyi+e,bxi+dyi+f)
在这里插入图片描述
(7) 矩阵-旋转
对某一元素应用旋转变换 rotate(θ),相当于对其应用如下变换矩阵:
即等价于矩阵变换函数 matrix(cosθ, sinθ, -sinθ, cosθ, 0, 0)。
在这里插入图片描述
(8) 矩阵-平移
对某一元素应用旋转变换 translate(X, Y),相当于对其应用如下变换矩阵:
即等价于使用矩阵变换函数 matrix(1, 0, 0, 1, X, Y)。
在这里插入图片描述
(9) 矩阵-缩放
对某一元素应用缩放变换 scale(scaleX, scaleY),相当于对其应用如下变换矩阵:
即等价于使用矩阵变换函数 matrix(scaleX, 0, 0, scaleY, 0, 0)
在这里插入图片描述
(10) 矩阵-倾斜
对某一元素应用倾斜变换 skew(α, β),相当于对其应用如下变换矩阵:
即等价于使用矩阵变换函数 matrix(1, tanβ, tanα,1, 0, 0)。

在这里插入图片描述
案列:使用变换组合,顺序不同导致呈现的结果不同

使用组合之前如图所示:
在这里插入图片描述

使用变换组合之后呈现如下图所示。
在这里插入图片描述

1号距离左边的距离:宽度为125px
在这里插入图片描述
2号距离左边的距离:75px
在这里插入图片描述

造成如上图的问题原因:
使用变换组合时,最终要转换成矩阵的形式,浏览器的计算方向是从右往左进行继续的

按照 1号 列举一个点 的换算如下
已基点为坐标,图中点的坐标为(50,50)

在这里插入图片描述
在这里插入图片描述
2号的换算结果为
在这里插入图片描述

代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
		
			html{
				height: 100%;
				overflow: hidden;
			}
			body{
				width: 60%;
				height: 60%;
				border: 1px solid;
				margin: 100px auto 0;
				overflow: hidden;
			}
		
			#test1{
				width: 100px;
				height: 100px;
				line-height: 100px;
				background: pink;
				text-align: center;
				transition:2s;
			}
			#test2{
				margin-top: 50px;
				width: 100px;
				height: 100px;
				line-height: 100px;
				background: pink;
				text-align: center;
				transition:2s;
			}
			
			/*变换组合时,计算方向是从右往左进行继续的*/
			
			/*2号换算
				1 0 100  50   			150
				0 1  0   50    			50
				0 0  1    1     		1
				
				.5 0  0   150  			75
				0  .5 0   50            25
				0  0  1   1 			1
			*/	
			
			/*
			从右往左
				.5 0  0   50  			25
				0  .5 0   50            25
				0  0  1   1 			1
				
				1 0 100  25   			125
				0 1  0   25    			25
				0 0  1    1     		1
			*/	
			
			
			
			/*(50,50)---->(125,25)*/
			body:hover #test1{
				transform: translateX(100px) scale(.5);
			}
			body:hover #test2{
				transform: scale(.5) translateX(100px);
			}
			
		</style>
	</head>
	<body>
	1号;transform: translateX(100px) scale(.5);
	<br>
	2号;transform: scale(.5) translateX(100px);
		<div id="test1">
			1号
		</div>
		<div id="test2">
			2号
		</div>
	</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值