1. 2D/3D 转换 transform
通过2D、3D转换,能够对元素进行移动、缩放、转动、拉长或拉伸。
1.1 2D 转换
缩放
复制 /* x:表示水平方向的缩放倍数。y:表示垂直方向的缩放倍数 */
transform: scale(x , y);
/* 等比例缩放 */
transform: scale(x);
位移
复制 transform: translate(水平位移 , 垂直位移);
transform: translate(-50% , -50%);
参数为百分比,相对于自身移动;如果只写一个值,则表示水平移动。
旋转
复制 /* 正值 顺时针;负值:逆时针 */
transform: rotate(角度);
transform: rotate(45deg);
rotate 旋转时,默认是以盒子的正中心为坐标原点的。如果想改变旋转的坐标原点,可以用transform-origin
属性。
复制 transform - origin : 水平坐标 垂直坐标;
transform - origin : 50px 50px;
transform - origin : center bottom;
skew
复制 transform: skew( x-angle , y-angle )
transform: skew(20deg , 10deg);
matrix(复合功能)
复制 /* matrix() 方法把所有 2D 变换方法组合为一个 */
transform: matrix(scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY())
举例:借助 rotate 和 transform-origin 实现扑克牌展开
复制 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.box {
width: 300px;
height: 440px;
margin: 100px auto;
position: relative;
}
img {
width: 100%;
transition: all 1.5s;
position: absolute; /* 既然扑克牌是叠在一起的,那就都用绝对定位 */
left: 0;
top: 0;
transform-origin: center bottom; /*旋转时,以盒子底部的中心为坐标原点*/
box-shadow: 0 0 3px 0 #666;
}
.box:hover img:nth-child(6) { transform: rotate(-10deg); }
.box:hover img:nth-child(5) { transform: rotate(-20deg); }
.box:hover img:nth-child(4) { transform: rotate(-30deg); }
.box:hover img:nth-child(3) { transform: rotate(-40deg); }
.box:hover img:nth-child(2) { transform: rotate(-50deg); }
.box:hover img:nth-child(1) { transform: rotate(-60deg); }
.box:hover img:nth-child(8) { transform: rotate(10deg); }
.box:hover img:nth-child(9) { transform: rotate(20deg); }
.box:hover img:nth-child(10) { transform: rotate(30deg); }
.box:hover img:nth-child(11) { transform: rotate(40deg); }
.box:hover img:nth-child(12) { transform: rotate(50deg);}
.box:hover img:nth-child(13) { transform: rotate(60deg); }
</style>
</head>
<body>
<div class="box">
<img src="images/pk1.png"/>
<img src="images/pk2.png"/>
<img src="images/pk1.png"/>
<img src="images/pk2.png"/>
<img src="images/pk1.png"/>
<img src="images/pk2.png"/>
<img src="images/pk1.png"/>
<img src="images/pk2.png"/>
<img src="images/pk1.png"/>
<img src="images/pk2.png"/>
<img src="images/pk1.png"/>
<img src="images/pk2.png"/>
<img src="images/pk1.png"/>
</div>
</body>
</html>
1.2 3D 转换
旋转:rotateX、rotateY、rotateZ
复制 transform: rotateX(360deg); //绕 X 轴旋转360度
transform: rotateY(360deg); //绕 Y 轴旋转360度
transform: rotateZ(360deg); //绕 Z 轴旋转360度
transform: translateX(100px); //沿着 X 轴移动
transform: translateY(360px); //沿着 Y 轴移动
transform: translateZ(360px); //沿着 Z 轴移动
3D坐标系(左手坐标系)**:**左手握住旋转轴,竖起拇指指向旋转轴的正方向,正向就是其余手指卷曲的方向。
2. 过渡 transition
过渡是可以实现元素不同状态间的平滑过渡(补间动画),经常用来制作动画效果。
复制 transition: 过渡属性 过渡的持续时间 运动曲线 延迟时间;
transition: all 3s linear 0s;
transition 属性拆分:
transition-property
:过渡属性,如果设为 all,则所有的属性都发生过渡
transition-duration
:过渡的持续时间
transition-timing-function
:运动曲线
3. 动画 animation
动画是 CSS3 中具有颠覆性的特征,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
将这段动画通过百分比,分割成多个节点,然后各节点中分别定义各属性;
在指定元素里,通过 animation
属性调用动画。
复制 /* 定义动画:*/
@keyframes 动画名{
from{ 初始状态 }
to{ 结束状态 }
}
/* 调用:*/
animation: 动画名 持续时间 执行次数 是否反向 运动曲线 延迟执行;
复制 @keyframes cartoon_name {
/* 使用百分比*/
0% { top : 0 px ;}
25% { top : 200 px ;}
50% { top : 100 px ;}
75% { top : 200 px ;}
100% { top : 0 px ;}
/* 使用from/to */
from { top : 0 px ;}
to { top : 200 px ;}
}
.div {
animation-name : cartoon_name ;
animation-duration : 2 s ;
animation-iteration-count : 2 ; /* 属性值 infinite 表示无数次 */
animation-direction : normal ; /* normal 正常,alternate 反向 */
animation-timing-function : ease-in-out ;
animation-fill-mode : forwards ; /* forwards:保持动画结束后的状态(默认), backwards:动画结束后回到最初的状态 */
}
animation-timing-function
如果设置为steps()
,则表示动画不是连续执行,而是间断地分成几步执行,应用于逐帧动画等。
举例:通过animation-timing-function
的steps()
制作时钟指针
复制 <!DOCTYPE html >
< html >
< head lang="en" >
< meta charset="UTF-8" >
< title > </ title >
< style >
div {
width : 3 px ;
height : 200 px ;
background-color : #000 ;
margin : 100 px auto ;
transform-origin : center bottom ; /* 旋转的中心点是底部 */
animation : myClock 60 s steps (60) infinite ;
}
@keyframes myClock {
0% {
transform : rotate (0 deg ) ;
}
100% {
transform : rotate (360 deg ) ;
}
}
</ style >
</ head >
< body >
< div > </ div >
</ body >
</ html >