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

效果演示

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

HTML

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

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:设置图片的宽高以填满容器。
相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ew452182 小时前
ElementUI表格表头自定义添加checkbox,点击选中样式不生效
前端·javascript·elementui
suibian52352 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
Moon.92 小时前
el-table的hasChildren不生效?子级没数据还显示箭头号?树形数据无法展开和收缩
前端·vue.js·html
垚垚 Securify 前沿站2 小时前
深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
运维·前端·网络·安全·web安全·系统安全
工业甲酰苯胺5 小时前
Vue3 基础概念与环境搭建
前端·javascript·vue.js
mosquito_lover17 小时前
怎么把pyqt界面做的像web一样漂亮
前端·python·pyqt
工业3D_大熊7 小时前
HOOPS Web Platform:3D模型轻量化与可视化的高效解决方案
3d·3d web轻量化·3d建模·3d模型轻量化·3d数据格式转换·工业3d·几何建模
柴柴的小记9 小时前
前端vue引入特殊字体不生效
前端·javascript·vue.js
柠檬豆腐脑9 小时前
从前端到全栈:新闻管理系统及多个应用端展示
前端·全栈