我用CSS画了个火箭送嫦娥妹妹回家

Posted Mq_sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用CSS画了个火箭送嫦娥妹妹回家相关的知识,希望对你有一定的参考价值。

我用CSS画了个火箭送嫦娥妹妹回家

就在8月17号我国神州十二号载人飞船顺利回家。又恰逢中秋佳节,真是值得庆祝的一天。我这灵机一动,就想着开火箭送嫦娥妹妹回家,哈哈~

先来看看成品。

接下来看看怎么实现

一、元素

<body>
    <div class="moon"></div>
    <div class="rocket">
        <div class="left"></div>
        <div class="main"></div>
        <div class="right"></div>
        <div class="bottom"></div>
    </div>
   <img src="../vue/change.png" class="img1">
   <img src="../vue/change.png" class="img2">
</body>
  • 月亮 -->moon
  • 火箭 -->rocket
    • 火箭机舱 -->main
    • 火箭侧翼 -->left、right
    • 火箭引擎 -->bottom
  • 嫦娥 -->img1、img2

我的思路:构图元素非常简单。主要css画火箭还是又难又好玩,没想到还能这样玩。再是画一个月亮,再整体添加动画,不过要注意动画的衔接时间,不然会感觉不顺畅。

二、火箭实现

在画火箭之前,肯定要知道火箭长啥样,啥结构,然后开始布局。

由于我太菜了,就想着画一个最简单的就行了。这是我一开始想的最简单的火箭结构。其余的小结构,比如火箭的机舱,火焰,可以使用伪元素去实现。div能省则省。还有一个问题就是配色,火箭颜色如果比较单调就不是很好看,所以渐变色,或者自己喜欢什么颜色来调。这个好头疼。
(不会告诉你们我是看漫画看到的)

在这里插入图片描述

css代码

 .rocket{
        position: absolute;
        bottom: 0%;
        left: 74%;
        width: 100px;
        height: 200px;
    }
     /* 机舱 */
    .main{
        position: absolute;
        width: 50px;
        height: 100px;
        left: 20%;
        top: 5%;
        background: linear-gradient(whitesmoke, darkgray);
        border-radius: 50% / 70% 70% 5% 5%;
        border: .5px solid black;
        z-index: 1;
    }
    /* 使用伪元素画出火箭的窗户 */
    .main::before{
        content: '';
        position: absolute;
        box-sizing: border-box;
        width: 30px;
        height: 30px;
        background-color: deepskyblue;
        border-radius: 50%;
        border: 1px solid lightslategray;
        top: 17%;
        left: 20%;
        box-shadow: inset -0.01rem 0.01rem white;
    }
    .left{
        position: absolute;
        width: 10px;
        height: 20px;
        top: 45%;
        left: 10%;
        background: #ec2825;
        border-radius: 12px 0 50% 100%;
    }
    .right{
        position: absolute;
        width: 10px;
        height: 20px;
        top: 45%;
        left: 71%;
        border-radius: 0 12px 100% 50%;
        background: #ec2825;
    }
    /* 引擎 */
    .bottom{
        position: absolute;
        width: 30px;
        height: 10px;
        top: 54%;
        left: 30%;
        border: 1px solid black;
        background-color: #8a6b6a;
        border-radius: 20%;
    }
    /* 使用伪元素添加火焰 */
    .bottom::before{
        content: "";
        position: absolute;
        top: 80%;
        left: 10%;
        width: 25px;
        height: 30px;
        border-radius: 0 0 100% 100%;
        background-image: linear-gradient(to bottom,rgb(255,255,0), transparent 70%);
        z-index: -2;
    }

这一步花完我们的火箭就出来了。代码部分有注释。

三、月亮实现

月亮就很简单了,主要还是颜色的选择,我这里选的是银白光。因为在夜晚嘛。配合我的背景还是很应景的。

css代码

 /* 月亮 */
    .moon{
        position: absolute;
	    top:10%;
        right:15%;
        width:100px;
        height:100px;
        border-radius:50%;	
        background:white;
        opacity:0.9;			
        box-shadow: 0px 0px 40px 15px white;
    }

月亮实现完是这样的,要给你的body配上背景噢,不能是白色,不然就看不见了。如果是白色的背景也看不见。

四、动画实现

动画的实现也是重点。我在这里主要就添加了嫦娥飞向火箭、火箭飞向月亮、嫦娥从火箭下车、火箭的喷火动画。前面三个动画有先后的关系,火箭喷火的动画是需要一直持续的。还有就是动画的衔接时间差这要去慢慢调,以及每一帧的快慢都会影响到流畅、体验感。

嫦娥的图片是我随便到网上找了(王者如梦令皮肤)截图下来。实在不想去找图了,自己华更是画不出来。

火焰喷火

所有动画代码包括前面的。
css代码

<style>
    * {
            padding: 0;
            margin: 0;
        }
        html,
        body {
            width: 100vw;
            height: 100vh;
    }
    body{
            background:url(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb3-q.mafengwo.net%2Fs9%2FM00%2FF7%2F2B%2FwKgBs1d2kdWAafk6ABSBh-QX0Sk25.jpeg%3FimageView2%2F2%2Fw%2F680%2Fq%2F90&refer=http%3A%2F%2Fb3-q.mafengwo.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1634542316&t=71a8d576439e8bd85873201a45f8c1a8);
            background-size: cover;
        }
    /* 火箭 */
    .rocket{
        position: absolute;
        bottom: 0%;
        left: 74%;
        width: 100px;
        height: 200px;
        animation:rocket 8s;
	    -webkit-animation:rocket 8s; 
        animation-fill-mode: forwards;
        animation-delay: 6s;
    }
    @keyframes rocket{
        0% {bottom: 10%;}
        80%{bottom: 70%;}
        100% {bottom: 100%;}
    }
    /* 月亮 */
    .moon{
        position: absolute;
	    top:10%;
        right:15%;
        width:100px;
        height:100px;
        border-radius:50%;	
        background:white;
        opacity:0.9;			
        box-shadow: 0px 0px 40px 15px white;
    }
    /* 机舱 */
    .main{
        position: absolute;
        width: 50px;
        height: 100px;
        left: 20%;
        top: 5%;
        background: linear-gradient(whitesmoke, darkgray);
        border-radius: 50% / 70% 70% 5% 5%;
        border: .5px solid black;
        z-index: 1;
    }
    /* 使用伪元素画出火箭的窗户 */
    .main::before{
        content: '';
        position: absolute;
        box-sizing: border-box;
        width: 30px;
        height: 30px;
        background-color: deepskyblue;
        border-radius: 50%;
        border: 1px solid lightslategray;
        top: 17%;
        left: 20%;
        box-shadow: inset -0.01rem 0.01rem white;
    }
    .left{
        position: absolute;
        width: 10px;
        height: 20px;
        top: 45%;
        left: 10%;
        background: #ec2825;
        border-radius: 12px 0 50% 100%;
    }
    .right{
        position: absolute;
        width: 10px;
        height: 20px;
        top: 45%;
        left: 71%;
        border-radius: 0 12px 100% 50%;
        background: #ec2825;
    }
    /* 引擎 */
    .bottom{
        position: absolute;
        width: 30px;
        height: 10px;
        top: 54%;
        left: 30%;
        border: 1px solid black;
        background-color: #8a6b6a;
        border-radius: 20%;
    }
    /* 使用伪元素添加火焰 */
    .bottom::before{
        content: "";
        position: absolute;
        top: 80%;
        left: 10%;
        width: 25px;
        height: 30px;
        border-radius: 0 0 100% 100%;
        background-image: linear-gradient(to bottom,rgb(255,255,0), transparent 70%);
        z-index: -2;
        transform-origin: 50% 0;
        animation: fire 0.1s linear alternate infinite;
    }
    /* 给火焰添加一个动画 */
    @keyframes fire {
    to {
        transform: scaleX(0.98) translateY(-1vmin);
    }
}
.img1{
    width: 50px;
    height: 50px;
    border-radius: 50%;
    position: absolute;
    left: 10%;
    bottom: 5%;
    animation:changer 5s;
	-webkit-animation:changer 5s; 
    animation-fill-mode: forwards;
}
@keyframes changer{
    0% {left: 15%;}
    99% {left: 75%;bottom: 20%;z-index: 1;width: 25px;height: 25px;}
    100% {left: 75%;bottom: 20%;visibility: hidden;width: 25px;height: 25px;}
}
.img2{
    width: 25px;
    height: 25px;
    border-radius: 50%;
    position: absolute;
    visibility: hidden;
    right: 20%;
    top: 13%;
    animation:changer2 3s;
	-webkit-animation:changer2 3s; 
    animation-fill-mode: forwards;
    animation-delay: 11s;
}
@keyframes changer2{
    0% {right: 20%;visibility: inherit;}
    50% {right:18%;width: 30px;height: 40px;visibility: inherit;}
    100% {right:17%;width: 50px;height: 50px;visibility: inherit;}
}
</style>

小结

css动画是重点内容,动画的应用很广泛。
自己在写这个的时候又重新复习了下css,前端太难了。

欢迎各位大佬互相交流。

最后最大家中秋快乐!

都看到最后了,就来点个赞吧。

以上是关于我用CSS画了个火箭送嫦娥妹妹回家的主要内容,如果未能解决你的问题,请参考以下文章

[环上dp] JZOJ P1793 教主泡嫦娥

急急急|最后6小时,ipad免费送!

我用canvas画了一个茶杯

朋友过生日,用Python给她画了个生日蛋糕

朋友过生日,用Python给她画了个生日蛋糕

三手火箭载二手飞船送四名平民上太空,马斯克负责创造历史,另一位富豪出钱买单...