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

news/2024/10/20 0:37:21/

最近遇到一个有意思的东西,需要制作一个如下图的背景:
星空背景
如果使用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%;// 使用函数生成大量的shadowbox-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.ppmy.cn/news/1192192.html

相关文章

排水车发动机拆装vr虚拟训练仿真系统提高学员技能水平

VR吸污车操作实训系统是一种利用vr虚拟现实技术模拟吸污车操作环境的培训工具&#xff0c;受训员工通过佩戴VR头显设备&#xff0c;进入一个虚拟的环境&#xff0c;模拟实际的吸污车工作场景并且模拟交互操作。不仅可以避免真实环境中的安全风险&#xff0c;还可以更加灵活地进…

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

看了不少解读和笔记&#xff0c;本文把最容易理解的解读做个总结。 1. 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method)&#xff0c;是一种“统计模拟方法”。20世纪40年代&#xff0c;为建造核武器&#xff0c;冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名&#xff0c…

[ 云计算 | AWS 实践 ] 使用 Java 列出存储桶中的所有 AWS S3 对象

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …

Spring - 手写模拟Spring底层原理

手写Spring 定义配置类AppConfig ComponentScan("com.spring.zsj") public class AppConfig {Beanpublic ApplicationListener applicationListener() {return new ApplicationListener() {Overridepublic void onApplicationEvent(ApplicationEvent event) {System…

【flink】flink获取-D参数方式

参考官网 一、idea 本地运行 使用Flink官方的ParameterTool或者其他工具都可以。 二、集群运行flink run/run-application &#xff08;1&#xff09;ParameterTool 获取参数 以-D开头的参数&#xff1a; ParameterTool parameter ParameterTool.fromSystemProperties()…

大厂信息泄露-漏洞复现

目录 大唐电信AC简介 资产收集 漏洞复现 修复建议 免费领取安全学习资料包&#xff01;&#xff08;私聊进群一起学习&#xff0c;共同进步&#xff09;​编辑 大唐电信AC简介 大唐电信科技股份有限公司是电信科学技术研究院&#xff08;大唐电信科技产业集团&#xff09…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境&#xff1a; 昆腾存储&#xff0c;MAC OS操作系统&#xff0c;存放视频类数据&#xff08;MXF、MOV等格式文件&#xff09;。 XSAN故障&检测&#xff1a; 将存储空间从XSAN架构迁移到STORNEXT架构后&#xff0c;存储空间中数据全部丢失。 故障存储中一共…

MATLAB野外观测站生态气象数据处理分析实践应用

1.基于MATLAB语言 2.以实践案例为主&#xff0c;提供所有代码 3.原理与操作结合 4.布置作业&#xff0c;答疑与拓展 示意图&#xff1a; 以野外观测站高频时序生态气象数据为例&#xff0c;基于MATLAB开展上机操作&#xff1a; 1.不同生态气象要素文件的数据读写与批处理实现 …