使用CSS制作3D旋转相册核心是利用CSS 3D变换能力,配合perspective属性控制景深,让平面元素呈现出立体的旋转效果。整个实现过程需要搭建3D场景容器、配置相册单页元素、添加旋转动画三个主要部分。

一、3D旋转相册的核心原理
CSS 3D变换需要在父容器上开启3D渲染环境,其中perspective属性用来定义观察者与z=0平面的距离,也就是景深。景深数值越小,3D元素的透视效果越强烈,数值越大,透视效果越平缓,当数值为none时,元素不会有3D透视感。
除了perspective,还需要在3D容器上设置transform-style: preserve-3d,确保子元素保留3D变换状态,不会被压扁到2D平面。
二、基础HTML结构搭建
首先构建相册的容器和单页结构,每个单页对应相册的一张图片,整体放在3D场景容器中:
<div class="album-scene">
<div class="album-container">
<div class="album-page">页面1</div>
<div class="album-page">页面2</div>
<div class="album-page">页面3</div>
<div class="album-page">页面4</div>
<div class="album-page">页面5</div>
<div class="album-page">页面6</div>
</div>
</div>
三、CSS样式配置
1. 3D场景容器样式
场景容器需要设置perspective属性开启景深,同时定义容器的大小和居中显示:
.album-scene {
width: 300px;
height: 200px;
margin: 100px auto;
/* 设置景深为800px,观察距离适中 */
perspective: 800px;
}
2. 相册容器样式
相册容器需要开启3D变换保留,同时设置transform-style为preserve-3d,并且添加无限旋转动画:
.album-container {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
/* 添加旋转动画,10秒旋转一圈,无限循环 */
animation: rotateAlbum 10s linear infinite;
}
/* 定义旋转动画 */
@keyframes rotateAlbum {
from {
transform: rotateY(0deg);
}
to {
transform: rotateY(360deg);
}
}
3. 相册单页样式
每个相册单页需要设置绝对定位,并且围绕Y轴均匀分布,形成环形排列的效果。假设有6个单页,每个单页旋转的角度间隔为60度:
.album-page {
width: 280px;
height: 180px;
position: absolute;
left: 10px;
top: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
color: #333;
/* 设置单页的3D变换,先沿Z轴平移距离,再旋转对应角度 */
transform-origin: center center;
}
/* 6个单页分别设置旋转角度和Z轴平移 */
.album-page:nth-child(1) {
transform: rotateY(0deg) translateZ(200px);
}
.album-page:nth-child(2) {
transform: rotateY(60deg) translateZ(200px);
}
.album-page:nth-child(3) {
transform: rotateY(120deg) translateZ(200px);
}
.album-page:nth-child(4) {
transform: rotateY(180deg) translateZ(200px);
}
.album-page:nth-child(5) {
transform: rotateY(240deg) translateZ(200px);
}
.album-page:nth-child(6) {
transform: rotateY(300deg) translateZ(200px);
}
四、perspective参数的影响
perspective的数值会直接影响3D效果的视觉感受,我们可以通过对比不同数值的效果来理解:
| perspective数值 | 效果描述 |
|---|---|
| 300px | 景深很近,相册旋转时透视变形非常明显,立体感强但容易失真 |
| 800px | 景深适中,透视效果自然,是常用的参数值 |
| 2000px | 景深很远,透视效果很弱,接近平面旋转的效果 |
| none | 没有景深,所有单页的3D变换不会呈现透视,看起来像平面排列 |
五、优化与扩展
可以在相册单页中添加背景图片,替换默认的文本内容,让相册更真实:
.album-page {
/* 其他样式保持不变 */
background-size: cover;
background-position: center;
}
.album-page:nth-child(1) {
background-image: url('https://ipipp.com/album1.jpg');
transform: rotateY(0deg) translateZ(200px);
}
如果需要手动控制旋转,可以去掉animation属性,通过JavaScript监听鼠标事件,动态修改album-container的transform属性值,实现交互式的3D旋转相册效果。
CSS_3Dperspectivetransform旋转相册修改时间:2026-07-02 04:21:32