如何使用纯CSS完成一个可爱炫酷的动画效果

简介: 本文利用CCS相关代码,完成了小狗滑梯动画效果。并详细了讲解如何实现

本文利用CCS相关代码,完成了小狗滑梯动画效果。并详细了讲解如何实现

效果图

y38tx-72rcv.gif

第一部分

首先,先来解释CSS的变量定义部分。
在这部分代码中,使用了:root选择器来定义全局的CSS变量,它将用于控制小狗和滑梯的样式。

:root {
   
  --dog-color: #f9c197;
  --background-color: #e9f7f6;
  --slide-color: #fdbf88;
}

在上面的代码中,定义了三个变量:--dog-color表示小狗的颜色,--background-color表示背景色,--slide-color表示滑梯的颜色。这样,我们可以通过修改这些变量的值,来改变小狗和滑梯的外观颜色。

接下来,继续设置body元素的样式定义。

body {
   
  background-color: var(--background-color);
}

代码将页面的背景颜色设置为之前定义的变量--background-color的值。这样,页面的整体背景色将与该变量的值保持一致。

然后找到.box-canvas类的样式定义部分。这部分代码将负责定义一个容器,用于包裹小狗和滑梯的元素。

.box-canvas {
   
  position: relative;
  width: 600px;
  height: 600px;
  margin: 0 auto;
}

在上面的代码里,使用了类选择器.box-canvas来选中这个容器元素。通过设置position属性为relative,使得这个容器内部的元素可以使用相对于该容器的位置进行定位。同时,设置了容器的宽度和高度为600像素,并使用margin: 0 auto;将容器水平居中显示。

来看一下.dog类的样式定义部分。这部分代码负责定义小狗元素的样式。

.dog {
   
  position: absolute;
  right: 50px;
  top: 100px;
  width: 120px;
  height: 150px;
  animation: dogSlide 5s infinite linear;
}

上面代码里,使用了类选择器.dog来选择小狗元素。通过设置position属性为absolute,使得小狗元素可以相对于其父元素进行定位。使用righttop属性来将小狗定位在容器的指定位置。然后,还定义了小狗元素的宽度和高度为120像素150像素。最后,应用了一个名为dogSlide的动画效果,并设置其持续时间为5秒,循环播放并且采用线性的时间函数。

第二部分

来看一下关键帧动画dogSlide的定义部分。这个动画控制小狗元素在不同关键帧位置之间的变化。

@keyframes dogSlide {
   
  0% {
   
    transform: translate(0, 0) rotate(0);
  }
  50% {
   
    transform: translate(200px, 0) rotate(30deg);
  }
  100% {
   
    transform: translate(400px, 0) rotate(0);
  }
}

在上代码里,使用了@keyframes关键字来定义了一个名为dogSlide的关键帧动画。该动画包含三个关键帧:0%、50%和100%。在每个关键帧中使用transform属性来定义小狗元素的位移和旋转效果。

在动画的开始(0%关键帧)时,小狗元素的偏移量为(0, 0),不进行旋转。在动画进行到一半(50%关键帧)时,小狗元素的偏移量变为(200px, 0),并向顺时针方向旋转30度。最后,在动画结束时(100%关键帧),小狗元素的偏移量恢复到(400px, 0),并且不再旋转。

再看看.heart类的样式定义部分。该部分代码负责定义心形图案元素的样式。

.heart {
   
  position: absolute;
  top: 50%;
  left: 50%;
  width: 30px;
  height: 30px;
  background-color: red;
  transform: translate(-50%, -50%);
  animation: heartAppear 1s infinite ease-in-out;
}

在上面代码里,使用.heart选择器来选中心形图案元素。通过设置position属性为absolute,使心形图案元素可以相对于其父元素进行定位。接着,使用topleft属性将心形图案元素定位在其父元素的正中心。然后还定义了心形图案元素的宽度和高度为30像素,并设置背景色为红色。

通过使用transform属性和translate函数,将心形图案元素在其父元素内部进行居中定位。应用了一个名为heartAppear的动画效果,该动画持续时间为1秒,采用缓入缓出的时间函数,并且无限循环播放。

第三部分

.slide类的样式定义部分,该部分代码负责定义滑梯元素的样式。

.slide {
   
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 240px;
  height: 300px;
  background-color: var(--slide-color);
}

上面代码我们使用.slide选择器来选中滑梯元素。通过设置position属性为absolute,使得滑梯元素可以相对于其父元素进行定位。然后使用bottom属性将滑梯元素定位在其父元素的底部。通过left: 50%transform: translateX(-50%)来将滑梯元素在水平方向上居中定位。

同时定义了滑梯元素的宽度和高度分别为240像素和300像素。使用变量--slide-color指定了滑梯的背景颜色,这样可以通过修改变量的值来改变滑梯的外观。

继续看看.slide::before伪元素的样式定义部分。该部分代码用于创建滑梯的左侧把手。

.slide::before {
   
  content: '';
  position: absolute;
  top: 50%;
  left: -20px;
  transform: translateY(-50%);
  width: 20px;
  height: 60px;
  background-color: var(--slide-color);
}

上面代码里使用.slide::before选择器来选中滑梯的伪元素。通过设置content属性为空字符串,创建了一个空的伪元素。使用position属性将伪元素相对于滑梯元素进行定位。

通过top: 50%left: -20px将伪元素定位在滑梯元素的左侧并垂直居中。然后,使用transform: translateY(-50%)将伪元素在垂直方向上进行偏移,使其保持垂直居中。

最后定义了伪元素的宽度和高度分别为20像素和60像素,并且使用变量--slide-color指定了把手的背景颜色。

全部代码

下面就是整合了我们此次教程的全部代码:

HTML

<body>
  <div class="box-canvas">
    <div class="dog">
      <div class="heart"></div>
      <div class="body"></div>
      <div class="nose"></div>
      <div class="ear"></div>
      <div class="eye"></div>
      <div class="tail"></div>
    </div>
    <div class="slide">
      <div class="slide-end"></div>
      <div class="slide-main"></div>
      <div class="slide-start"></div>

    </div>
  </div>
</body>

CSS

:root {
   
  --dog-color: white;
  --dog-accent-color: #333642;
  --background-color: #25A9FC;
  --slide-color: #FEDF01;
  --ladder-color: #0185B5;
  --heart-color: #E81C23;
}

body{
   
  background: var(--background-color);
}

.box-canvas{
   
  position: relative;
  margin: auto;
  display: block;
  margin-top: 8%;
  margin-bottom: 8%;
  width: 600px;
  height:600px;
}

/* Convenience wrapper for easy positioning */
.dog {
   
  position: absolute;
  right: 170px;
  top: 70px;
  width: 58px;
  height: 75px;
  animation: dogSlide 2s infinite ease-in-out;
}

@keyframes dogSlide {
   
  10% {
   
    transform: translateX(-25px);
  }

  70% {
   
    transform: rotate(-20deg) translate(-185px, 50px);
  }

  90% {
   
     transform: translate(-205px, 125px);
  }

  100% {
   
     transform: translate(-205px, 125px);
  }
}

.heart {
   
  opacity: 0;
  position: absolute;
  background: var(--heart-color);
  width: 15px;
  height: 15px;
  border-radius: 50%;
  top: -50px;
  left: 60%;
  transform: translateX(-60%);
  animation: heartAppear 2s infinite ease-in-out;
}

.heart::before {
   
  content: '';
  position: absolute;
  left: 10px;
  background: var(--heart-color);
  width: 15px;
  height: 15px;
  border-radius: 50%;
}

.heart::after {
   
  content: '';
  position: absolute;
  top: 10px;
  left: 0;
  background: var(--heart-color);
  width: 25px;
  height: 10px;
  clip-path: polygon(50% 100%, 0 0, 100% 0);
}

@keyframes heartAppear {
   
  0% {
   
     opacity: 0;
  }

  50% {
   
    opacity: 0;
  }

  70% {
   
    opacity: 1;
  }

  90% {
   
    opacity: 1;
  }

  100% {
   
    opacity: 0;
  }
}

.body {
   
  position: absolute;
  left: 13px;
  width: 44px;
  height: 75px;
  border-radius: 25% 10% 20% 20%;
  background: var(--dog-color);
}

.body::before{
   
  content: '';
  position: absolute;
  top: 5px;
  left: -3px;
  background: var(--dog-color);
  border-radius: 20%;
  width: 20px;
  height: 30px;
  transform: rotate(45deg);
}

/* Snout section */
.body::after {
   
  content: '';
  position: absolute;
  background: var(--dog-color);
  width: 25px;
  height: 15px;
  top: 20px;
  left: -12px;
  border-radius: 20% 20% 50% 20%;
  border-bottom: 2px solid var(--dog-accent-color);
  animation: dogSmile 2s infinite ease-in-out;
}

@keyframes dogSmile {
   
  0% {
   
    border-radius: 20% 20% 20% 20%;
    border-bottom: none;
  }

  70% {
   
    border-radius: 20% 20% 50% 20%;
    border-bottom: 2px solid var(--dog-accent-color);
  }
}

.nose {
   
  position: absolute;
  background-color: var(--dog-accent-color);
  width: 8px;
  height: 5px;
  border-radius: 30%;
  top: 20px;
}

.ear {
   
  position: absolute;
  left: 35px;
  width: 20px;
  height: 30px;
  background: var(--dog-accent-color);
  border-radius: 0 0 30% 30%;
}

.eye {
   
  position: absolute;
  left: 22px;
  top: 10px;
  background: var(--dog-accent-color);
  width: 5px;
  height: 5px;
  border-radius: 50%;
}

.tail {
   
  position: absolute;
  bottom: 0;
  right: -8px;
  width: 10px;
  height: 55px;
  background: var(--dog-color);
  transform: rotate(25deg);

}

.tail::before {
   
  content: '';
  position: absolute;
  top: -15px;
  width: 15px;
  height: 25px;
  background: var(--dog-color);
  clip-path: polygon(12% 0, 0% 100%, 100% 100%);
}

.tail::after {
   
  content: '';
  position: absolute;
  top: 5px;
  left: 5px;
  width: 12px;
  height: 25px;
  background: var(--dog-color);
  clip-path: polygon(12% 0, 0% 100%, 100% 100%);
}

/* Convenience wrapper for positioning */
.slide {
   
  position: absolute;
  width: 270px;
  height: 200px;
  left: 50%;
  transform: translateX(-50%);
  top: 100px;
}

.slide-main {
   
  position: absolute;
  bottom: 64px;
  left: 53px;
  width: 200px;
  height: 50px;
  background: var(--slide-color);
  transform: rotate(-45deg);
}

.slide-end {
   
  position: absolute;
  height: 50px;
  width: 100px;
  background: var(--slide-color);
  bottom: 0;
  border-radius: 50% 0 0 0;
}

.slide-start {
   
  position: absolute;
  height: 50px;
  top: 23px;
  width: 63px;
  background: var(--slide-color);
  right: 0px;
}

/* Ladder */
.slide-start::after {
   
  content: '';
  position: absolute;
  height: 177px;
  width: 10px;
  background: var(--ladder-color);
  right: 0;
}

本文同步我的技术文档

相关文章
|
2月前
|
前端开发
2s 利用 HTML+css动画实现企业官网效果
2s 利用 HTML+css动画实现企业官网效果
|
9天前
|
JavaScript 前端开发
JS配合CSS3实现动画和拖动小星星小Demo
本文通过代码示例展示了如何使用JavaScript和CSS3实现动画效果和拖动小星星的交互效果,包括文字掉落动画和鼠标拖动产生小星星动画的实现方法。
23 0
JS配合CSS3实现动画和拖动小星星小Demo
|
2月前
|
前端开发 UED 开发者
有趣的CSS - 文字加载动画效果
这个文本加载动画简单而有趣,可以在网站标题、广告标语或者关键信息的展示上吸引用户的注意力。开发者可以根据需要调整动画的持续时间、步骤数,或者光标颜色等,来适应特定的设计需求。使用这种动态元素,增强网站的互动性和用户体验,同时也为网站增添了一抹活泼的风格。
41 5
|
2月前
|
前端开发 JavaScript
HTML+CSS如何打造撒花动画效果?3分钟学会,炫酷到爆!
HTML+CSS如何打造撒花动画效果?3分钟学会,炫酷到爆!
|
2月前
|
前端开发
CSS动画霓虹灯闪烁效果
CSS动画霓虹灯闪烁效果
|
2月前
|
前端开发 JavaScript
还在为酷炫css动画背景头疼吗?1分钟解决
还在为酷炫css动画背景头疼吗?1分钟解决
|
2月前
|
前端开发
HTML+CSS动画实现动感3D卡片墙:现代Web设计的视觉盛宴
HTML+CSS动画实现动感3D卡片墙:现代Web设计的视觉盛宴
|
2月前
|
前端开发
一键复制HTML+CSS动画 打造炫酷的搜索框
一键复制HTML+CSS动画 打造炫酷的搜索框
|
2月前
|
容器
html+css动画来袭!登录人人可领
html+css动画来袭!登录人人可领
|
2月前
|
前端开发
CSS动画变形宝典:Transform属性,打造动态视觉盛宴!
CSS动画变形宝典:Transform属性,打造动态视觉盛宴!