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

最近遇到一个有意思的东西,需要制作一个如下图的背景:
星空背景
如果使用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.mzph.cn/news/127587.shtml

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

相关文章

“恒山光量子”首秀!玻色量子联合移动云发表物理1区Top期刊SCPMA论文

2023年5月&#xff0c;北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;联合移动云在我国知名科技期刊平台《中国科学&#xff1a;物理学 力学 天文学》英文版上发表了以“Optical experimental solution for the multiway number partitioning problem …

K8s集群

统一时间&#xff1a;ntpdate(都做) ntpdate -b ntp1.aliyun.com */1 * * * * /usr/sbin/ntpdate -b ntp1.aliyun.com systemctl status docker vi /etc/docker/daemon.json systemctl restart docker m: vim kubernetes.sh cat >> /etc/yum.repos.d/kubernetes.repo…

中国电子学会主办 第四届ATEC科技精英赛报名启动

11月1日由中国电子学会主办的第四届ATEC科技精英赛&#xff08;ATEC2023&#xff09;正式启动报名。 ATEC科技精英赛是主要面向中国籍计算机等专业在校学生、人工智能及网络安全行业研究者和从业者的一场高水平的智能科技挑战赛&#xff0c;意在贯彻落实党中央、国务院关于推动…

【OpenCV实现图像梯度,Canny边缘检测】

文章目录 概要图像梯度Canny边缘检测小结 概要 OpenCV中&#xff0c;可以使用各种函数实现图像梯度和Canny边缘检测&#xff0c;这些操作对于图像处理和分析非常重要。 图像梯度通常用于寻找图像中的边缘和轮廓。在OpenCV中&#xff0c;可以使用cv2.Sobel()函数计算图像的梯度…

期 货 跟 单/资 管 分 仓/镜像跟单/外 盘 分 仓的全面介绍!

期货跟单是经过科学的筛选找出合格的目标样本数据然后利用样本交易数据转化成未来实际账面利润的综合性过程。 期货跟单分为正向跟单和反向跟单&#xff0c;简单地说就是找出期高手正向跟随高手赚取收益或找出期货低手反向跟随赚取收益。 期货跟单软件是实现跟单过程自动化的工…

设计思想培养:装饰者模式下的RecyclerView添加头、尾

用一个设计模式培养高复用、低耦合思想 前言Android中的装饰者代码实现第一步&#xff1a;创建装饰器DecorateAdapter第二步&#xff1a;处理头部、中间内容、尾部的绑定关系第三步&#xff1a;装饰器的使用第四步&#xff1a;改进、直接封装一个View出来 总结 前言 一个高复用…

SpringCloud Gateway实现请求解密和响应加密

文章目录 前言正文一、项目简介二、核心代码2.1 自定义过滤器2.2 网关配置2.3 自定义配置类2.4 加密组件接口2.5 加密组件实现&#xff0c;AES算法2.6 启动类&#xff0c;校验支持的算法配置 三、请求报文示例四、测试结果4.1 网关项目启动时4.2 发生请求时 前言 本文环境使用比…

UI动效的都可以用哪些工作来制作

随着UI设计的不断发展&#xff0c;UI动效越来越多地应用于现实生活中。手机&#xff0c;iPad、计算机、网页和其他设备被广泛使用&#xff0c;所以问题来了&#xff0c;为什么UI动态效果越来越被广泛使用&#xff1f;它的优点是什么&#xff1f;哪些软件可以设计UI动态效果&…

车载测试相比软件测试,前景会稍好一点吗?

> 如果个人是汽车、电气、工业工程相关专业的学历背景&#xff0c;那可以考虑从事车载测试&#xff08;看上图&#xff09;。> 如果不是以上专业&#xff0c;那就要慎重啦。 车载测试是测试行业的一个分支&#xff0c;最近十年一直存在&#xff0c;并不是这一两年才有的…

python 数据挖掘库orange3 介绍

orange3 是一个非常适合初学者的data mining library. 它让使用者通过拖拽内置的组件来形成工作流。让你不需要写任何代码就可以体验到数据挖掘和可视化的魅力。 它的桌面如下&#xff0c;这里我创建了 3 个节点&#xff0c;分别是数据集、小提琴图&#xff0c;散点图 其中 …

UE5——网络——RPC

RPC&#xff08;这个是官方文档的资料&#xff09; 要将一个函数声明为 RPC&#xff0c;您只需将 Server、Client 或 NetMulticast 关键字添加到 UFUNCTION 声明。 例如&#xff0c;若要将某个函数声明为一个要在服务器上调用、但需要在客户端上执行的 RPC&#xff0c;您可以…

【Linux】配置JDKTomcat开发环境及MySQL安装和后端项目部署

目录 一. JDK及tomcat安装 二&#xff0c;安装Tomcat 三&#xff0c;MySQL安装 四、后端部署 前言&#xff1a; 今天我们就来在Linux上安装JDK及tomcat&#xff0c;MySQL&#xff0c;希望你可以通过这一博客&#xff0c;找到你的答案&#xff01;&#xff01;&#xff01; …

2023-macOS下安装anaconda,终端自动会出现(base)字样,如何取消

2023-macOS下安装anaconda&#xff0c;终端自动会出现(base)字样&#xff0c;如何取消 安装后&#xff0c;我们再打开终端&#xff0c;就会自动出现了&#xff08;base&#xff09; 就会出现这样子的&#xff0c;让人头大&#xff0c; 所以我们要解决它 具体原因是 安装了anac…

从JDBD的封装方面重新认识Mybaits

前言&#xff1a;SQLSession是对JDBC的封装 MyBatis 是一个 Java 持久化框架&#xff0c;它通过对 JDBC 的封装来简化数据库访问操作。核心的 SQLSession 对象是 MyBatis 的核心组件之一&#xff0c;负责管理数据库连接、执行 SQL 语句以及映射查询结果等功能。 具体来说&…

Windows11恢复组策略编辑器功能的方法

原因分析 日常工作学习中,对 Windows 计算机上的问题进行故障排除时,有些高级用户经常使用组策略编辑器轻松修复它。通过其分层结构,您可以快速调整应用于用户或计算机的设置。如果搜索结果中缺少组策略编辑器,则可能必须使用注册表编辑器作为疑难解答工具,这是一种更复杂…

力扣:147. 对链表进行插入排序(Python3)

题目&#xff1a; 给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。每次迭代中&#xff0c…

0基础学习PyFlink——时间滑动窗口(Sliding Time Windows)

在《0基础学习PyFlink——时间滚动窗口(Tumbling Time Windows)》我们介绍了不会有重复数据的时间滚动窗口。本节我们将介绍存在重复计算数据的时间滑动窗口。 关于滑动窗口&#xff0c;可以先看下《0基础学习PyFlink——个数滑动窗口&#xff08;Sliding Count Windows&#x…

韩国ORANGE橘子室内高尔夫—万万没想到除了打球还能唱歌、看电影

韩国ORANGE橘子室内高尔夫—万万没想到除了打球还能唱歌、看电影&#xff01; 你知道吗&#xff1f;室内高尔夫除了打球&#xff0c;还可以唱歌 看电影&#xff01; 在这个让人兴奋的室内高尔夫场地&#xff0c;你将体验到全新的娱乐方式。快来和小伙伴们一起挥杆&#xff0c;…

springboot医院绩效考核系统源码

医院绩效考核系统是一种以人力资源管理为基础&#xff0c;选用适合医院组织机构属性的绩效理论和方法&#xff0c;基于医院战略目标&#xff0c;构建全方位的绩效考评体系&#xff0c;在科学、合理的绩效管理体系基础上&#xff0c;采用科学管理的方法&#xff0c;如平衡计分卡…