我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛
🐇🐇🐇🐇 过新年了,我用最简单的css实现火箭炮与烟花效果,祝大家新年快乐,万事如意!!!
🐇🐇🐇 体验区
🐇🐇🐇 实现火箭炮
我把火箭炮拆成三个部分:一部分是头部的圆角三角形、一部分是火箭炮火药桶、一部分是火箭炮导火线。
火箭炮的代码如下
<div class="rocketGun" id="rocketGun">
<div class="gradient">
<div class="bg"></div>
</div>
<div class="cylinder" id="cylinder">
<div class="cylinderLi"></div>
<div class="cylinderLi"></div>
<div class="cylinderLi"></div>
<div class="cylinderLi"></div>
</div>
<div class="woodStick">
</div>
<div class="firewire" id="firewire">
<div class="imgs" id="imgs">
<img src="./img/firewire.png">
<img src="./img/firewire.png">
<img src="./img/firewire.png">
<img src="./img/firewire.png">
</div>
</div>
</div>
:root {
--width: 60px;
}
.rocketGun {
width: 60px;
height: 250px;
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
}
.firecracker {
animation: firecracker 3s forwards;
}
.gradient {
position: absolute;
width: var(--width);
height: var(--width);
transform: rotate(30deg) skewY(30deg) scaleX(0.866);
border-radius: 20%;
z-index: 99;
overflow: hidden;
border: unset;
}
.gradient .bg {
position: absolute;
transform: rotate(-10deg);
width: 3px;
background: rgba(175, 5, 92, 0.85);
top: 0;
z-index: 999;
left: 5px;
height: 50px;
}
.gradient::before,
.gradient::after {
content: "";
position: absolute;
width: var(--width);
height: var(--width);
}
.gradient::before {
border-radius: 20% 20% 20% 55%;
background: #ff4fa7;
}
.gradient::after {
border-radius: 20% 20% 55% 20%;
background: #ff4fa7;
}
.gradient::before {
/*background: linear-gradient(#0f0, #03a9f4);*/
transform: scaleX(1.155) skewY(-30deg) rotate(-30deg) translateY(-42.3%) skewX(30deg) scaleY(0.866) translateX(-24%);
}
.gradient::after {
/*background: linear-gradient(#0f0, #03a9f4);*/
transform: scaleX(1.155) skewY(-30deg) rotate(-30deg) translateY(-42.3%) skewX(-30deg) scaleY(0.866) translateX(24%);
}
.cylinder {
width: 36px;
margin: 0 auto;
height: 90px;
overflow: hidden;
border: 4px solid #000000;
z-index: 88;
top: 28px;
left: 50%;
transform: translateX(-50%);
position: absolute;
}
.zebra {
/*display: flex;*/
/*flex-direction: column;*/
background: repeating-linear-gradient(70deg, #ac56ab 0px, #ac56ab 10px, #39c0e6 0px, #39c0e6 20px);
}
.woodStick {
width: 3px;
border-radius: 10px;
height: 150px;
position: absolute;
top: 100px;
left: 15px;
border: 4px solid #000000;
background: rgba(212, 117, 0, 0.76);
}
.firewire {
width: 2px;
border-radius: 5px;
height: 50px;
position: absolute;
top: 100px;
right: 15px;
background: #000000;
transition: all 0.5s;
}
.imgs {
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
width: 15px;
height: 10px;
display: none;
}
.imgs img {
width: 100%;
height: 100%;
position: absolute;
top: 0;
transform: scale(0);
}
.star .cylinderLi {
position: absolute;
margin: 0px auto;
width: 0;
height: 0;
border-style: solid;
border-color: transparent transparent #fae52b transparent;
border-width: 7px 10px;
transform: rotate(35deg);
}
.star .cylinderLi:nth-child(1) {
top: 10px;
left: 4px;
}
.star .cylinderLi:nth-child(2) {
top: 30px;
left: 18px;
}
.star .cylinderLi:nth-child(3) {
top: 44px;
left: -5px;
}
.star .cylinderLi:nth-child(4) {
top: 60px;
left: 8px;
}
.star .cylinderLi::before {
position: absolute;
content: '';
width: 0;
height: 0;
top: -12.8px;
left: -9.5px;
border-style: solid;
border-color: transparent transparent #fae52b transparent;
border-width: 8px 3px;
transform: rotate(-35deg);
}
.star .cylinderLi::after {
position: absolute;
content: '';
width: 0;
height: 0;
top: -4.5px;
left: -14px;
border-style: solid;
border-color: transparent transparent #fae52b transparent;
border-width: 7px 10px;
transform: rotate(-70deg);
}
实现效果
火箭筒我还实现了两种效果,随机产生
🐇🐇🐇 点燃火箭炮
我找了一个中国各个城市代表的背景图,也祝祖国新年快乐!!!还跟李云龙借来了他的意大利炮按钮。整体效果如下:
点击开炮按钮就会点燃火箭炮了,效果你们自己去试试
单单实现火箭炮怎么够呢,我又用了强大的CSS实现了烟花
🐇🐇🐇 实现烟花
使用CSS的 background 仅有的特效属性linear-gradient与 radial-gradient画满整个div,实现烟花粒子效果。再配合animation将div不断放大,实现烟花绽放的效果。
代码如下:
<div class="firework" id="firework">
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
<div class="rocketFirework"></div>
</div>
.firework {
position: absolute;
width: 100%;
height: 100%;
top: -16%;
left: 50%;
transform: translate3d(-50%, 0%, 10px) scale(0.8, 0.6);
overflow: hidden;
display: none;
}
@keyframes fireworks-animation {
0% {
transform: translate(-50%, 90vh);
width: 4px;
opacity: 1;
}
50% {
width: 4px;
opacity: 1;
}
100% {
width: 600px;
opacity: 0;
}
}
.rocketFirework,
.rocketFirework::before,
.rocketFirework::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
aspect-ratio: 1;
background: linear-gradient(0deg, #39c0e6 80%, rgba(57, 192, 230, 0.44) 20%) 50% 00%,
linear-gradient(0deg, #3fd1fc 100%, #101215 0%) 00% 50%,
radial-gradient(circle at center, #d2439c 50%, #5c00fe 30%, #211122 0%) 50% 99%,
radial-gradient(circle at center, #ff01f3 50%, #fd0094 30%, #211122 0%) 99% 50%,
radial-gradient(circle at center, #4bf100 50%, #1b9f00 30%, #211122 0%) 80% 90%,
radial-gradient(circle at center, #ff0044 50%, #f2052d 30%, #211122 0%) 95% 90%,
radial-gradient(circle at center, #01d4f7 50%, #0280c2 30%, #211122 0%) 10% 60%,
linear-gradient(0deg, #3fd1fc 100%, #101215 0%) 31% 80%,
radial-gradient(circle at center, #d2439c 50%, #5c00fe 30%, #211122 0%) 80% 10%,
radial-gradient(circle at center, #ff01f3 50%, #fd0094 30%, #211122 0%) 90% 23%,
radial-gradient(circle at center, #ff01f3 50%, #fd0094 30%, #211122 0%) 45% 20%,
radial-gradient(circle at center, #4bf100 50%, #1b9f00 30%, #211122 0%) 13% 24%;
background-size: 8px 8px;
background-repeat: no-repeat;
transform: translate(-50%, -50%);
animation: fireworks-animation 4s infinite;
}
.rocketFirework::before {
transform: translate(-50%, -50%) rotate(25deg) !important;
}
.rocketFirework::after {
transform: translate(-50%, -50%) rotate(-37deg) !important;
}
.rocketFirework:nth-of-type(2),
.rocketFirework:nth-of-type(2)::before,
.rocketFirework:nth-of-type(2)::after {
top: 30%;
left: 16%;
animation-duration: 3.8s;
}
.rocketFirework:nth-of-type(3),
.rocketFirework:nth-of-type(3)::before,
.rocketFirework:nth-of-type(3)::after {
top: 10%;
left: 72%;
animation-duration: 4.2s;
}
.rocketFirework:nth-of-type(4),
.rocketFirework:nth-of-type(4)::before,
.rocketFirework:nth-of-type(4)::after {
top: 28%;
left: 32%;
animation-duration: 3.6s;
}
.rocketFirework:nth-of-type(5),
.rocketFirework:nth-of-type(5)::before,
.rocketFirework:nth-of-type(5)::after {
top: 32%;
left: 84%;
animation-duration: 4.4s;
}
.rocketFirework:nth-of-type(6),
.rocketFirework:nth-of-type(6)::before,
.rocketFirework:nth-of-type(6)::after {
top: 38%;
left: 40%;
animation-duration: 4.1s;
}
.rocketFirework:nth-of-type(7),
.rocketFirework:nth-of-type(7)::before,
.rocketFirework:nth-of-type(7)::after {
top: 28%;
left: 64%;
animation-duration: 3.9s;
}
.rocketFirework:nth-of-type(8),
.rocketFirework:nth-of-type(8)::before,
.rocketFirework:nth-of-type(8)::after {
top: 30%;
left: 56%;
animation-duration: 3.9s;
}
效果如下:
🐇🐇🐇 结尾
整体设计思想就是火箭炮开炮飞上天空后,引燃烟花的绽放。简简单单的玩法,祝大家新年快乐,新的一年里面事事顺心、再也没有bug、也能找到另一半。新的一年就到此结束了,创作不易,谢谢点赞。