使用CSS阴影实现星空背景

CSS实现星空背景

效果图如下

在这里插入图片描述

页面结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>星空背景</title>
    <link rel="stylesheet" href="星空背景.css">
</head>
<body>
    <div class="main">
        <div class="item1"></div>
        <div class="item2"></div>
        <div class="item3"></div>
        <div class="item4"></div>
        <div class="item5"></div>
    </div>
</body>
</html>
  • 基础结构就是只有5个元素
  • 看到的大小不同的粒子就是不同层级的元素

SCSS 文件

.main {
    width: 100vw;
    height: 100vh;
    background-color: #000;
    
	$location: 100; // 每个粒子的随机位置单位vw、vh
	$duration: 200s; // 最小粒子的运行速度
    $count: 100; // 粒子数量
    
    @function getShadows($n) {
        $shadows: '#{random($location)}vw #{random($location)}vh #fff';

        @for $i from 2 through $n {
            $shadows: '#{$shadows}, #{random($location)}vw #{random($location)}vh #fff';
        }

        @return unquote($shadows);
    }



    @for $i from 1 through 5 {
        .item#{$i} {
            $size: #{$i}px;
            $duration: floor($duration / 2);
            $count: floor($count / 2);
            position: fixed;
            width: $size;
            height: $size;
            border-radius: 50%;
            animation: moveup $duration linear infinite;
            left: 0;
            top: 0;
            box-shadow: getShadows($count);

            &::after {
                content: '';
                position: fixed;
                left: 0;
                top: 100vh;
                border-radius: inherit;
                width: inherit;
                height: inherit;
                box-shadow: inherit;
            }
        }
    }

    @keyframes moveup {
        to {
            transform: translateY(-100vh);
        }
    }
}

定义随机阴影生成函数 getShadows:

  • $location 变量设定为 100,用于生成随机位置。
  • getShadows 函数生成一组随机阴影,模拟星星效果。
  • 函数接受一个参数 $n,表示生成阴影的数量。
  • 使用 @for 循环生成多个随机阴影位置。

动画持续时间和阴影数量:

  • 定义动画的总持续时间$duration 为 200 秒, 逐层减少。
  • 定义生成阴影的总数量 $count 为 100, 逐层减少。

生成动画层:

  • 使用 @for 循环生成五个层,每个层都对应 .item1 .item5
  • 每个层的大小 ($size) 根据循环变量 $i 依次递增。
  • 每个层的动画持续时间和阴影数量分别为总值的一半。
  • 使用 box-shadow 属性调用getShadows函数生成随机阴影。
  • &::after 伪元素用于创建持续的动画效果,从顶部移到视口底部。

与使用Canvas相比,这种方法具有以下优点:

  1. 简单性:CSS动画和阴影效果易于实现和理解,无需编写复杂的JavaScript代码。
  2. 性能:对于简单的动画效果,CSS通常比Canvas具有更好的性能,尤其是在移动设备上。
  3. 响应性:CSS更容易与其他响应式设计元素集成,能够更好地适应不同屏幕尺寸。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值