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

相关推荐
Z兽兽1 小时前
行内块元素在垂直方向上对齐问题
css·html·css3
Wang's Blog1 小时前
Vibe Coding一人即团队系列58: HTML演示文稿自动生成
前端·人工智能·html
Tanjia_kiki2 小时前
谷歌浏览器中F12编辑并重发请求
开发语言·前端·javascript
honkun62 小时前
vue 表格组件 vxe-table 实现拖拽列字段自动生成透视表汇总
前端·javascript·vue.js
IMPYLH2 小时前
HTML 的 <p> 元素
前端·javascript·html
leoZ2312 小时前
第 4 篇:布局骨架——页面壳、栅格、卡片
前端·javascript·vue.js·opencv·计算机视觉·数据挖掘·语音识别
何以解忧,唯有..3 小时前
Vue 3 模板语法详解:从插值到指令的完整指南
前端·javascript·vue.js
小幸运2483 小时前
Vue.js 在博客平台中为何采用响应式系统而非直接操作
css
EasyGBS3 小时前
从接入到稳定播放:无插件直播H5视频流媒体播放器EasyPlayer.js如何撑起Web端流媒体
开发语言·前端·javascript