效果演示
这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果,每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画,实现了一个动态的旋转展示效果
HTML
<divclass="wrapper"><divclass="inner"style="--quantity: 10;"><divclass="card"style="--index: 0;--color-card: 142, 249, 252;"><divclass="img"><imgsrc="../../static/3.jpg"alt=""></div></div><divclass="card"style="--index: 1;--color-card: 142, 252, 204;"><divclass="img"><imgsrc="../../static/4.jpg"alt=""></div></div><divclass="card"style="--index: 2;--color-card: 142, 252, 157;"><divclass="img"><imgsrc="../../static/5.jpg"alt=""></div></div><divclass="card"style="--index: 3;--color-card: 215, 252, 142;"><divclass="img"><imgsrc="../../static/3.jpg"alt=""></div></div><divclass="card"style="--index: 4;--color-card: 252, 252, 142;"><divclass="img"><imgsrc="../../static/4.jpg"alt=""></div></div><divclass="card"style="--index: 5;--color-card: 252, 208, 142;"><divclass="img"><imgsrc="../../static/5.jpg"alt=""></div></div><divclass="card"style="--index: 6;--color-card: 252, 142, 142;"><divclass="img"><imgsrc="../../static/4.jpg"alt=""></div></div><divclass="card"style="--index: 7;--color-card: 252, 142, 239;"><divclass="img"><imgsrc="../../static/5.jpg"alt=""></div></div><divclass="card"style="--index: 8;--color-card: 204, 142, 252;"><divclass="img"><imgsrc="../../static/3.jpg"alt=""></div></div><divclass="card"style="--index: 9;--color-card: 142, 202, 252;"><divclass="img"><imgsrc="../../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:设置图片的宽高以填满容器。
本文转载自: https://blog.csdn.net/weixin_52814911/article/details/143701049
版权归原作者 前端Hardy 所有, 如有侵权,请联系我们删除。
版权归原作者 前端Hardy 所有, 如有侵权,请联系我们删除。