中秋节快乐,使用CSS3实现小火箭绕月飞行

中秋节快乐,使用CSS3实现小火箭绕月飞行

海上生明月,天涯共此时

前言

一年一度的中秋悄然而至,提前祝掘友们中秋节快乐,祝大家开心甜蜜与爱人团圆,幸福美满和家人相聚,好运相随“圆圆”不断 🚀🚀🚀

布局

为了适配PC端和移动端,布局单位全部使用rem来实现整体缩放,通过js获取设备宽度动态设置页面中html的font-size大小

整体布局:

<body>
  <div class="container">
    <div class="moon"></div>
    <div class="orbit">
      <div class="rocket-box">
        <div class="rocket">
          <span class="cockpit"></span>
          <span class="engine"></span>
          <span class="flanks"></span>
        </div>
      </div>
    </div>
  </div>
</body>
  • container: 设置容器大小,相对定位,容器内部元素水平、垂直居中
  • moon: 月亮
  • orbit: 火箭运行轨道,制作拖影效果
  • rocket-box: 火箭容器,用于调整火箭在轨道上位置和飞行姿态
  • rocket: 火箭大小
  • cockpit:火箭驾驶舱、舷窗
  • engine:火箭引擎、喷火处
  • flanks: 火箭两翼

月亮

设置container宽高,子元素垂直水平居中

设置月亮宽高,用box-shadow给月亮添加光晕

.container {
  margin: .24rem auto;
  width4.5rem;
  height4.5rem;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}
.moon {
  width1.4rem;
  height1.4rem;
  background-color: yellow;
  border-radius50%;
  box-shadow0 0 .3rem white;
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

火箭轨道

火箭轨道是一个围绕月亮的圆,利用border属性绘制出拖影效果

.orbit {
  position: absolute;
  width3rem;
  height3rem;
  border-radius50%;
  border-width0.01rem;
  border-style: solid solid none none;
  border-color: silver transparent transparent transparent;
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

制作火箭

设置火箭宽高,并把火箭定位到火箭拖影的开始位置

.rocket-box {
  position: absolute;
  top0.35rem;
  right: -.12rem;
}
.rocket {
  width: .55rem;
  height: .6rem;
  position: relative;
  border1px dashed #fff; // 临时加辅助线,确定火箭位置
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

驾驶舱

一个长方形,用border-radius使上方成弧形,利用伪元素画出舷窗

.cockpit {
  position: absolute;
  width: .35rem;
  height: .5rem;
  backgroundlinear-gradient(whitesmoke, darkgray);
  border-radius50% / 70% 70% 5% 5%;
  left: .1rem;
}
.cockpit::before {
  content'';
  position: absolute;
  box-sizing: border-box;
  width: .16rem;
  height: .16rem;
  background-color: deepskyblue;
  border-radius50%;
  border0.02rem solid lightslategray;
  top: .13rem;
  left: .11rem;
  box-shadow: inset -0.01rem 0.01rem white;
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

引擎

引擎由喷气管和火焰组成,用伪元素制作火焰,其中一个细节是引擎要在驾驶舱下层,要给驾驶舱cockpit添加z-index: 1,火焰在喷气管下层,z-index设为-1

.cockpit {
   ...
   z-index1;
}
.engine {
  position: absolute;
  width: .2rem;
  height: .15rem;
  background-color#444;
  border-radius20%;
  top: .4rem;
  eft: .17rem;
}
.engine::before {
  content'';
  position: absolute;
  box-sizing: border-box;
  width: .14rem;
  height: .14rem;
  background: gold;
  border-radius80% 0 50% 45% /50% 0 80% 45%;
  transformrotate(135deg);
  border0.01rem solid orange;
  left0.03rem;
  top: .1rem;
  z-index: -1;
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

两翼

用before、after伪元素完成两翼对称制作,用border-radius设置两翼形状,定位到驾驶舱两侧

.flanks::before,
.flanks::after {
  content'';
  position: absolute;
  width: .08rem;
  height: .3rem;
  backgroundlinear-gradient(tomato,darkred);
  top: .3rem;
}
.flanks::before {
  border-radius: .1rem 0 50% 100%;
  left: .02rem;
}
.flanks::after {
  border-radius0 .1rem 100% 50%;
  right0.04rem;
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

去掉辅助线,调整火箭飞行姿态

.rocket-box {
  position: absolute;
  top0.38rem;
  right0;
  transformrotate(145deg);
}

效果如下:

中秋节快乐,使用CSS3实现小火箭绕月飞行

火箭绕月飞行

给火箭运行轨道添加animation,嫦娥一号绕月一圈飞行时间为127分钟,该动画设为12.7s一圈、以linear方式进行循环(infinite)播放

1turn = 360deg

.orbit {
  position: absolute;
  width3rem;
  height3rem;
  border-radius50%;
  border-width0.01rem;
  border-style: solid solid none none;
  border-color: silver transparent transparent transparent;
  animation: spinning linear infinite;
  animation-duration12.7s;
}
@keyframes spinning {
  to {
    transformrotate(1turn)
  };
}

体验网址

http://47.95.118.117:10002/

最好祝大家中秋节快乐,好运连连!

文章出自:https://juejin.cn/post/7006721748368359460

作者:日月之行_


原文始发于微信公众号(前端24):中秋节快乐,使用CSS3实现小火箭绕月飞行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/216782.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!