当前位置: 首页 > article >正文

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示

这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果,每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画,实现了一个动态的旋转展示效果
在这里插入图片描述

HTML

<div class="wrapper">
  <div class="inner" style="--quantity: 10;">
    <div class="card" style="--index: 0;--color-card: 142, 249, 252;">
      <div class="img">
        <img src="../../static/3.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 1;--color-card: 142, 252, 204;">
      <div class="img">
        <img src="../../static/4.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 2;--color-card: 142, 252, 157;">
      <div class="img">
        <img src="../../static/5.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 3;--color-card: 215, 252, 142;">
      <div class="img">
        <img src="../../static/3.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 4;--color-card: 252, 252, 142;">
      <div class="img">
        <img src="../../static/4.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 5;--color-card: 252, 208, 142;">
      <div class="img">
        <img src="../../static/5.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 6;--color-card: 252, 142, 142;">
      <div class="img">
        <img src="../../static/4.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 7;--color-card: 252, 142, 239;">
      <div class="img">
        <img src="../../static/5.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 8;--color-card: 204, 142, 252;">
      <div class="img">
        <img src="../../static/3.jpg" alt="">
      </div>
    </div>
    <div class="card" style="--index: 9;--color-card: 142, 202, 252;">
      <div class="img">
        <img src="../../static/4.jpg" alt="">
      </div>
    </div>
  </div>
</div>
  • .wrapper:最外层的容器,用于包裹整个3D效果。
  • .inner:内部容器,用于包裹所有的卡片,并且设置了–quantity自定义属性,这个值表示卡片的总数,用于计算每个卡片的旋转角度。
  • .card:单个卡片的容器,每个卡片都有一个–index属性,表示卡片的索引,用于计算旋转角度,以及–color-card属性,表示卡片的边框颜色。
  • .img:图片容器,用于包裹img标签。
  • img:图片元素,用于显示卡片上的图片。

CSS

.wrapper {
  width: 100%;
  height: 100%;
  position: relative;
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.inner {
  --w: 150px;
  --h: 200px;
  --translateZ: calc((var(--w) + var(--h)) + 0px);
  --rotateX: -15deg;
  --perspective: 1000px;
  position: absolute;
  width: var(--w);
  height: var(--h);
  top: 25%;
  left: calc(50% - (var(--w) / 2) - 2.5px);
  z-index: 2;
  transform-style: preserve-3d;
  transform: perspective(var(--perspective));
  animation: rotating 20s linear infinite;
}

@keyframes rotating {
  from {
    transform: perspective(var(--perspective)) rotateX(var(--rotateX)) rotateY(0);
  }

  to {
    transform: perspective(var(--perspective)) rotateX(var(--rotateX)) rotateY(1turn);
  }
}
.card {
  position: absolute;
  border: 2px solid rgba(var(--color-card));
  border-radius: 12px;
  overflow: hidden;
  inset: 0;
  transform: rotateY(calc((360deg / var(--quantity)) * var(--index))) translateZ(var(--translateZ));
}
.img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #0000 radial-gradient(circle,
      rgba(var(--color-card), 0.2) 0%,
      rgba(var(--color-card), 0.6) 80%,
      rgba(var(--color-card), 0.9) 100%);
}
.img img {
  width: 100%;
  height: 100%;
}
  • .wrapper:设置为相对定位,并且使其充满整个视口(viewport),居中显示内容,并且隐藏溢出的内容。
  • .inner:设置为绝对定位,并且定义了一些自定义属性,用于计算卡片的宽度、高度、Z轴的平移距离、X轴的旋转角度和透视效果。它还设置了transform-style为preserve-3d,这是实现3D效果的关键属性。此外,它还定义了一个无限循环的rotating动画。
  • @keyframes rotating:定义了一个名为rotating的关键帧动画,使.inner容器围绕Y轴旋转。
  • .card:设置为绝对定位,并且使用rotateY和translateZ变换来实现卡片的3D旋转效果。每个卡片的旋转角度由–index和–quantity属性计算得出。
  • .img:设置图片容器的宽高、对象适应模式和背景渐变效果。
  • .img img:设置图片的宽高以填满容器。

http://www.kler.cn/a/394882.html

相关文章:

  • 浅谈“通感一体”
  • 现代无线通信接收机架构:超外差、零中频与低中频的比较分析
  • 在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量
  • 工作和学习遇到的技术问题
  • 【AutoGen 】简介
  • 深入探索离散 Hopfield 神经网络
  • SQL面试题——蚂蚁SQL面试题 连续3天减少碳排放量不低于100的用户
  • c++写一个死锁并且自己解锁
  • 前端搭建低代码平台,微前端如何选型?
  • Android开发|关于LiveData、ViewModel、DataBinding理解和使用
  • UI架构解说
  • 智能量化交易的多样化策略与风险控制:中阳模型的应用与发展
  • 项目中用户数据获取遇到bug
  • 计算机课程管理:Spring Boot与工程认证的协同创新
  • Docker部署青龙面板,实现京东自动签到刷京东,提供脚本
  • 如何利用静态住宅IP提升TikTok营销效果:应对平台限制与账号安全的新利器
  • 理解HTTP中的Cookie与Session:机制、安全性与报头响应
  • 华为路由策略配置
  • SSL 证书申请以及配置流程
  • MySQL中,使用XtraBackup进行备份锁
  • Matlab2022b安装MinGW64
  • Windows仿macOS?看这一篇就够了
  • go语言 分布式一致
  • 知识库管理系统:企业数字化转型的加速器
  • 大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载
  • Kubernetes 上部署 ZenTao(禅道)