css动画模拟太阳地球月球运动轨迹示例

CSS动画可以通过优雅的代码实现复杂的效果展示,如太阳系的运动轨迹。以下是实现CSS动画模拟太阳、地球、月球运动轨迹的攻略。

实现思路

  1. 在HTML结构中定义太阳、地球、月球的标签。
  2. 使用CSS设置容器的位置和大小,并设置其为相对定位。
  3. 设置每个太阳系实体的大小、颜色、位置和运动轨迹等各项属性。
  4. 在动画中使用CSS的关键帧(@keyframes)实现运动效果。
  5. 添加多个关键帧,形成循环动画效果。

示例说明

示例一:太阳系基础动画

在示例中,太阳、地球和月球构成基础的太阳系模拟动画。

HTML 结构

<div class="sun"></div>
<div class="earth"></div>
<div class="moon"></div>

CSS 样式

.sun {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background-color: yellow;
  position: relative;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.earth {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background-color: blue;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-earth 10s infinite linear;
}
.moon {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: grey;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-moon 5s infinite linear;
}

@keyframes rotate-earth {
  0% {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}
@keyframes rotate-moon {
  0% {
    transform: translate(-50%, -50%) rotate(0deg) translate(60px) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg) translate(60px) rotate(360deg);
  }
}

上述代码中,.sun.earth.moon表示太阳、地球和月球,它们的widthheightborder-radiusbackground-colorposition属性分别为各自的尺寸大小、颜色和相对/绝对定位等属性。为模拟太阳地球月球的运动轨迹,我们需要在地球和月球上使用动画效果:

  • 地球的运动轨迹使用rotate-earth动画(注:10s为周期)。
  • 月球的运动轨迹使用rotate-moon动画(注:5s为周期)。

动画使用CSS的@keyframes关键帧定义,分别模拟了地球和月球的角度变化。在这里,通过transform属性进行了旋转和平移变换。

示例二:扩展太阳系模拟动画

在示例二中,我们在示例一的基础上,进一步通过继续添加行星和卫星来扩展太阳系模拟动画。

HTML 结构

<div class="sun"></div>
<div class="earth"></div>
<div class="moon"></div>
<div class="mars"></div>
<div class="phobos"></div>
<div class="deimos"></div>

CSS 样式

.sun {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background-color: yellow;
  position: relative;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.earth {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background-color: blue;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-earth 10s infinite linear;
}
.moon {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: grey;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-moon 5s infinite linear;
}
.mars {
  width: 150px;
  height: 150px;
  border-radius: 50%;
  background-color: red;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-mars 20s infinite linear;
}
.phobos {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: pink;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-phobos 2s infinite linear;
}
.deimos {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: brown;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  animation: rotate-deimos 10s infinite linear;
}

@keyframes rotate-earth {
  0% {
    transform: translate(-50%, -50%) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}
@keyframes rotate-moon {
  0% {
    transform: translate(-50%, -50%) rotate(0deg) translate(150px) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg) translate(150px) rotate(360deg);
  }
}
@keyframes rotate-mars {
  0% {
    transform: translate(-50%, -50%) rotate(0deg) translate(400px) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg) translate(400px) rotate(360deg);
  }
}
@keyframes rotate-phobos {
  0% {
    transform: translate(-50%, -50%) rotate(0deg) translate(200px) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg) translate(200px) rotate(360deg);
  }
}
@keyframes rotate-deimos {
  0% {
    transform: translate(-50%, -50%) rotate(0deg) translate(250px) rotate(0deg);
  }
  100% {
    transform: translate(-50%, -50%) rotate(360deg) translate(250px) rotate(360deg);
  }
}

与示例一类似,示例二也定义了太阳、地球、月球的基础样式,此处不再断续赘述。接下来,我们可以在此基础上添加其他太阳系实体:

  • 火星:使用类别为.mars的标签表示。
  • 火星上的卫星:使用类别为.phobos.deimos的标签表示。

与地球、月球的实现类似,我们为火星、火星上的卫星设定了基础样式,并在之上添加了动画(rotate-marsrotate-phobosrotate-deimos)。

值得一提的是,在新增了过个太阳系实体后,我们在关键帧的设置中需要进行适当调整,使其旋转角度、轨迹偏离等参数能够比较逼真地描述各个实体间的相对位置关系。

在实际开发中,我们除了可以尝试模拟太阳系运动,还能更进一步尝试对地震、交通、机器人等现象的动态效果进行模拟,探索到更广领域的CSS动画应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:css动画模拟太阳地球月球运动轨迹示例 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • css高度随宽度比例变化的几种实现方法

    下面是关于 CSS 高度随宽度比例变化的几种实现方法的攻略。 方法一:使用padding百分比计算 我们可以设置一个固定的宽度,然后利用padding百分比来达到高度随宽度变化的效果。例如: <style> .container { width: 500px; height: 0; padding-bottom: 66.6%; backgroun…

    css 2023年6月10日
    00
  • JS实现点击按钮控制Div变宽、增高及调整背景色的方法

    当我们想要在网页中实现交互的时候,JS的作用就非常重要了。通过JS,我们可以实现很多网页操作的交互效果,其中包括通过点击一个按钮来控制div元素的变宽、增高及调整背景色的操作。下面是实现这个效果的完整攻略: HTML结构 首先,我们需要在HTML页面中编写一个包含按钮和待操作的div元素的结构: <button class="btn&quot…

    css 2023年6月10日
    00
  • python Pillow图像降噪处理颜色处理

    下面是针对“python Pillow图像降噪处理颜色处理”的详细攻略。 安装Pillow库 在进行图像处理之前,需要安装Pillow库。 可以通过以下命令行在终端或控制台中安装: pip install Pillow 安装完成后,就可以导入Pillow库进行图像处理了。 图像降噪 图像降噪可以去除图像中的噪点,可以通过Pillow库中的ImageFilte…

    css 2023年6月10日
    00
  • DIV或者DIV里面的图片水平与垂直居中的方法

    让我详细讲解一下DIV或者DIV里面的图片水平与垂直居中的方法。在这里我会给出两种常用的实现方式。 方法一:使用CSS的position和transform属性 首先,HTML结构如下: <div class="wrapper"> <img src="path/to/image.jpg" alt=&q…

    css 2023年6月9日
    00
  • 实现点击按钮后CSS加载效果的实现

    为了实现点击按钮后CSS加载效果的实现,可以使用以下步骤: 定义需要加载的CSS样式:创建一个CSS文件,添加需要加载的CSS样式,并保存至项目文件夹中。在此示例中,我们将采用一个简单的例子,定义一个类 active,并将其的 background-color 属性改为红色。 .active { background-color: red; } 创建HTML…

    css 2023年6月10日
    00
  • 使用css属性:nth-child(n)匹配选择第n个子元素

    使用CSS的:nth-child(n)可以用来选中元素的第n个子元素。这一属性可以给网页设计师带来很多有用的选择元素的方法。下面是完整攻略: 基本语法 使用:nth-child(n)语法如下: selector:nth-child(n) { /* 样式规则 */ } 其中,selector是要选中的元素的选择器,n是要选中的子元素的索引数字。例如: ul l…

    css 2023年6月9日
    00
  • js网页滚动条滚动事件实例分析

    《js网页滚动条滚动事件实例分析》是一个介绍JavaScript滚动事件的文章。本文主要讲解如何使用JavaScript处理网页滚动事件的方法和技巧。 监听网页滚动事件 JavaScript可以通过addEventListener()方法监听网页的滚动事件,在事件触发时执行相应的操作。下面是一个基本的监听滚动事件的示例: window.addEventLis…

    css 2023年6月10日
    00
  • 原生javascript实现简单的datagrid数据表格

    请看下面的攻略: 一、什么是DataGrid数据表格 DataGrid数据表格是Web应用程序中常见的一种显示和编辑数据的方式。它通常由多个数据列和若干行组成,每一个单元格可以编辑文本、选项、日期等不同类型的数据。 二、实现DataGrid数据表格的基本思路 我们可以借助HTML的<table>标签来实现数据表格的显示和基本布局,然后用原生Jav…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部