sass制作一个简单的星空背景

news2024/11/25 14:35:22

最近遇到一个有意思的东西,需要制作一个如下图的背景:
星空背景
如果使用js或者canvas应该是比较简单的,正好最近在使用sass,那么纯sass能否实现这种效果呢?来试一下

首先来生成这些点:

  <div class="content">
    <div class="div1"></div>
  </div>
<style lang="scss" scoped>
$size: 5px;


.content {
  height: 100vh;
  width: 100vw;
  background-color: #000;
  .div1 {
      height: $size;
      width: $size;
      border-radius: 50%;
  }
}

</style>

我们将宽度和高度作为变量抽取出来,方便最终效果的时候统一调整,但是现在只有一个点,其他的该怎么办,好在CSS里有个图形阴影box-shadow,它允许你对一个图形创造多个阴影,只需要用隔开即可,比如:

.div1{
    box-shadow: 0vh 0vw 0 #fff, 
    39vw 30vh 2px #fff, 
    58vw 35vh 2px #fff, 
    40vw 50vh 2px #fff
}

数量解决了,但是这么手写会累死个好人的,所幸sass里支持循环还有函数,我们创建一个函数来生成box-shadow对应的值:

<style lang="scss" scoped>
@function createShadow($n) {
  $shadow: 0vh 0vw 0 #fff;
  @for $_ from 0 through $n {
    $x: unquote("#{random(100)}vw");
    $y: unquote("#{random(100)}vh");
    $shadow: unquote("#{$shadow}, #{$x} #{$y} 2px #fff");
  }
  @return $shadow;
}
</style>

使用@function可以声明函数,这里需要接受一个参数,也就是我们需要生成的阴影数量。
内部声明$shadow变量,初始的阴影我不希望显示,所以宽高都设置为0。
然后使用@for来进行循环,在循环内部,每一次我们都生成一个随机的x和y坐标。randomheunquote是sass内置的函数,具体可以参考random和unquote,简单来说random可以生成一个0到参数之间的随机数,不指定的话默认0~1之间。sass里也可以使用类似js中的模板语法,但是注意是用#{}绑定变量。不适用unquote的话,生成的是类似“33vw”这种带双引号的形式,使用unquote就是去掉字符串的双引号。最后在里面反复拼接$shadow,使用@return返回最终的结果

我们再重新修改一下上面的代码

<style lang="scss" scoped>
$size: 5px;
@function createShadow($n) {
  $shadow: 0vh 0vw 0 #fff;
  @for $_ from 0 through $n {
    $x: unquote("#{random(100)}vw");
    $y: unquote("#{random(100)}vh");
    $shadow: unquote("#{$shadow}, #{$x} #{$y} 2px #fff");
  }
  @return $shadow;
}

.content {
  height: 100vh;
  width: 100vw;
  background-color: #000;
  .div1 {
      height: $size;
      width: $size;
      border-radius: 50%;
      // 使用函数生成大量的shadow
      box-shadow: createShadow(40);
      // 增加动画效果
      animation-name: shadowAnimation;
      animation-duration: 4s;
      animation-timing-function: ease-in-out;
      animation-iteration-count: infinite;
  }
}

@keyframes shadowAnimation {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
</style>

我们又实用了css里的动画做了一个关键帧,简单的做一下不透明度的切换。
但是现在阴影会同时消失和出现,效果十分生硬。既然通用的方法已经抽离,我们多做几个div的阴影,给不同的div增加一个动画的延时效果,就能缓解这种生硬的过渡。最终的完整代码如下:

<template>
  <div class="content">
    <div class="div1"></div>
    <div class="div2"></div>
    <div class="div3"></div>
    <div class="div4"></div>
  </div>
</template>

<style lang="scss" scoped>
$size: 5px;
@function createShadow($n) {
  $shadow: 0vh 0vw 0 #fff;
  @for $_ from 0 through $n {
    $x: unquote("#{random(100)}vw");
    $y: unquote("#{random(100)}vh");
    $shadow: unquote("#{$shadow}, #{$x} #{$y} 2px #fff");
  }
  @return $shadow;
}

@mixin shadow {
  height: $size;
  width: $size;
  border-radius: 50%;
  box-shadow: createShadow(40);
  animation-name: shadowAnimation;
  animation-duration: 4s;
  animation-timing-function: ease-in-out;
  animation-iteration-count: infinite;
}

.content {
  height: 100vh;
  width: 100vw;
  background-color: #000;
  .div1 {
    @include shadow;
    animation-delay: 0s;
  }
  .div2 {
    @include shadow;
    animation-delay: 1s;
  }
  .div3 {
    @include shadow;
    animation-delay: 2s;
  }
  .div4 {
    @include shadow;
    animation-delay: 3s;
  }
  
}
@keyframes shadowAnimation {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
</style>

我们做了四个div,并且每个div的大部分内容都差不多,只有延时需要调整,所以我们使用@mixin抽离通用部分,之后每个div里只需要使用@include引用即可,再分别给每个div设置延时,即可实现最终效果。

不知道这些sass里好用的技巧,你用过吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1162748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浴池探秘:水疗之旅的魅力与奇妙体验

浴室装饰的时候&#xff0c;选择合适的颜色和瓷砖是至关重要的。设计师推出了一系列的瓷砖&#xff0c;这些瓷砖有着独特的纹理和颜色&#xff0c;适合用于浴室的地板和墙壁。这个系列包括三种不同的面层&#xff1a;Terra&#xff08;大地&#xff09;、Lava&#xff08;熔岩&…

【兔子王赠书第5期】ChatGPT速学通:文案写作+PPT制作+数据分析+知识学习与变现

文章目录 前言ChatGPT推荐图书作者简介内容简介推荐理由 粉丝福利尾声 前言 程序员如果有一天代码写不动了&#xff0c;还能干什么&#xff1f; 一位 80 后女程序员“兰猫”给出了她的答案——转型 AI 写手。兰猫从事程序员工作十余年&#xff0c;在繁重的工作压力下&#xf…

[补题记录] Codeforces Round 906 (Div. 2)(A~D)

URL&#xff1a;https://codeforces.com/contest/1890 目录 A Problem/题意 Thought/思路 Code/代码 B Problem/题意 Thought/思路 Code/代码 C Problem/题意 Thought/思路 Code/代码 D Problem/题意 Thought/思路 Code/代码 A Problem/题意 给出一个数组 A…

【基带开发】AD9361 Accumulator 累加器的用法

IP 核 acc_2048 累加多少个数据&#xff0c;计算方法&#xff1a;23-1211&#xff0c;2^11 2048 IP 使用 acc_2048 ACC1 (.B(12d1 ), // input [11 : 0] b.CLK(ad9361_l_clk ), // input clk.CE(1b1 ), // input ce.BYPASS(clk_gens1…

雪花算法:分布式ID生成的优雅解决方案(建议收藏)

在分布式系统中&#xff0c;唯一ID的生成和管理是一项重要而棘手的任务。雪花算法&#xff0c;由Twitter开源的一种分布式ID生成算法&#xff0c;为这个问题提供了一种优雅的解决方案。本文将详细介绍雪花算法的原理、设计和实现&#xff0c;并通过示例代码和图片帮助读者更好地…

Asterisk Ubuntu 安装

更新环境 sudo apt update sudo apt install wget build-essential git autoconf subversion pkg-config libtool sudo contrib/scripts/get_mp3_source.sh A addons/mp3 A addons/mp3/common.c A addons/mp3/huffman.h A addons/mp3/tabinit.c A addons/mp3/Ma…

竞赛选题 深度学习大数据物流平台 python

文章目录 0 前言1 课题背景2 物流大数据平台的架构与设计3 智能车货匹配推荐算法的实现**1\. 问题陈述****2\. 算法模型**3\. 模型构建总览 **4 司机标签体系的搭建及算法****1\. 冷启动**2\. LSTM多标签模型算法 5 货运价格预测6 总结7 部分核心代码8 最后 0 前言 &#x1f5…

TSN工业交换机惊艳亮相第十九届安博会,光路科技展示TSN技术的实际应用

光路科技在第十九届中国国际社会公共安全博览会&#xff08;CPSE安博会&#xff09;上大放异彩&#xff0c;赢得了全球观众的广泛关注。作为展示先进技术和创新解决方案的杰出平台&#xff0c;光路科技无疑成为了此次博览会的焦点之一。 2023CPSE安博会光路科技TSN交换机惊艳亮…

新品发布:信驰达TI CC1352P7双频段多协议模块RF-TI1352P2,支持Matter over Thread

近日&#xff0c;领先的无线物联网通信模块厂商深圳市信驰达科技推出了基于TI CC1352P7 为核心的双频段&#xff08;Sub-1 GHz 和 2.4 GHz&#xff09;多协议无线模块RF-TI1352P2。 RF-TI1352P2模块除了集成负责应用逻辑的高性能 48 MHz ARM Cortex- M4F 主处理器与一个专用于…

AI:48-基于卷积神经网络的气象图像识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

gcc在线升级

提示&#xff1a;本文在线升级需要服务器连接网络 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技…

第5天:基础入门-资产架构amp;端口amp;应用amp;CDNamp;WAFamp;站库分离amp;负载均衡

第5天&#xff1a;基础入门-资产架构&端口&应用&CDN&WAF&站库分离&负载均衡 #知识点&#xff1a;1. 资产架构-端口&目录&插件接口&多站点&多应用 2. 番外安全-域名&服务器本身&服务厂商&管理人员 3. 考虑阻碍-站库分离&am…

【flink】Task 故障恢复详解以及各重启策略适用场景说明

文章目录 一. 重启策略种类&#xff08;Restart Strategies&#xff09;1. Fixed Delay Restart Strategy2. Failure Rate Restart Strategy3. Fallback Restart Strategy4. No Restart Strategy 二. 故障恢复策略&#xff08;Failover Strategies&#xff09;1. &#xff08;全…

Pycharm 关闭项目卡住

1、升级到最新版本 2、清理缓存 全部勾上 3、修改本地索引 设置找到下面这个&#xff0c;改为&#xff1a;不下载&#xff0c;使用本地索引 4、有人说是和插件有关 pycharm v2023.1.2&#xff0c;我是清理缓存加本地索引解决的&#xff0c;之前 Pycharm 弹了一个窗&#xff0…

佳能R6 m2没有样本文件时的设置方法

佳能R6 m2使用了新的DEC标识和小块长度&#xff0c;一般情况下建议使用加载样本的方式进行处理&#xff0c;如果没有样本也可以使用以下方法。 适用程序:CHS零壹视频恢复程序标准版/专业版/高级版/佳能版 解决问题: 底层原始文件会识别出错&#xff0c;导致很多个小碎片。 …

学习笔记三十三:准入控制

ResourceQuota准入控制器 ResourceQuota准入控制器限制cpu、内存、pod、deployment数量限制存储空间大小 LimitRanger准入控制器在limit名称空间创建pod&#xff0c;不指定资源&#xff0c;看看是否会被limitrange规则自动附加其资源限制创建pod&#xff0c;指定cpu请求是100m&…

『Linux升级路』基础开发工具——yum篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Linux下安装软件的方案 &#x1f4d2;1.1源代码安装 &#x1f4d2;1.2r…

【基于HTML5的网页设计及应用】——实现个人简历表格和伪类选择器应用

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

外汇天眼:MAS下令星展银行暂停六个月的非必要活动

新加坡金融管理局&#xff08;MAS&#xff09;已经决定对星展银行有限公司&#xff08;DBS Bank Ltd&#xff09;的非必要IT变更进行为期六个月的暂停&#xff0c;以确保银行集中精力恢复其数字银行服务的弹性。在此期间&#xff0c;星展银行将不被允许开展新的业务&#xff0c…

Nginx代理转发请求POST变GET请求问题

&#x1f680; 注重版权&#xff0c;转载请注明原作者和原文链接 &#x1f96d; 作者&#xff1a;Yuan-Programmer &#x1f34e; 个人博客&#xff1a;https://boke.open-yuan.com &#x1f349; 已经替换了新的域名&#xff0c;总站叫做&#xff1a;OpenYuan开袁网&#xff0…