CSS+HTML流星雨
<style>#papa {
margin: 20px auto;
width: 740px;
height: 640px;
background: #000;
overflow: hidden;
position: relative;
}
#wrap {
position: absolute;
width: 100%;
height: 50%;
transform: rotate(45deg);
}
.line {
--du: 10s; --delay: 0s;
position: absolute;
width: 1px;
height: 100px;
top: -200px;
opacity: .9;
background: linear-gradient(to top, snow, transparent);
animation: flow var(--du) var(--delay) infinite linear;
}
@keyframes flow { to { top: 100%; opacity: 0; } }
</style>
<div id="papa">
<div id="wrap"></div>
</div>
<script>
let total = 40, ww = wrap.offsetWidth;
Array.from({length:total}).forEach((item,key) => {
let sp = document.createElement('span');
sp.className = 'line';
sp.style.cssText += `
--delay: ${Math.random() * 4 - 4}s;
--du: ${Math.random() * 8 + 4}s;
left: ${Math.random() * ww}px;
height: ${Math.random() * 50 + 50}px;
`;
wrap.appendChild(sp);
});
</script>
代码
<style>
#papa {
margin: 20px auto;
width: 740px;
height: 640px;
background: #000;
overflow: hidden;
position: relative;
}
#wrap {
position: absolute;
width: 100%;
height: 50%;
transform: rotate(45deg);
}
.line {
--du: 10s; --delay: 0s;
position: absolute;
width: 1px;
height: 100px;
top: -200px;
opacity: .9;
background: linear-gradient(to top, snow, transparent);
animation: flow var(--du) var(--delay) infinite linear;
}
@keyframes flow { to { top: 100%; opacity: 0; } }
</style>
<div id="papa">
<div id="wrap"></div>
</div>
<script>
let total = 40, ww = wrap.offsetWidth;
Array.from({length:total}).forEach((item,key) => {
let sp = document.createElement('span');
sp.className = 'line';
sp.style.cssText += `
--delay: ${Math.random() * 4 - 4}s;
--du: ${Math.random() * 8 + 4}s;
left: ${Math.random() * ww}px;
height: ${Math.random() * 50 + 50}px;
`;
wrap.appendChild(sp);
});
</script>
主体结构:父元素 + 子元素
其中,模拟流星雨的线条(span 标签)加载到子元素内,这些线条执行关键帧动画。子元素旋转 45 度。
线条模拟方法:一像素宽、100像素以内高度,线性渐变背景,参与渐变颜色雪白色+透明色,线条主体透明度 0.9,关键帧动画逐渐变化到0.1。总体上有拖尾效果,虽然不太逼真。
关键帧动画:每条线周期时长不一样,延时也不一样,所以运动过程中有错落感。 “线性渐变背景,参与渐变颜色雪白色+透明色”,再加上透明度变化,真的有流星划过的感觉呢{:4_199:} 这么多流星,赶紧许愿啊{:4_173:} 不光是CSS+HTML,也有JS的功劳啊{:4_173:} 红影 发表于 2023-4-16 22:05
“线性渐变背景,参与渐变颜色雪白色+透明色”,再加上透明度变化,真的有流星划过的感觉呢
有点像,没有画布做的那么逼真 红影 发表于 2023-4-16 22:09
不光是CSS+HTML,也有JS的功劳啊
没有JS也行,但要一个一个地写 span 样式。
所以现在出现很多的 CSS in JS 的组件,css-doodle 就是其中一个。 红影 发表于 2023-4-16 22:06
这么多流星,赶紧许愿啊
{:4_195:} 马黑黑 发表于 2023-4-16 22:32
有点像,没有画布做的那么逼真
已经很像了{:4_187:} 马黑黑 发表于 2023-4-16 22:33
没有JS也行,但要一个一个地写 span 样式。
所以现在出现很多的 CSS in JS 的组件,css-doodle 就是其 ...
哦哦,就是封装起来使用吧。 马黑黑 发表于 2023-4-16 22:34
这是喊谁呢{:4_173:} 俺明着许愿:神仙诸佛菩萨上帝听好了,借俺阳寿两万年!不得有误{:4_170:} 樵歌 发表于 2023-4-17 08:02
俺明着许愿:神仙诸佛菩萨上帝听好了,借俺阳寿两万年!不得有误
准了 红影 发表于 2023-4-16 23:24
这是喊谁呢
许愿啊 红影 发表于 2023-4-16 23:24
哦哦,就是封装起来使用吧。
用的时候省事 红影 发表于 2023-4-16 23:23
已经很像了
勉勉强强,还可以的吧 谢谢老师分享优秀资源,辛苦了! 非常开心 发表于 2023-4-17 09:17
谢谢老师分享优秀资源,辛苦了!
上午好 马黑黑 发表于 2023-4-17 09:05
许愿啊
对,可以把这个帖子当做许愿帖,每个人来这里许下自己的愿望{:4_173:}