【日常记录】【CSS】生成动态气泡小球

文章目录

1、分析

在这里插入图片描述

核心有两点,通过这两个不一样就可以实现每个小球的颜色动画时间不一致

  1. 给每个元素都设置一个css 变量 bgc 用于控制每一个小球的颜色
  2. 给每个元素都设置一个css 变量 duration 用于控制每一个小球的时间

2、实现

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    body {
      background-color: darkslategrey;
    }

    .main {
      display: flex;
      overflow: hidden;
      height: 100vh;
      width: 100vw;
      justify-content: center;
      align-items: flex-end;
    }

    span {
      width: 15px;
      height: 15px;
      background-color: var(--bgc);
      border-radius: 50%;
      margin: 0 4px;
      animation: move var(--duration) linear infinite;
      box-shadow:
        2.8px 2.8px 2.2px rgba(0, 0, 0, 0.02),
        6.7px 6.7px 5.3px rgba(0, 0, 0, 0.028),
        12.5px 12.5px 10px rgba(0, 0, 0, 0.035),
        22.3px 22.3px 17.9px rgba(0, 0, 0, 0.042),
        41.8px 41.8px 33.4px rgba(0, 0, 0, 0.05),
        100px 100px 80px rgba(0, 0, 0, 0.07);
    }

    @keyframes move {
      0% {
        transform: translateY(10vh) scale(0);
      }

      100% {
        transform: translateY(-100vh) scale(1);
      }
    }
  </style>
</head>

<body>
  <div class="main">

  </div>
  <script>
    function generateRandomHexColor() {
      // 生成随机的 R、G、B 分量
      var red = Math.floor(Math.random() * 256);
      var green = Math.floor(Math.random() * 256);
      var blue = Math.floor(Math.random() * 256);

      // 将 R、G、B 分量转换为十六进制字符串
      var redHex = red.toString(16).padStart(2, '0');
      var greenHex = green.toString(16).padStart(2, '0');
      var blueHex = blue.toString(16).padStart(2, '0');

      // 拼接成十六进制颜色字符串
      var hexColor = '#' + redHex + greenHex + blueHex;

      return hexColor;
    }
    let mainEl = document.querySelector('.main')
    let fragment = document.createDocumentFragment()
    new Array(80).fill(0).forEach(f => {
      let spanEl = document.createElement('span')
      spanEl.style.setProperty('--bgc', generateRandomHexColor())
      spanEl.style.setProperty('--duration', Math.random() * 5 + 3 + 's')
      fragment.append(spanEl)
    })
    mainEl.append(fragment)

  </script>
</body>

</html>

相关推荐

  1. Css实现边界碰撞回弹

    2024-04-13 13:28:06       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 13:28:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 13:28:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 13:28:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 13:28:06       20 阅读

热门阅读

  1. FineBI概述

    2024-04-13 13:28:06       17 阅读
  2. 前端学习(第三天)

    2024-04-13 13:28:06       53 阅读
  3. 确认网卡绑定的模式

    2024-04-13 13:28:06       20 阅读
  4. C++作业

    2024-04-13 13:28:06       16 阅读
  5. Python学习笔记(一)

    2024-04-13 13:28:06       16 阅读
  6. 蓝牙HC-05开发

    2024-04-13 13:28:06       13 阅读
  7. pytorch中torch.meshgrid()函数理解及举例说明

    2024-04-13 13:28:06       14 阅读
  8. URI和URL的区别?

    2024-04-13 13:28:06       12 阅读