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主:山羊の前端小窝

相关推荐
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
爱敲代码的小鱼4 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
铅笔侠_小龙虾6 小时前
Flutter 实战: 计算器
开发语言·javascript·flutter
大模型玩家七七6 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
2501_944711436 小时前
JS 对象遍历全解析
开发语言·前端·javascript
发现一只大呆瓜7 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
阔皮大师7 小时前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙7 小时前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
_codemonster7 小时前
Vue的三种使用方式对比
前端·javascript·vue.js
全栈前端老曹8 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈