您的当前位置:首页正文

html+ccs3太阳系行星运转动画

2024-10-18 来源:威能网
做一个太阳系八大行星的运转动画,不包括行星的卫星,所有行星围绕太阳公转,行星采用纯色,暂时没有自转。

效果静态图:

动画中包括:太阳及各行星,运行轨道,行星公转动画。

先画好草图,设计好大小和位置,根据公转周期计算好动画执行的时间。

html的结构:

一个class为solarsys的div,作为太阳系容器元素,该div的position为relative。

行星轨道和行星都用div,position为absolute。

容器用relative和内部元素采用absolute的定位方式,比较简单的能实现效果,缺点就是大小是固定的。

 

太阳系容器div的css:

定宽,定高,relative定位,页面内剧中对齐。

 .solarsys{
 width: 800px;
 height: 800px;;
 position: relative;
 margin: 0 auto;
 background-color: #000000;
 padding: 0;
 transform: scale(1);
 }

太阳div的css:

按照设计的大小和位置,设定宽高,left,top。

设定颜色。

通过把boder-radius生成50%,把一个正方形变成圆形。

通过box-shadow的4层颜色设置实现太阳光晕。

 .sun {
 left:357px;
 top:357px;
 height: 90px;
 width: 90px;
 background-color: rgb(248,107,35);
 border-radius: 50%;
 box-shadow: 5px 5px 10px rgb(248,107,35), -5px -5px 10px rgb(248,107,35), 5px -5px 10px rgb(248,107,35), -5px 5px 10px rgb(248,107,35);
 position: absolute;
 margin: 0;
 }

行星轨道div的css:

假设是水星轨道。

按照设计的大小和位置,设定宽高,left,top。

背景色透明。

通过把boder-radius生成50%,把一个正方形变成圆形。

boder的类型设成虚线。

boder的颜色设成灰色。

宽度设1。

 .mercuryOrbit {
 left:342.5px;
 top:342.5px;
 height: 115px;
 width: 115px;
 background-color: transparent;
 border-radius: 50%;
 border-style: dashed;
 border-color: gray;
 position: absolute;
 border-width: 1px;
 margin: 0px;
 padding: 0px;
 }

行星div的css:

假设是水星。

按照设计的大小和位置,设定宽高,left,top。

设置颜色。

通过把boder-radius生成50%,把一个正方形变成圆形。

将transfrom-origin设定成当前div的左上角相对于整个太阳系容器的中心点的横向和纵向的偏移量。加上旋转动画后就是围绕着中心点旋转效果。

做一个animation,引用rotate关键帧动画,线性永久执行,这里的执行时长是根据行星的公转周期计算出来。

 .mercury {
 left:337.5px;
 top:395px;
 height: 10px;
 width: 10px;
 background-color: rgb(166,138,56);
 border-radius: 50%;
 position: absolute;
 transform-origin: 62.5px 5px;
 animation: rotate 1.5s infinite linear;
 }

rotate关键帧动画:

逆时针旋转。

 @keyframes rotate {
 100% {
 transform: rotate(-360deg);
 }
 }

基本结构完成。

仅在chrome中测试过。

全部代码: