今天来分享一个用CSS3实现的翻牌效果,有点类似那种3D卡片翻转的交互。你看下面的动图,鼠标悬停上去,卡片就会像被翻动一样,正面是图片,背面是文字介绍。如果把这个效果用在相册或者人物展示页面上,那视觉效果绝对拉满。

一、HTML代码
整个实现全靠CSS3,JS基本不用登场。这里用一组ul来承载多个卡片,每个li里面放一个a(方便点击跳转),a里再套两个div:第一个div放正常显示的图片,第二个div放翻转后显示的文字介绍。结构很清晰。
百度帖吧 CSS3 翻牌效果
百度帖吧 CSS3 翻牌效果
-
漩涡鸣人
日本漫画家岸本齐史作品《火影忍者》中男主角。因为身上封印着邪恶的九尾妖狐,无父无母的他受尽了村人的冷眼与歧视,他下定决心要成为第六代火影,让所有人都认同他的存在。
-
日向雏田
日本漫画家岸本齐史作品《火影忍者》中的3号女主角。木叶忍者村的女忍者,木叶名门日向一族宗家族长的长女。喜欢漩涡鸣人,原本是个性格柔弱的女孩,但是在鸣人的影响下逐渐变得坚强,并逐渐成长为一名优秀的忍者。
-
蒙奇·D·路飞
蒙奇·D·路飞 是日本人气动漫 《海贼王》中的主人公。草帽海贼团船长,梦想是找到传说中的宝藏 —— ONE PIECE,成为海贼王。
-
盒子先生
Danbo是一只用废纸盒DIY出来的可爱玩偶,圆圆的眼睛和三角形的嘴巴,时刻露出无辜的表情,让人看到就心软,Danbo是个纯真善良的小家伙,在它单纯的幻想世界里,总是透露出最纯真可爱的动人气息。
二、CSS3代码
关键样式都写在下面了,注释也加了一些,方便理解。核心就是利用perspective、transform-style: preserve-3d和backface-visibility这几个属性,配合rotateY实现3D翻转。
#content ul{ width:960px; padding:60px 0; margin:0 auto;}
#content ul li{ width:225px; height:180px; margin-right:20px; float:left;}
#content ul li:last-child{ margin-right: 0;}
#content ul li a{ display:block; height:180px;
-webkit-perspective:500px;
-moz-perspective:500px;
-ms-perspective:500px;
perspective:500px;
position: relative;}
#content ul li a > div{ top:0; left:0; width:100%; height:180px; color:#fff;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
-webkit-transition:0.8s ease-in-out ;
-moz-transition:0.8s ease-in-out ;
-ms-transition:0.8s ease-in-out ;
position:absolute;}
#content ul li a div:first-child{
-webkit-transform: rotateY(0);
-moz-transform: rotateY(0);
-ms-transform: rotateY(0);
z-index: 2;}
#content ul li a:hover div:first-child{
-webkit-transform: rotateY(-180deg);
-moz-transform: rotateY(-180deg);
-ms-transform: rotateY(-180deg);}
#content ul li a div:last-child{
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
z-index: 1;
background:url('../images/bg.jpg') no-repeat;}
#content ul li a:hover div:last-child{
-webkit-transform: rotateY(0);
-moz-transform: rotateY(0);
-ms-transform: rotateY(0);
z-index: 1;}
#content ul li a div h3{ margin:0 auto 15px; padding:15px 0; width:200px; height:16px; line-height:16px; font-size: 14px; text-align: center; border-bottom:1px #fff dashed;}
#content ul li a div p{ padding:0 10px; font-size: 12px; text-indent: 2em; line-height:18px;}
三、实现原理
默认状态下,图片所在的div:first-child的rotateY为0,即正面朝前;而介绍所在的div:last-child的rotateY为180度,相当于背面朝前(但被隐藏了)。当鼠标悬停时,图片div从0度逆时针旋转到-180度,介绍div从180度逆时针旋转到0度,两者同时旋转,就形成了流畅的翻牌效果。
注意这里为什么介绍默认是180度?因为当它被图片遮盖时,你看到的其实是它的背面(180度状态),而鼠标悬停后它旋转回0度,才露出正面文字。这样两个div一前一后,协同完成翻转。
四、总结
CSS3的transform系列属性确实带来了很多可能性,像perspective、preserve-3d、backface-visibility这些,组合起来就能做出很棒的3D交互效果。当然,老旧的IE6-8不支持这些特性,但没关系——在那些浏览器里,效果会优雅降级,直接显示图片,也不难看。而在现代浏览器里,用户就能体验到流畅的翻牌动画。这种渐进增强的思路,既避免了堆砌大量JS,又让新浏览器用户获得了更好的体验,何乐而不为呢?