transform本质上是一系列变形函数,分别是translate位移,scale缩放,rotate旋转,skew扭曲 、
translate(x,y) 设置盒子位移
scale(x,y) 设置盒子缩放
rotate(deg) 设置盒子旋转
skew(x-angle,y-angle) 设置盒子斜切
translate位移
translate位移系列中用于2D的有:translate,translateX,translateY
translateX X轴平移,translateY Y轴平移
translate中有个值 一个表示X轴 一个表示Y轴 0便是不发生平移
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
div {
width: 100px;
height: 100px;
background-color: royalblue;
transform:translate(120px,120px) /*X轴和Y轴均平移120px*/
}
div:hover {
width: 400px;
</style>
</head>
<body>
<div></div>
</body>
</html>
如果只写一个值那么只有X轴为位移 Y轴不发生改变 相当于 translateX(120px)
transform:translate(120px) /*只有X轴平移120px*/
translate位移,有点类似于position:relative属性。都是改变相对与原来位置的距离;
设置绝对定位
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
div {
position: absolute;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
background-color: royalblue;
/*transform:translateX(120px) ;*/
}
</style>
</head>
<body>
<div></div>
</body>
</html>
然后添加 transform:translateX(100px);
该盒子相对与原来位置 在X轴右平移了
如果添加 transform:translateX(-100px);则相对于原来位置在X轴上向左平移100px
scale缩放
scale缩放系列中用于2D的有:scale,scaleX,scaleY
和平移一样scaleX表示X轴上的变化,scaleY表示Y轴上的变化
scale(X,Y)也有两个值 一个表示X轴 一个表示Y轴 同样也可以设置一个值 但和translate不同的是设置一个值表示X轴和Y轴都发生改变
默认值是1 表示不缩放 0表示完全缩小(看不见了) 2表示放大到原来的2倍
值小于1表示缩小 值大于1表示放大
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
div {
position: absolute;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
background-color: royalblue;
transform:scale(2) ;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
如果只缩放X轴,可以使用scaleX(.5)等同于scale(.5, 1)。Y轴也是一样的
设值Y轴缩放X轴不缩放
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
div {
position: absolute;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
background-color: royalblue;
transform:scale(1,.5) ;/*等同于scaleY(0.5)*/
}
</style>
</head>
<body>
<div></div>
</body>
</html>
同过这我们可以想到如果放大X轴 缩小Y轴
transform:scale(2,.5) ;
其实scale是可以使用负数值得
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
.box{
position: absolute;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
background-color: royalblue;
}
div{position: absolute;
top: 50px;
left: 50px;
width: 50px;
height: 50px;
background-color: red;
}
</style>
</head>
<body>
<div class="box">
<div>
</div>
</div>
</body>
</html>
没有添加缩放属性得时候
如果加上 transform:scale(-1,1) ;X轴设置了-1 Y轴设置1
原本 右边得红色小方块 变到了左边 这就相当于3D 下得X轴旋转180deg 产生了颠倒 把原本背对屏幕得一面 翻转到了面对屏幕
rotate旋转
rotate旋转系列中用于2D的有:rotate(rotateX , rotateY,rotateZ都是3D旋转)
只能设单值。正数表示顺时针旋转,负数表示逆时针旋转,说到旋转就需要说一下transform-origin
transform-origin用来设置旋转缩放等中心点坐标,
所有元素都有一个中心原点,默认2D中,元素的中心原点位于X轴和Y轴的50%处。
位移、缩放、旋转、倾斜都是可以通过 transform-origin用来设置旋转缩放等中心点坐标
transform-origin属性取值跟背景 位置background-position属性取值相似 都可以采用 关键字和像素值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
div {
position: absolute;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
background-color: royalblue;
transform:rotate(50deg); /*以原点为中心向右旋转50°*/
}
</style>
</head>
<body>
<div></div>
</body>
</html>
没有设置 transform-origin 以元素得中心点为原点
设置 transform-origin:0px 0px;以元素得右上角为原点
平移旋转以及缩放这些变化都可以通过transition(过度) 以及animation(动画)属性产生动画效果
效果代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
div{
position: absolute;
top: 100px;
left: 100px;
width: 100px;
height: 100px;
background-color: royalblue;
transition: all 1s;
}
div:hover{
transform:rotate(360deg) scale(2);
}
</style>
</head>
<body>
<div>
</div>
</body>