Sass 星空(Sass + keyframes 实现星空动画)

Sass 星空(Sass + keyframes 实现星空动画)

  • [1. 准备](#1. 准备)
  • [2. 代码](#2. 代码)
  • [3. 扩展(颜色渐变)](#3. 扩展(颜色渐变))

Sass 星空

1. 准备

如上图所示,我们将用sass来实现一个星空运动的效果。

为了实现方便,我这里直接使用 vue3 + sass 的方式实现。

当然,你不用 vue3 或者其他框架,或者直接使用 sass 都无所谓,这不是重点。重点是使用 sass 实现动画效果。

(1)创建vue3项目:

shell 复制代码
pnpm create vue@latest

按照需求输入项目名称(比如 sass-star)和选择需要下载的包。

(2)下载依赖:

shell 复制代码
cd sass-star
pnpm i

(3)下载 sass 相关依赖

shell 复制代码
pnpm i sass sass-loader

(4)运行项目

shell 复制代码
pnpm dev

(5)修改全局样式 src/assets/main.css:

css 复制代码
* {
  margin: 0;
  padding: 0;
}
#app{
  width: 100vw;
  height: 100vh;
}

2. 代码

App.vue:

javascript 复制代码
<template>
  <div class="sky">
    <div class="layer1"></div>
    <div class="layer2"></div>
    <div class="layer3"></div>
    <div class="layer4"></div>
    <div class="layer5"></div>
    <div class="title">Sass 星空</div>
  </div>
</template>

<script setup lang="ts">

</script>

<style lang="scss" scoped>
.sky {
  width: 100%;
  height: 100%;
  background-color: black;
}

.title {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  font-size: 40px;
  letter-spacing: 10px;
  font-size: 40px;
  font-weight: bold;
  // 渐变文字效果
  background: linear-gradient(#fff, #000);
  /* 关键属性:背景裁剪为文字 */
  background-clip: text;
  -webkit-background-clip: text;
  /* 文字颜色透明以显示渐变背景 */
  color: transparent;
  /* 兼容性处理 */
  -webkit-text-fill-color: transparent;
  display: inline-block;
  
}

// 生成随机位置阴影效果(其实就是某一个layer的指定数目但位置随机的分身)
@function getShadows($n) {
  $shadows: '#{random(100)}vw #{random(100)}vh #fff';

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

  @return unquote($shadows);
}


$duration: 400s;
$count: 1000;

@for $i from 1 through 5 {
  // 每一层动画时长减半,星星数目减半
  $duration: $duration / 2;
  $count: floor($count / 2);

  .layer#{$i} {
    $size: #{$i}px;
    position: fixed;
    width: $size;
    height: $size;
    border-radius: 50%;
    left: 0;
    top: 0;
    background: #f40;
    box-shadow: getShadows($count);
    animation: moveUp $duration infinite linear;

    // 设置伪元素,形成两个屏幕高度的动画效果,从而实现无缝衔接
    &::after {
      content: '';
      position: fixed;
      left: 0;
      top: 100vh;
      border-radius: inherit;
      width: inherit;
      height: inherit;
      box-shadow: inherit;
    }
  }
}

// 动画效果
@keyframes moveUp {
  to {
    transform: translateY(-100vh);
  }
}
</style>

3. 扩展(颜色渐变)

(1)中心向外放射性渐变:

css 复制代码
background: radial-gradient(#fff, #000);

(2)使用多个颜色

css 复制代码
background: linear-gradient(to right,#e66465, #9198e5, #3baffe);

(3)修改渐变方向

css 复制代码
background: linear-gradient(to right,#e66465, #9198e5, #3baffe);

我感觉这个效果不错

相关推荐
我命由我123451 分钟前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
key_3_feng16 分钟前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
LaughingZhu1 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
Lank_M1 小时前
抠图结果缩放后边缘发脏,该怪的不是插值
前端
jerrywus1 小时前
Skill、MCP、Workflow、Rules、Memory 有什么区别?拿几次真实开发任务讲清楚
前端·agent·claude
补码缩写1 小时前
canvas 与 sharp 缩放透明图:默认预乘,非预乘得拆通道
前端
静默回滚1 小时前
抠图 PNG 缩小再放大,边缘又糊又白是两件事
前端
用户11977079480731 小时前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
deli0071 小时前
地图定位为什么偏了 500 米?GPS 与火星坐标实测
前端
TK泰妞1 小时前
节日促销前,TikTok 商品视频应该提前准备什么?
前端·人工智能·节日