css及js实现正反面翻转

一、两种翻转方式:

结构

ini 复制代码
<div class="card">
	<div class="front">正面</div>
	<div class="back">背面</div>
</div>
<button class="flip">翻转</button>

鼠标悬停 :通过CSS的:hover伪类实现

  1. transform-style: preserve-3d:这是3D变换的关键,确保子元素在3D空间中变换,而不是被压扁到2D平面
  2. backface-visibility: hidden:隐藏元素的背面,这是实现"卡片翻转"效果而非"内容镜像"的关键
  3. .back { transform: rotateY(180deg); } :背面初始旋转180度,使其朝后隐藏
  4. transition: transform 0.6s:为transform属性添加0.6秒的过渡动画,使翻转过程平滑
css 复制代码
.card {
		width: 200px;
		height: 200px;
		position: relative;  /* 设置为相对定位,作为子元素的定位基准 */
		transform-style: preserve-3d;  /* 保持3D变换效果,使子元素在3D空间内变换 */
		transition: transform 0.6s;  /* 添加transform属性的过渡效果,持续0.6秒 */
	}
	.front, .back {
		position: absolute;  /* 绝对定位,使正反面重叠 */
		width: 100%;
		height: 100%;
		backface-visibility: hidden;  /* 隐藏元素的背面,防止翻转时看到镜像内容 */
	}
	/* 正面样式 */
	.front {
		background-color: lightgreen;  /* 正面背景色为浅绿色 */
	}
	/* 背面样式 */
	.back {
		background-color: lightblue;  /* 背面背景色为浅蓝色 */
		transform: rotateY(180deg);  /* 初始状态旋转180度,使背面朝后隐藏 */
	}
	/* 鼠标悬停效果 */
	.card:hover {
		transform: rotateY(180deg);  /* 鼠标悬停时,卡片沿Y轴旋转180度 */
	}

按钮点击:通过JavaScript事件监听实现

  1. 通过querySelector获取卡片和按钮元素

  2. 为按钮添加点击事件监听器

  3. 使用条件运算符切换卡片的翻转状态:

    • 如果卡片已有transform样式,则清除(返回正面)
    • 如果卡片没有transform样式,则添加rotateY(180deg)(翻转显示背面)
javascript 复制代码
	// 获取DOM元素
	let card = document.querySelector('.card');  // 获取卡片元素
	let flip = document.querySelector('.flip');  // 获取翻转按钮元素
	
	// 为翻转按钮添加点击事件监听器
	flip.addEventListener('click', function() {
		// 条件判断:如果卡片当前有transform样式,则清除(恢复正面)
		// 如果卡片当前没有transform样式,则添加翻转样式(显示背面)
		card.style.transform ? card.style.transform = '' : card.style.transform = 'rotateY(180deg)';
	});
相关推荐
yuanyxh6 小时前
Mac 软件推荐
前端·javascript·程序员
万少6 小时前
AtomCode开发微信小程序《谁去呀》 全流程
前端·javascript·后端
某人辛木7 小时前
Web自动化测试
前端·python·pycharm·pytest
Kagol7 小时前
Superpowers GSD gstack AgentSkills深度测评
前端·人工智能
excel8 小时前
JavaScript 字符串与模板字面量:从表象到本质理解
前端
京东云开发者8 小时前
当AI成为导演-如何用AI创作动漫短剧
前端
李白的天不白9 小时前
使用 SmartAdmin 进行前后端开发
java·前端
乘风gg9 小时前
🤡PUA AI Coding 工具 的 10 条终极语录
前端·ai编程·claude
学Linux的语莫9 小时前
Vue 3 入门教程
前端·javascript·vue.js
怕浪猫10 小时前
第一章、Chrome DevTools Protocol (CDP) 详解
前端·javascript·chrome