参考B站视频,进行了两个实例的练习,代码如下所示。欢迎大家关注我的公众号,获取更多WebGIS内容啊
实例1 跳动的心
跳动的心这个实例在网上有很多代码可以参考,我这里是跟随B站UP主“鱼小余老师”的视频课学习的实例。
实现跳动的心,首先需要绘制心。在学习过程中,心形被分割成了一个正方形和两个半圆形。为了减少DOM元素,使用了.before和.after两个伪元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 内外边距清空 */
*{
margin: 0;
padding: 0;
}
/* 设置容器的宽度和高度充满全屏 */
html,body{
width: 100%;
height: 100%;
}
/* 设置背景色 */
body{
background-color: pink;
/* 使用弹性盒子模型,将整个心放在最中间 */
display: flex;
/* 主轴方向,row从左到右默认*/
flex-direction: row;
/*设置弹性盒子在纵轴的对齐方式为居中对齐*/
align-items: center;
/* 设置弹性盒子在主轴(横轴)的对齐方式 */
justify-content: center;
}
.heart{
width: 200px;
height: 200px;
background-color: red;
/* 添加定位 */
position: relative;
/* 旋转心形 */
transform: rotate(45deg);
/* 应用动画效果 */
animation: heartbit 1s alternate infinite;
}
/* 通过伪元素绘制半圆 */
.heart::before{
/* 绘制矩形 */
content: "";
width: 200px;
height: 100px;
background-color: red;
/* 定位 */
position: absolute;
left: 0;
/* 设置-99而不是-100,为了避免拼接出现间隙 */
top: -99px;
/* 左上和右上角,矩形圆角效果 */
border-radius: 100px 100px 0px 0px;
}
.heart::after{
/* 绘制矩形 */
content: "";
width: 100px;
height: 200px;
background-color: red;
/* 定位 */
position: absolute;
/* 设置-99而不是-100为了避免拼接出现间隙 */
left: -99px;
top: 0px;
/* 左上和左下角,矩形圆角效果 */
border-radius: 100px 0px 0px 100px;
}
/* 动画效果 */
@keyframes heartbit{
/*动画过渡不一定越细越好*/
0%{
/* 旋转和缩放 */
transform: rotate(45deg) scale(0.6);
}
100%{
transform: rotate(45deg) scale(1.4);
}
}
</style>
</head>
<body>
<!-- 容器 -->
<div class="heart"></div>
</body>
</html>
实例2 奔跑的火柴人
这个实例也是来自于B站UP主“鱼小余老师”的视频课,但是我看CSDN等也有一样的教程。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 设置整体背景等 */
body{
background-color: black;
}
/* 设置容器样式 */
.container{
height: 300px;
width: 300pox;
margin: 50px;
}
.person{
position: absolute;
left: 150px;
top: 160px;
/* 跑进后跑出屏幕 */
animation: sprint 3s ease-in-out infinite;
}
/* 设置头样式 */
.head{
position: absolute;
width: 30px;
height: 30px;
border: 10px solid white;
/* 圆角使矩形变成圆形 */
border-radius: 50%;
top: -30px;
left:-6px;
/* 调用动画 */
animation: bob 2s infinite alternate;
}
/* 躯干样式 */
.torso{
width: 0px;
height: 60px;
border-left: 10px solid white;
position: absolute;
left: 5px;
top: 15px;
}
/* 设置胳膊和腿,注意下面要有一个空格*/
.person .part{
position: absolute;
left: 5px;
top: 75px;
}
.person .part.arm{
width: 40px;
height: 45px;
border-left: 10px solid white;
border-bottom: 10px solid white;
position: absolute;
top: 15px;
right: 300px;
transform-origin: 0% 0% 0px;
/* 调用动画 */
animation: pump 1s infinite ease-in-out;
}
/* 设置两个胳膊具体的旋转 */
.person .part.arm.one{
transform: rotate3d(0,0,1,80deg);
}
.person .part.arm.two{
transform: rotate3d(0,0,1,-80deg);
/* 第二个胳膊设置动画延时 */
animation-delay: 0.5s;
}
/* 设置腿 */
.person .part.leg{
height: 60px;
width: 60px;
border-right: 10px solid white;
border-top: 10px solid white;
transform-origin: 0% 0% 0px;
left: 15px;
animation: run 1s infinite ease-in-out;
}
.person .part.leg.one{
transform: rotate3d(0,0,1,100deg);
}
.person .part.leg.two{
transform: rotate3d(0,0,1,10deg);
animation-delay: 0.5s;
}
/* 头部动画 */
@keyframes bob{
0%{
transform: rotate3d(0,0,1,5deg);
}
25%{
transform: rotate3d(0,0,1,-30deg) skew(15deg,0deg);
}
50%{
transform: rotate3d(0,0,1,-30deg)
}
75%{
transform: rotate3d(0,0,1,-30deg) skew(15deg,0deg);
}
100%{
transform: rotate3d(0,0,1,20deg) skew(-15deg,0deg);
}
}
/* 胳膊摆动动画 */
@keyframes pump{
0%{
transform: rotate3d(0,0,1,80deg);
}
50%{
transform: rotate3d(0,0,1,-70deg);
}
100%{
transform: rotate3d(0,0,1,80deg);
}
}
/* 腿动画效果 */
@keyframes run{
0%{
transform: rotate3d(0,0,1,-5deg);
}
50%{
transform: rotate3d(0,0,1,150deg);
}
100%{
transform: rotate3d(0,0,1,-5deg);
}
}
/* 通过移动容器使人物向前走 */
@keyframes sprint{
0%{
transform: translate(-200px,0px);
}
/* 跑出屏幕 */
100%{
transform: translate(2000px,0px);
}
}
</style>
</head>
<body>
<!-- 火柴人的结构 -->
<div class="container">
<div class="person">
<!-- 头、躯干和四肢 -->
<div class="head"></div>
<div class="part arm one"></div>
<div class="part arm two"></div>
<div class="torso"></div>
<div class="part leg one"></div>
<div class="part leg two"></div>
</div>
</div>
</body>
</html>