使用CSS来制作下雨的效果

简介: 使用CSS来制作下雨的效果

首先我们来制作HTML部分


我们第一步呢还是先定义变量,loader,然后我们在下面在定义一个snow代表雪花,下面定义各自的变量,让20片雪花随机下滑


<div class="loader">
      <div class="snow">
        <span style="--i:11"></span>
        <span style="--i:12"></span>
        <span style="--i:15"></span>
        <span style="--i:17"></span>
        <span style="--i:18"></span>
        <span style="--i:13"></span>
        <span style="--i:14"></span>
        <span style="--i:19"></span>
        <span style="--i:20"></span>
        <span style="--i:10"></span>
        ......
      </div>
    </div>


css部分


这里使用了伪类选择器


第一是做我们云朵的形状:我们先得设置相对定位,这样雪花才能来到我们下面


然后我们使用圆角边框,第二步我们来写伪元素,用伪元素画两个圆通过位置改变来组成云朵


第三个使用伪元素来设置雪花和雪花的动画效果


body{
          display: flex;
          align-items: center;
          justify-content: center;
          background-color: black;
          transform: translateY(100px);
        }
      .loader{
        position: relative;
        width: 110px;
        height: 30px;
        background-color: #fff;
        border-radius: 100px;
      }
      .loader::before{
        content: '';
        position: absolute;
        width: 30px;
        height: 30px;
        background: #fff;
        border-radius: 50%;
        box-shadow: 40px 0 0 20px #fff;
        left: 10px;
        top: -20px;
      }
      .snow{
        position: relative;
        display: flex;
        z-index: 1;
      }
      .snow span{
        position: relative;
        width: 3px;
        height: 3px;
        background-color: #fff;
        margin: 0 2px;
        border-radius: 50%;
        animation: snowing 5s linear infinite;
        animation-duration: calc(15s / var(--i));
      }
      @keyframes snowing{
        from{
          transform: translateY(0px);
        }
        70%{
          transform: translateY(100px)
          scale(1);
        }
        to{
          transform: translateY(100px)
          scale:(0);
        }
      }


接下来展示源码!


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
        body{
          display: flex;
          align-items: center;
          justify-content: center;
          background-color: black;
          transform: translateY(100px);
        }
      .loader{
        position: relative;
        width: 110px;
        height: 30px;
        background-color: #fff;
        border-radius: 100px;
      }
      .loader::before{
        content: '';
        position: absolute;
        width: 30px;
        height: 30px;
        background: #fff;
        border-radius: 50%;
        box-shadow: 40px 0 0 20px #fff;
        left: 10px;
        top: -20px;
      }
      .snow{
        position: relative;
        display: flex;
        z-index: 1;
      }
      .snow span{
        position: relative;
        width: 3px;
        height: 3px;
        background-color: #fff;
        margin: 0 2px;
        border-radius: 50%;
        animation: snowing 5s linear infinite;
        animation-duration: calc(15s / var(--i));
      }
      @keyframes snowing{
        from{
          transform: translateY(0px);
        }
        70%{
          transform: translateY(100px)
          scale(1);
        }
        to{
          transform: translateY(100px)
          scale:(0);
        }
      }
    </style>
  </head>
  <body>
    <div class="loader">
      <div class="snow">
        <span style="--i:11"></span>
        <span style="--i:12"></span>
        <span style="--i:15"></span>
        <span style="--i:17"></span>
        <span style="--i:18"></span>
        <span style="--i:13"></span>
        <span style="--i:14"></span>
        <span style="--i:19"></span>
        <span style="--i:20"></span>
        <span style="--i:10"></span>
        ......
      </div>
    </div>
  </body>
</html>
相关文章
|
JSON 小程序 JavaScript
【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)
【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)
Cesium 获取当前视图范围
Cesium作为一个开源的WebGlobe解决方案已经很牛了,不过因为开发的资料不多,很多功能不知道怎么实现。下面记录下自己获取Cesium当前场景范围的方法(2维中对应的是extent)。   extent其实对我们有用的也就是左上角和右下角坐标,于是首先应该想办法实现的是获取场景左上角和右下角的经纬度坐标。
1706 0
|
3月前
|
Web App开发 前端开发 JavaScript
CSS :has() 选择器:改变游戏规则的父选择器
CSS :has() 选择器:改变游戏规则的父选择器
589 95
|
JavaScript 前端开发
判断对象是否含有改属性,三个方法
JavaScript中判断对象是否包含属性的三种方法:1. 使用`'property' in object`检查自有属性和继承属性;2. 使用`object.hasOwnProperty('property')`仅检查自有属性;3. 使用`if (object.property)`判断,但返回属性值。
154 2
判断对象是否含有改属性,三个方法
|
12月前
Cesium绘制透明光圈
这篇文章介绍了如何在Cesium中绘制具有透明度的圆形光圈,并提供了实现这一功能的具体代码和步骤。
573 3
Cesium绘制透明光圈
|
前端开发 API
vue3中Pinia的使用之actions
vue3中Pinia的使用之actions
|
前端开发 小程序
微信小程序系列——无缝引入CSS或者WXML文件
微信小程序系列——无缝引入CSS或者WXML文件
|
JavaScript 前端开发 Shell
实现在vue中自定义主题色彩切换
实现在vue中自定义主题色彩切换
216 0
|
数据可视化
Echarts动态数据可视化学习(2)柱状图和折线图的动态数据更新
Echarts动态数据可视化学习(2)柱状图和折线图的动态数据更新
390 0
|
小程序 JavaScript 前端开发
微信小程序更新操作失效解决和微信小程序引入echarts
该文介绍了微信小程序的两个问题及解决方案:1)当更新云开发数据库操作无效(返回更新0条数据)时,需检查并修改数据表的权限设置,确保`read`和`write`均为`true`。2)如何引入Echarts:从[GitHub](https://github.com/ecomfe/echarts-for-weixin)下载微信版Echarts,然后在小程序中引入组件,配置`app.json`,并在页面JS中导入并使用Echarts,提供示例代码展示柱状图、折线图和饼图的实现。
379 1