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

相关推荐
剑亦未配妥34 分钟前
移动端触摸事件与鼠标事件的触发机制详解
前端·javascript
yddddddy8 小时前
css的基本知识
前端·css
昔人'8 小时前
css `lh`单位
前端·css
前端君8 小时前
实现最大异步并发执行队列
javascript
破无差8 小时前
《赛事报名系统小程序》
小程序·html·uniapp
知识分享小能手9 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
2501_9181269110 小时前
用html5写一个flappybird游戏
css·游戏·html5
蚂蚁RichLab前端团队10 小时前
🚀🚀🚀 RichLab - 花呗前端团队招贤纳士 - 【转岗/内推/社招】
前端·javascript·人工智能
孩子 你要相信光11 小时前
css之一个元素可以同时应用多个动画效果
前端·css
萌萌哒草头将军11 小时前
Oxc 和 Rolldown Q4 更新计划速览!🚀🚀🚀
javascript·vue.js·vite