HTML5制作卡片翻转效果核心是利用CSS3的3D变换能力,通过构建正反两面的卡片结构,配合旋转动画实现视觉上的翻转交互,整个过程不需要复杂的脚本逻辑,仅通过样式和少量交互触发即可完成。

一、基础HTML结构搭建
首先需要构建卡片的容器和正反两个面的结构,容器用来控制3D视口,两个面分别放置需要展示的内容。结构代码如下:
<div class="card-container">
<div class="card">
<div class="card-front">
<h3>卡片正面</h3>
<p>这里是正面展示的内容</p>
</div>
<div class="card-back">
<h3>卡片反面</h3>
<p>这里是反面展示的内容</p>
</div>
</div>
</div>
这里card-container是外层容器,用来开启3D渲染环境,card是实际执行翻转的元素,card-front和card-back分别是正反两个面。
二、核心CSS样式配置
1. 开启3D视口
要让元素支持3D变换,需要给外层容器设置perspective属性,这个属性用来定义观察者与3D元素之间的距离,数值越小3D效果越强烈,一般设置为1000px左右比较合适。
.card-container {
width: 300px;
height: 200px;
perspective: 1000px;
margin: 50px auto;
}
2. 配置卡片基础样式
卡片元素需要设置transform-style: preserve-3d,保证子元素处于3D空间内,同时设置过渡属性让翻转过程更平滑。正反两个面需要绝对定位,保证重叠在一起,反面需要提前旋转180度,这样翻转后才会正确显示。
.card {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
transition: transform 0.8s ease-in-out;
}
.card-front, .card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 8px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 16px;
}
.card-front {
background-color: #409eff;
color: #fff;
}
.card-back {
background-color: #67c23a;
color: #fff;
transform: rotateY(180deg);
}
这里backface-visibility: hidden的作用是当元素背面朝向观察者时隐藏元素,避免出现正反两面同时显示的问题。
三、翻转动画触发
翻转效果可以通过鼠标悬停或者点击事件触发,这里以鼠标悬停为例,当鼠标移到卡片容器上时,卡片元素绕Y轴旋转180度,就能看到反面的内容。
.card-container:hover .card {
transform: rotateY(180deg);
}
如果需要点击触发,可以配合少量JavaScript切换类名实现:
// 获取卡片容器元素
const cardContainer = document.querySelector('.card-container');
// 点击容器时切换翻转状态
cardContainer.addEventListener('click', function() {
const card = this.querySelector('.card');
card.classList.toggle('flipped');
});
对应的CSS需要新增翻转状态的样式:
.card.flipped {
transform: rotateY(180deg);
}
四、效果优化说明
- 可以调整
transition的时长和缓动函数,让翻转节奏更符合页面风格 - 如果需要绕X轴翻转,只需要把
rotateY换成rotateX即可 - 正反两面的内容可以根据需求自定义,支持放置图片、文字、按钮等各类元素
- 如果需要在移动端使用,可以保留点击触发逻辑,避免悬停效果不兼容的问题
注意:3D变换效果在部分旧版本浏览器上可能存在兼容性问题,如果需要适配非常旧的浏览器,建议提前做兼容性测试,或者添加对应的前缀属性。
HTML53D翻转动画CSS3_transformCSS3_animation修改时间:2026-06-13 15:36:34