HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果:

代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D effect</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        background-color: black;
        color: aliceblue;
        min-height: 100vh;
        display: grid;
        place-items: center;
        perspective: 1000px;
      }
      body * {
        transform-style: preserve-3d;
      }
      .scene {
        position: relative;
        animation: scene 40s infinite linear;
      }
      @keyframes scene {
        from {
          transform: rotateX(45deg) rotateZ(0deg);
        }
        to {
          transform: rotateX(45deg) rotateZ(360deg);
        }
      }
      .grid {
        position: absolute;
        inset: -10em;
        display: grid;
        grid-template-columns: repeat(10, 1fr);
        gap: 1.5em;
      }
      .grid i {
        position: relative;
        width: 100%;
        height: 100%;
        animation: i 5s var(--delay, 0s) infinite linear;
      }
      @keyframes i {
        from {
          transform: rotate(0deg) rotateX(30deg);
        }
        to {
          transform: rotate(360deg) rotateX(30deg);
        }
      }
      .grid i::before,
      .grid i::after {
        content: "";
        position: absolute;
        top: -950%;
        width: 120%;
        height: 2000%;
        transform: rotateX(90deg);
        border-radius: 50%;
        background-image: linear-gradient(#000000, rgb(7, 192, 41));
      }
      .grid i::after {
        transform: rotateX(90deg) rotateY(90deg);
      }
    </style>
  </head>
  <body>
    <div class="scene">
      <div class="grid"></div>
    </div>
    <script>
      const gridElement = document.querySelector(".grid");
      let htmlCode = "";
      for (let i = 0; i < 100; i++) {
        let rowStarDelay = -0.2 * Math.floor(i / 10);
        let delay = rowStarDelay + -0.22 * (i % 10);
        htmlCode += `<i style="--delay:${delay}s;"></i>`;
      }
      gridElement.innerHTML = htmlCode;
    </script>
  </body>
</html>

>>来自B站学习视频

up主:山羊の前端小窝

相关推荐
lili-felicity26 分钟前
React Native for Harmony 个人消息列表最新消息置顶实现(多维度权重统计)
javascript·react native·react.js
Tigger32 分钟前
用 Vue 3 做了一套年会抽奖工具,顺便踩了些坑
前端·javascript·vue.js
OpenTiny社区1 小时前
OpenTiny 2025年度贡献者榜单正式公布~
前端·javascript·vue.js
biubiubiu07061 小时前
Vue脚手架创建项目记录
javascript·vue.js·ecmascript
boooooooom1 小时前
手写简易Vue响应式:基于Proxy + effect的核心实现
javascript·vue.js
bug总结2 小时前
uniapp+动态设置顶部导航栏使用详解
java·前端·javascript
晴殇i2 小时前
深入理解MessageChannel:JS双向通信的高效解决方案
前端·javascript·程序员
kkkAloha2 小时前
倒计时 | setInterval
前端·javascript·vue.js
VT.馒头2 小时前
【力扣】2622. 有时间限制的缓存
javascript·算法·leetcode·缓存·typescript
辰风沐阳2 小时前
JavaScript 的 WebSocket 使用指南
开发语言·javascript·websocket