有一些前沿的电商站点已经開始使用3D模型来展示商品并支持在线定制,而当中图书的展示是最为简单的一种,

无需复杂的建模过程,使用图片和CSS3的一些变换就可以实现更好的展示效果,简洁而有用。

书本的3D模型是全部商品中最为简单的。由于其本质上就是一个立方体(cube)。仅仅是带有封面/封底和左側封条。

所以要构造一个3D书本展示,问题就被分解为构造一个立方体+旋转+图片背景。

1. 构造一个立方体

要创建一个立方体。首先我们须要创建一个虚拟的三维视觉空间。这能够通过设置包容器元素的perspective属性获得。

.stage {
width: 200px;
height: 260px;
perspective: 1000px;
perspective-origin: center center;// 缺省值,可忽略
}

上述代码把元素放在距离观察点1000px的地方(Z轴向),而且在X/Y轴向上居中。

<div class="stage">
<div class="cube">
<figure class="back"></figure>
<figure class="top"></figure>
<figure class="bottom"></figure>
<figure class="left"></figure>
<figure class="right"></figure>
<figure class="front"></figure>
</div>
</div>

接着。我们在包容器元素里面加入一个立方体元素,6个边(上下左右和前后),之所以使用figure。是由于须要支持贴图。

我们须要依据书本的厚度和长宽来确定立方体各个面的坐标位置。在本例中所用书本模型(一本MySQL书)的绝对厚度为18.2px。高度260px。宽度197.6px。

那么依据简单的几何知识,前后面距离立方体中心的距离为18.2/2=9.1px,当中“后”元素须要再翻转一下(即“背”过去)。

.front {
transform: translateZ(9.1px);
}
.back {
transform: rotateY(180deg) translateZ(9.1px);
}

用相似的计算方法。我们能够把其它4条边放置(平移+旋转变换)到各自的位置。从而拼装成一个虚拟的立方体。

.front {
transform: translateZ(9.1px);
}
.back {
transform: rotateY(180deg) translateZ(9.1px);
}
.top {
transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);
width: 18.2px;
height: 197.6px;
}
.bottom {
transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);
}
.left {
transform: rotateY(-90deg) translateZ(9.1px);
width: 18.2px;
}
.right {
transform: rotateY(90deg) translateZ(188.5px);
width: 18.2px;
}
2. 加入封面

接着我们给前后以及左側面元素加入背景图(能够使用一张图,然后从不同的位置截取),给其它3个面加入背景颜色。并给“底”面加入阴影效果:

.front {
    transform: translateZ(9.1px);
    background: url("//wow.techbrood.com/uploads/160301/mysql.png") top right;
    background-size: auto 100%;
}
.back {
    transform: rotateY(180deg) translateZ(9.1px);
    background: url("//wow.techbrood.com/uploads/160301/mysql.png") top left;
    background-size: auto 100%;
}
.top {
    transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);
    background: #fafafa;
    width: 18.2px;
    height: 197.6px;
}
.bottom {
    transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);
    background: #ccc;
    width: 18.2px;
    height: 197.6px;
    -webkit-filter: drop-shadow(0 0 26px rgba(0, 0, 0, 0.75));
}
.left {
    transform: rotateY(-90deg) translateZ(9.1px);
    background: url("//wow.techbrood.com/uploads/160301/mysql.png") top center;
    background-size: auto 100%;
    width: 18.2px;
}
.right {
    transform: rotateY(90deg) translateZ(188.5px);
    background: #ddd;
    background-size: auto 100%;
    width: 18.2px;
}

这样我们就实现了一个逼真的3D书本视觉模型。

3. 加入旋转动画

这个比較简单,使用rotateY方法就能够。

@-webkit-keyframes rotate {
0% {
transform: rotateY(0) translateX(-18.2px);
}
100% {
transform: rotateY(360deg) translateX(-18.2px);
}
}

终于的效果图例如以下:

你能够在踏得网上自己试试看 (http://wow.techbrood.com/fiddle/17587)。

by iefreer

最新文章

  1. HTTP学习二:Web应用中的HTTP
  2. JavaScript学习1
  3. 【xargs使用】查询包含某字符串的所有文件
  4. SSRS用自定义对象绑定报表
  5. iOS开发--数组
  6. Xcode 4 插件制作入门
  7. memcached一些整理
  8. 关于NLog的target和Layout
  9. 递归解析任意层的json
  10. 听翁恺老师mooc笔记(12)--结构中的结构
  11. 拆解轮子之XRecyclerView
  12. 2018-2019-2 20165205 网络攻防Exp3免杀原理与实践
  13. XUbuntu18.04(Bionic河狸)正式发布,系统安装升级记录
  14. 尚硅谷《全套Java、Android、HTML5前端视频》
  15. space.php
  16. time时间模块
  17. learning ddr mode register MR1
  18. jQuery操错题积累
  19. Java中的构造器与垃圾回收
  20. 使用Maven创建Java项目

热门文章

  1. 最简单的基于FFmpeg的移动端例子:Android 视频转码器
  2. 4455: [Zjoi2016]小星星|状压DP|容斥原理
  3. 洛谷 P1341 无序字母对(欧拉回路)
  4. Linux文本编辑器
  5. 微信小程序实现一个简单的表格
  6. 【hdu 3478】Catch
  7. [Javascript AST] 4. Continue: Report ESLint error
  8. percona-toolkit的安装及简单介绍
  9. 调色板原理 &amp; 编程
  10. shell基础之符号与语法