使用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 测试技术 API
评测最火的 11 款 REST API GUI
尽管 RESTful Web 服务具有可扩展性且易于维护,但是手动进行 API 测试操作复杂,因此我们需要选择一些好用的客户端来帮助我们测试 REST API。这里,码匠为大家罗列了 11 款最火的用于 REST API 测试的客户端工具。
5504 1
评测最火的 11 款 REST API  GUI
|
JSON 小程序 JavaScript
【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)
【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)
|
存储 JavaScript 前端开发
深入了解rollup(五)插件输出生成钩子
输出生成钩子可以提供有关生成的产物的信息并在构建完成后修改构建。它们的工作方式和类型与 构建钩子 相同,但是对于每个调用 bundle.generate(outputOptions) 或 bundle.write(outputOptions),它们都会单独调用。仅使用输出生成钩子的插件也可以通过输出选项传递,并且因此仅针对某些输出运行。
277 0
|
7月前
|
人工智能 数据可视化 测试技术
Apifox与Apipost对比,2025年功能对比与选项建议
Apifox 和 Apipost 作为国内 API 一体化协作平台的佼佼者,都在不断进化,力求为用户提供更全面的解决方案。本文将聚焦“2025 版”,基于两款工具截至 2024 年末至 2025 年中旬的预期功能和行业发展趋势,进行一次全方位、深度的功能对比,旨在为开发者、测试工程师、产品经理及技术决策者在选型时提供有价值的参考。
1921 123
Cesium 获取当前视图范围
Cesium作为一个开源的WebGlobe解决方案已经很牛了,不过因为开发的资料不多,很多功能不知道怎么实现。下面记录下自己获取Cesium当前场景范围的方法(2维中对应的是extent)。   extent其实对我们有用的也就是左上角和右下角坐标,于是首先应该想办法实现的是获取场景左上角和右下角的经纬度坐标。
1755 0
|
JavaScript 前端开发
判断对象是否含有改属性,三个方法
JavaScript中判断对象是否包含属性的三种方法:1. 使用`'property' in object`检查自有属性和继承属性;2. 使用`object.hasOwnProperty('property')`仅检查自有属性;3. 使用`if (object.property)`判断,但返回属性值。
188 2
判断对象是否含有改属性,三个方法
|
前端开发 API
vue3中Pinia的使用之actions
vue3中Pinia的使用之actions
|
前端开发 小程序
微信小程序系列——无缝引入CSS或者WXML文件
微信小程序系列——无缝引入CSS或者WXML文件
|
数据可视化
Echarts动态数据可视化学习(2)柱状图和折线图的动态数据更新
Echarts动态数据可视化学习(2)柱状图和折线图的动态数据更新
461 0