请稍等...正在玩命加载中......

css动画案例-大风车、芝麻开门、桃心


项目准备

素材准备

本次项目无需素材准备

技术准备

  1. 使用到了第一次到第三次周末班的技术点,变换transform,使用到了动画及阶段型动画
  2. 使用到了“子绝父相”
  3. 动画的状态的改变以及伪类:hover的应用

开发工具的准备

本次项目,我们使用的是HbuilderX来完成的

创建项目

前端项目的创建非常简单

  1. 直接在桌面上创建一个文件夹,命名为”bgg_dfc”
  2. 将刚刚创建好的文件夹插入到HbuilderX的开发工具里面
  3. 在刚刚创建的项目里面,点击鼠标右键 ,选择新建一个html文件,我们命名为01.html

最终结果如下

上面的代码,我们说明一下

<head></head>代表的是浏览器的头部信息

<title></title>代表网页的标题

<body></body>代表浏览器的网页的主体部分

大风车案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>标哥哥的大风车</title>
		<!-- 样式 -->
		<style type="text/css">
			.big-box{
				width: 450px;
				height: 450px;
				position: relative;
				background-color: yellow;
				/* 设置圆角边框 ,变成一个圆 */
				border-radius: 225px;
			}
			
			/* .box 相当于class="box" */
			.box{
				width: 400px;
				height: 400px;
				position: absolute;
				right: 0px;
				bottom: 0px;
				background-color: white;
				border-radius: 200px;
				animation-name: box_ani; /*动画的名称*/
				animation-duration: 5s;  /*动画播放一次的时间*/
				animation-iteration-count: infinite; /*动画执行无穷次*/
				animation-timing-function: linear;  /*动画匀速执行*/
			}
			/* 分组 */
			.one,.two,.three,.four{
				width: 200px;
				height: 100px;
				position: absolute;
				left: 50%;
				top: 50%;
				transform-origin: left top;
				border-bottom-left-radius: 100px;
				border-bottom-right-radius: 100px;
			}
			.one{
				background-color: deeppink;
			}
			.two{
				background-color: blue;
				transform: rotateZ(90deg);
			}
			.three{
				background-color: aqua;
				transform: rotateZ(180deg);
			}
			.four{
				background-color: lightseagreen;
				transform: rotateZ(270deg);
			}
			/* 定义动画使用 */
			@keyframes box_ani{
				0%{
					transform: rotateZ(0deg);
				}
				100%{
					transform: rotateZ(360deg);
				}
			}
		</style>
	</head>
	<body>
		<div class="big-box">
			<div class="box">
				<div class="one"></div>
				<div class="two"></div>
				<div class="three"></div>
				<div class="four"></div>
			</div>
		</div>
		

	</body>
</html>

上面是最基本的大风车案例,我们现在希望做一次扩展

  1. 风车默认是没有转的,我的鼠标如果放上去以后,才开始转
  2. 鼠标如果在购车上面按住鼠标不松开的时候,风车转的速度要快一些

要完成上面的点有2人个问题需要克服

  1. 鼠标放在某一个元素上面的效果我们应该怎么办
  2. 鼠标按下去的效果我们应该怎么办

要实现上面的东西,我们就要接解新的知识点,这个知识是属于CSS的伪类环节

/* 鼠标放在box上面以后,它要开始动画 */
.box:hover{
    animation-play-state: running;
}
/* 鼠标按下去以后,播放速度要加快 */
.box:active{
    animation-duration: 1s;
}

芝麻开门案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>开门大吉</title>
		<style>
			.door {
				width: 500px;
				height: 700px;
				border: 5px solid black;
				font-size: 0px;
				perspective: 700px;
				display: block;
				/* 鼠标光标变成手的形状 */
				cursor: pointer;
			}

			.left-door {
				width: 250px;
				height: 700px;
				background-color: deeppink;
				/* 转为行内块级元素 */
				display: inline-block;
				transform-origin: left;
				/* 添加一个过渡 */
				transition: all 1s linear;
			}

			/* 右边的门设置为蓝色 */
			.right-door {
				width: 250px;
				height: 700px;
				background-color: lightseagreen;
				display: inline-block;
				transform-origin: right;
				transition: all 1s linear;
			}
			/* #aaa代表的就是id="aaa"
				+代表兄弟元素,>代表子元素
			 */
			#aaa:checked+.door>.left-door{
				transform: rotateY(30deg);
			}
			#aaa:checked+.door>.right-door{
				transform: rotateY(-30deg);
			}
			#aaa{
				/* 隐藏某一个元素 */
				display: none;
			}
		</style>
	</head>
	<body>
		<input type="checkbox" id="aaa">
		<label class="door" for="aaa">
			<div class="left-door"></div>
			<div class="right-door"></div>
		</label>
	</body>
</html>

总结

css样式总结

  1. class代表在CSS里面使用.来表示 ,如.box就相当于class="box"
  2. widthheight分别用于设置宽度与高度
  3. border是用于设置边框的,border:2px solid black代表的是2个像素的实线的黑色边框
  4. 变换使用transorm,rotate是旋转
  5. transform-origin设置变换的起点位置
  6. border-radius用于设置圆角边框
  7. border-bottom-left-radius左下角的圆角边框
  8. :hover代表鼠标放上去以后的特殊状态效果
  9. :active代表鼠标按下以后的特殊状态效果
  10. animation-play-state代表动画播放的状态,running代表正常播放,paused代表动画暂停
  11. transition过渡,指元素的样式 由一个状态变成另一个状态的过渡效果【与动画很相似】
  12. display:none隐藏元素
  13. :checked复选框选中以后的状态
  14. cursor:pointer鼠标光标变成手的形状

桃心案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>桃心</title>
		<style type="text/css">
			.box{
				width: 480px;
				height: 400px;
				border: 2px solid black;
				font-size: 0px;
			}
			/* 左边的心宽度240,高度400,背景blue */
			/* 右边的心宽度240,高度400,背景red */
			/* 左右两个盒子排在一行 */
			.left{
				width: 240px;
				height: 400px;
				background-color: red;
				display: inline-block;
				border-top-left-radius: 120px;
				border-top-right-radius: 120px;
				/* 设置变化的起点 */
				transform-origin: right bottom;
				transform: rotateZ(45deg);
			}
			.right{
				width: 240px;
				height: 400px;
				background-color: red;
				display: inline-block;
				border-top-left-radius: 120px;
				border-top-right-radius: 120px;
				/* 设置变化的起点 */
				transform-origin: left bottom;
				transform: rotateZ(-45deg);
			}
		</style>
	</head>
	<body>
		<div class="box">
			<div class="left"></div>
			<div class="right"></div>
		</div>
	</body>
</html>

概念

  1. 子绝父相:当一个元素如果要以另一个元素为标准进行位置设置的时候,最好的办法就是“子绝父相”

    子绝父相就是子级元素使用绝对定位(position:absolute),父级元素使用相对定位(position:relative

  2. 分组选择器:当几个元素的样式相同的时候,我们可以使用分组选择器来简化我们的代码

    .one,.two,.three,.four{
        /*代码*/
    }
  3. 动画的定义我们仍然使用@keyframes

  4. 元素如果想排在一行,可以把元素转换为行内块级元素display:inline-block

  5. 如果转换元素以后中间的缝隙,则在父级元素上面添加font-size:0px

  6. 选择器当中,.代表的是class,#代表的是id

    #aaa{
        
    }
    .box{
        
    }

    教程来源:软帝标哥


文章作者: JinJunzheng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 JinJunzheng !
评论
评论
  目录