HTML+CSS:3D轮播卡片

效果演示

实现了一个3D翻转的卡片动画,其中每个卡片都有不同的图片和不同的旋转角度。整个动画循环播放,无限次。整个页面的背景是一个占据整个屏幕的背景图片,并且页面内容被隐藏在背景图片之下。

Code

html 复制代码
<div class="container">
    <div class="card-box">
        <div class="card">
            <img src="./img/鞠婧祎04.jpg">
        </div>
        <div class="card">
            <img src="./img/章若楠01.jpg">
        </div>
        <div class="card">
            <img src="./img/鞠婧祎02.jpg">
        </div>
    </div>
</div>
css 复制代码
body {
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #e8e8e8;
    overflow: hidden;
}

* {
    margin: 0;
    padding: 0;
}

.container {
    width: 600px;
    height: 350px;
    margin-top: 60px;
    perspective: 1000px;
    position: relative;
}

.card-box {
    position: absolute;
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
    transform: rotateY(0) translateZ(-700px);
    animation: cardRotate 10s cubic-bezier(0.77, 0, 0.175, 1) infinite;
}

.card {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    -webkit-box-reflect: below 15px -webkit-linear-gradient(transparent 50%, rgba(255, 255, 255, 0.3));
}

.card img {
    width: 100%;
    height: 100%;
    border-radius: 10px;
}

.card:nth-child(1) {
    transform: rotateY(0) translateZ(700px);
}

.card:nth-child(2) {
    transform: rotateY(120deg) translateZ(700px);
}

.card:nth-child(3) {
    transform: rotateY(240deg) translateZ(700px);
}

@keyframes cardRotate {

    0%,
    20% {
        transform: translateZ(-700px) rotateY(0);
    }

    45% {
        transform: translateZ(-700px) rotateY(-120deg);
    }

    75% {
        transform: translateZ(-700px) rotateY(-240deg);
    }

    100% {
        transform: translateZ(-700px) rotateY(-360deg);
    }
}

实现思路拆分

css 复制代码
body {
  height: 100vh; /* 设置页面高度为视口高度 */
  display: flex; /* 使用弹性布局 */
  justify-content: center; /* 居中水平 */
  align-items: center; /* 居中垂直 */
  background-color: #e8e8e8; /* 设置背景颜色 */
  overflow: hidden; /* 隐藏溢出部分 */
}

这段代码设置了页面的基本样式,包括高度、居中、背景颜色和溢出部分的隐藏。

css 复制代码
* {
  margin: 0;
  padding: 0;
}

这段代码取消了所有的内外边距,使得页面更加整洁。

css 复制代码
.container {
  width: 600px; /* 设置容器宽度 */
  height: 350px; /* 设置容器高度 */
  margin-top: 60px; /* 设置容器与页面顶部的距离 */
  perspective: 1000px; /* 设置容器的透视效果 */
  position: relative; /* 设置容器为相对定位 */
}

这段代码设置了容器的基本样式,包括宽度、高度、与页面顶部的距离、透视效果和相对定位。

css 复制代码
.card-box {
  position: absolute;
  width: 100%;
  height: 100%;
  transform-style: preserve-3d;
  transform: rotateY(0) translateZ(-700px);
  animation: cardRotate 10s cubic-bezier(0.77, 0, 0.175, 1) infinite;
}

这段代码设置了卡片盒子的基本样式,包括绝对定位、宽度、高度、3D效果、动画效果和无限次播放。

css 复制代码
.card {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  -webkit-box-reflect: below 15px -webkit-linear-gradient(transparent 50%, rgba(255, 255, 255, 0.3));
}

这段代码设置了卡片的基本样式,包括绝对定位、宽度、高度、倒影效果。

css 复制代码
.card img {
  width: 100%;
  height: 100%;
  border-radius: 10px;
}

这段代码设置了卡片图片的基本样式,包括宽度、高度和圆角。

css 复制代码
.card:nth-child(1) {
  transform: rotateY(0) translateZ(700px);
}

.card:nth-child(2) {
  transform: rotateY(120deg) translateZ(700px);
}

.card:nth-child(3) {
  transform: rotateY(240deg) translateZ(700px);
}

这段代码设置了每张卡片的初始位置和旋转角度。

css 复制代码
@keyframes cardRotate {

  0%,
  20% {
    transform: translateZ(-700px) rotateY(0);
  }

  45% {
    transform: translateZ(-700px) rotateY(-120deg);
  }

  75% {
    transform: translateZ(-700px) rotateY(-240deg);
  }

  100% {
    transform: translateZ(-700px) rotateY(-360deg);
  }
}

这段代码定义了一个名为cardRotate的动画,包括四个关键帧,分别对应卡片的旋转角度和位置。

相关推荐
likuolei2 小时前
XSL-FO 软件
java·开发语言·前端·数据库
正一品程序员2 小时前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
e***95642 小时前
【HTML+CSS】使用HTML与后端技术连接数据库
css·数据库·html
j***89462 小时前
spring-boot-starter和spring-boot-starter-web的关联
前端
star_11122 小时前
Jenkins+nginx部署前端vue项目
前端·vue.js·jenkins
im_AMBER2 小时前
Canvas架构手记 05 鼠标事件监听 | 原生事件封装 | ctx 结构化对象
前端·笔记·学习·架构
JIngJaneIL2 小时前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·农产品电商系统
Tongfront2 小时前
前端通用submit方法
开发语言·前端·javascript·react
可爱又迷人的反派角色“yang”2 小时前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
han_2 小时前
前端高频面试题之CSS篇(二)
前端·css·面试