纯CSS3实现3D旋转书本效果


Posted in HTML / CSS onMarch 21, 2016

有一些前沿的电商网站已经开始使用3D模型来展示商品并支持在线定制,而其中图书的展示是最为简单的一种,无需复杂的建模过程,使用图片和CSS3的一些变换即可实现更好的展示效果,简洁而实用。
书本的3D模型是所有商品中最为简单的,因为其本质上就是一个立方体(cube),只是带有封面/封底和左侧封条。 所以要构造一个3D书本展示,问题就被分解为构造一个立方体+旋转+图片背景。
1. 构造一个立方体
要创建一个立方体,首先我们需要创建一个虚拟的三维视觉空间,这可以通过设置包容器元素的perspective属性获得。

纯CSS3实现3D旋转书本效果

CSS Code复制内容到剪贴板
  1. .stage {    
  2. width200px;    
  3. height260px;    
  4. perspective: 1000px;    
  5. perspective-origin: center center;// 缺省值,可忽略    
  6. }  
上述代码把元素放在距离观察点1000px的地方(Z轴向),并且在X/Y轴向上居中。
CSS Code复制内容到剪贴板
  1. <div class="stage">    
  2. <div class="cube">    
  3. <figure class="back"></figure>    
  4. <figure class="top"></figure>    
  5. <figure class="bottom"></figure>    
  6. <figure class="left"></figure>    
  7. <figure class="right"></figure>    
  8. <figure class="front"></figure>    
  9. </div>    
  10. </div>   
接着,我们在包容器元素里面添加一个立方体元素,6个边(上下左右和前后),之所以使用figure,是因为需要支持贴图。
我们需要根据书本的厚度和长宽来确定立方体各个面的坐标位置,在本例中所用书本模型(一本MySQL书)的绝对厚度为18.2px,高度260px,宽度197.6px。
那么根据简单的几何知识,前后面距离立方体中心的距离为18.2/2=9.1px,其中“后”元素需要再翻转一下(即“背”过去)。
CSS Code复制内容到剪贴板
  1. .front {    
  2. transform: translateZ(9.1px);    
  3. }    
  4. .back {    
  5. transform: rotateY(180deg) translateZ(9.1px);    
  6. }   
用类似的计算方法,我们可以把其他4条边放置(平移+旋转变换)到各自的位置,从而拼装成一个虚拟的立方体。
CSS Code复制内容到剪贴板
  1. .front {    
  2. transform: translateZ(9.1px);    
  3. }    
  4. .back {    
  5. transform: rotateY(180deg) translateZ(9.1px);    
  6. }    
  7. .top {    
  8. transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);    
  9. width: 18.2px;    
  10. height: 197.6px;    
  11. }    
  12. .bottombottom {    
  13. transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);    
  14. }    
  15. .left {    
  16. transform: rotateY(-90deg) translateZ(9.1px);    
  17. width: 18.2px;    
  18. }    
  19. .rightright {    
  20. transform: rotateY(90deg) translateZ(188.5px);    
  21. width: 18.2px;    
  22. }  
2. 添加封面
接着我们给前后以及左侧面元素添加背景图(可以使用一张图,然后从不同的位置截取),给其他3个面添加背景颜色,并给“底”面添加阴影效果:
CSS Code复制内容到剪贴板
  1. .front {    
  2. transform: translateZ(9.1px);    
  3. backgroundurl("//wow.techbrood.com/uploads/160301/mysql.png"top rightright;    
  4. background-sizeauto 100%;    
  5. }    
  6. .back {    
  7. transform: rotateY(180deg) translateZ(9.1px);    
  8. backgroundurl("//wow.techbrood.com/uploads/160301/mysql.png"top left;    
  9. background-sizeauto 100%;    
  10. }    
  11. .top {    
  12. transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);    
  13. background#fafafa;    
  14. width: 18.2px;    
  15. height: 197.6px;    
  16. }    
  17. .bottombottom {    
  18. transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);    
  19. background#ccc;    
  20. width: 18.2px;    
  21. height: 197.6px;    
  22. -webkit-filter: drop-shadow(0 0 26px rgba(0, 0, 0, 0.75));    
  23. }    
  24. .left {    
  25. transform: rotateY(-90deg) translateZ(9.1px);    
  26. backgroundurl("//wow.techbrood.com/uploads/160301/mysql.png"top center;    
  27. background-sizeauto 100%;    
  28. width: 18.2px;    
  29. }    
  30. .rightright {    
  31. transform: rotateY(90deg) translateZ(188.5px);    
  32. background#ddd;    
  33. background-sizeauto 100%;    
  34. width: 18.2px;    
  35. }  
这样我们就实现了一个逼真的3D书本视觉模型。
3. 添加旋转动画
这个比较简单,使用rotateY方法就可以。
CSS Code复制内容到剪贴板
  1. @-webkit-keyframes rotate {    
  2. 0% {    
  3. transform: rotateY(0) translateX(-18.2px);    
  4. }    
  5. 100% {    
  6. transform: rotateY(360deg) translateX(-18.2px);    
  7. }    
  8. }  

最终的效果图如下:

纯CSS3实现3D旋转书本效果

关于CSS3实现3D旋转书本 的全部内容小编就给大家介绍这么多,希望对大家有所帮助!
原文:http://blog.csdn.net/iefreer/article/details/50931478

HTML / CSS 相关文章推荐
纯CSS3打造动感漂亮时尚的扇形菜单
Mar 18 HTML / CSS
一款纯css3实现的竖形二级导航的实例教程
Dec 11 HTML / CSS
详解CSS3 Media Queries中媒体属性的使用
Feb 29 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 HTML / CSS
HTML5实现获取地理位置信息并定位功能
Apr 25 HTML / CSS
canvas实现圆形进度条动画的示例代码
Dec 26 HTML / CSS
H5混合开发app如何升级的方法
Jan 10 HTML / CSS
Canvas中设置width与height的问题浅析
Nov 01 HTML / CSS
webView加载html图片遇到的问题解决
Oct 08 HTML / CSS
html5自定义video标签的海报与播放按钮功能
Dec 04 HTML / CSS
AmazeUI 面板的实现示例
Aug 17 HTML / CSS
CSS3新特性详解(五):多列columns column-count和flex布局
Apr 30 HTML / CSS
CSS3实现粒子旋转伸缩加载动画
Apr 22 #HTML / CSS
一款利用html5和css3实现的3D立方体旋转效果教程
Apr 26 #HTML / CSS
CSS3弹性盒模型开发笔记(一)
Apr 26 #HTML / CSS
CSS3弹性盒模型开发笔记(三)
Apr 26 #HTML / CSS
浅析两列自适应布局的3种思路
May 03 #HTML / CSS
CSS3 3D位移translate效果实例介绍
May 03 #HTML / CSS
详解CSS的border边框属性及其在CSS3中的新特性
May 10 #HTML / CSS
You might like
在JavaScript中调用php程序
2009/03/09 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
php中使用url传递数组的方法
2015/02/11 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
Python实现快速多线程ping的方法
2015/07/15 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
对python调用RPC接口的实例详解
2019/01/03 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
html5的localstorage详解
2017/05/09 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
销售员求职个人的自我评价
2014/02/19 职场文书
加入学生会演讲稿
2014/04/24 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
旷工检讨书1000字
2015/01/01 职场文书
教师见习总结范文
2015/06/23 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技