首页 > 代码库 > CSS3 skew倾斜、rotate旋转动画

CSS3 skew倾斜、rotate旋转动画

css3出现之前。我们实现一个对象的一组连续动画须要通过JavaScript或Jquery编写,脚本代码较为复杂;

若须要实现倾斜、旋转之类的动画难度将更高(我还没试过用JavaScript或Jquery怎样实现),并且即使能实现预计花的时间代价及维护难度是非常大的,非常多时候仅仅能依靠绘图工具制作此类动画文件;

有时候在想假设不用脚本语言,也不用绘图工作制作动画文件。就能在网页上实现倾斜、旋转之类的动画效果多好。


近期挤出一些业余时间学习CSS3,当中就包括非常多动画演示样例,花了点时间学习和整理

今天分享使用html+css3实现skew倾斜、rotate旋转动画,我们先看终于效果图(我这里为了演示效果。就用QQ屏幕截成多张图片,然后制作成gif动画给大家简单展示下,效果不好请大家多多包涵)

技术分享

图1

详细过程例如以下:

1、放置两个div,一个作为容器(图1中绿色背景部分 id="warp")。还有一个作为动画元素(图1中黄色背景部分 id="box"

HTML代码:

<div id="warp">
    <div id="box">WEB</div>
</div>
CSS代码(设置容器及动画元素默认样式):

#warp {
	width: 320px;
	height: 320px;
	background: #6FDE82;
	margin: 20px auto;
}
			
#box {
	height: 40px;
	width: 40px;
	background: yellow;
	position: relative;
	top: 280px;
	left: 0;
				
}

注意:#box{position: relative;}是为该元素接下来做动画做准备,由于动画过程中须要改变其位置,故这里使用相对定位

上述代码为主要的html css,大家应该没问题吧

此时效果例如以下:

技术分享

2、使用CSS3 @keyframes自己定义动画

CSS代码:

@keyframes move {
	0% {
	top: 280px;
	left: 0;
	transform: skewX(0deg);
	width: 40px;
	height: 40px;
	}
	20% {
	top: 0;
	left: 0;
	transform: skewX(50deg);
	width: 60px;
	height: 20px;
	background: red;
	}
	22% {
	top: 0;
	left: 0;
	transform: skewX(0deg);
	width: 40px;
	height: 40px;
	}
	30% {
	top: 0;
	left: 0;
	transform: skewX(0deg);
	width: 320px;
	height: 40px;
	}
	40% {
	top: 0;
	left: 280px;
	transform: skewX(0deg);
	width: 40px;
	height: 40px;
	background: green;
	}
	50% {
	top: 0;
	left: 280px;
	transform: skewX(0deg);
	width: 20px;
	height: 320px;
	}
	55% {
	top: 280px;
	left: 280px;
	transform: skewX(0deg);
	width: 40px;
	height: 40px;
	background: blue;
	}
	60% {
	transform: rotate(-90deg);
	transform-origin: left bottom;
	}
	65% {
	transform: rotate(-180deg);
	transform-origin: left top;
	}
}

代码解析:

  1. css3自己定义动画须要使用@keyframes规则,详细请看CSS3 @keyframes 规则

  2. 设置动画运行进度

    本演示样例中定义了 0% 20%  22% 30% 40% 50% 55% 60% 65%几个动画进度,

    百分比究竟代表什么意思?

    举例说明:假设整个动画运行10秒。那么20%就代表当动画运行到2秒时的效果。所以整个自己定义动画翻译过来就是在每一个运行进度中定义css样式(比方 width。height。color等)。这样就形成了连贯的动画效果。

    运行进度百分比依据实际情况可自行调整。

    注意:该运行进度并不是一定要设置100%,如本演示样例中仅设置到65%,这就意味着剩下的35%就由css3自行完毕动画回归到原始状态(大家能够试试)

  3. 元素倾斜(元素变形)、旋转(元素不变形)

    本演示样例中用到倾斜及旋转动画,倾斜使用skew(),參数为倾斜度数;旋转使用rotate(),參数为旋转度数。

    倾斜原理示意图例如以下:

技术分享

X轴逆时针转为正。Y轴顺时针转为正;

举例:

skew(30deg),在本演示样例中效果将成这样

技术分享

skew(-30deg),在本演示样例中效果将成这样

技术分享

Y轴的这里就不举例了。依据上述提示大家可自行測试效果

transform-origin。元素倾斜或转动中心点,详细属性值可看CSS3 transform-origin 属性

这里的中心点,指的是动画元素的中心点,元素环绕该点转动或倾斜,该点坐标是不会改变的。个人认为这里须要头脑中产生一些几何图形以便于理解。或者用一张纸(手机之类的物品)放在桌子上。用手固定该物品的某个点演示一下转动效果,就明确了

3、运行自己定义动画

CSS代码:

#box {
	height: 40px;
	width: 40px;
	background: yellow;
	position: relative;
	top: 280px;
	left: 0;
	animation: move 5s infinite;
}
代码解析:
animation: move 5s infinite;

代表该自己定义动画完毕耗时5秒。而且无限循环运行

animation属性的具体说明请看这里CSS3 animation(动画) 属性

OK,上述步骤及原理大家都清楚了吧。

本演示样例完整代码例如以下,各位能够直接复制去运行看看效果



<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>HTML5+CSS3 skew倾斜、rotate旋转动画</title>
		<style type="text/css">
			
			#warp {
				width: 320px;
				height: 320px;
				background: #6FDE82;
				margin: 20px auto;
			}
			
			#box {
				height: 40px;
				width: 40px;
				background: yellow;
				position: relative;
				top: 280px;
				left: 0;
				animation: move 5s infinite;
				
			}
			
			@keyframes move {
				0% {
					top: 280px;
					left: 0;
					transform: skewX(0deg);
					width: 40px;
					height: 40px;
				}
				20% {
					top: 0;
					left: 0;
					transform: skewX(50deg);
					width: 60px;
					height: 20px;
					background: red;
				}
				22% {
					top: 0;
					left: 0;
					transform: skewX(0deg);
					width: 40px;
					height: 40px;
				}
				30% {
					top: 0;
					left: 0;
					transform: skewX(0deg);
					width: 320px;
					height: 40px;
				}
				40% {
					top: 0;
					left: 280px;
					transform: skewX(0deg);
					width: 40px;
					height: 40px;
					background: green;
				}
				50% {
					top: 0;
					left: 280px;
					transform: skewX(0deg);
					width: 20px;
					height: 320px;
				}
				55% {
					top: 280px;
					left: 280px;
					transform: skewX(0deg);
					width: 40px;
					height: 40px;
					background: blue;
				}
				60% {
					transform: rotate(-90deg);
					transform-origin: left bottom;
				}
				65% {
					transform: rotate(-180deg);
					transform-origin: left top;
				}
			}
		</style>
	</head>

	<body>
		<div id="warp">
			<div id="box">WEB</div>
		</div>
	</body>

</html>
好了,今天分享就到这里,以后还有很多其它哟,请大家一起来交流下,有兴趣的朋友给我的文章评论下嘛






CSS3 skew倾斜、rotate旋转动画