zoukankan      html  css  js  c++  java
  • 使用纯CSS3实现一个3D旋转的书本

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

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


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

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

    1. 构造一个立方体

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


    .stage {
         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);
         18.2px;
        height: 197.6px;
    }
    .bottom {
        transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);
    }
    .left {
        transform: rotateY(-90deg) translateZ(9.1px);
         18.2px;
    }
    .right {
        transform: rotateY(90deg) translateZ(188.5px);
         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;
         18.2px;
        height: 197.6px;
    }
    .bottom {
        transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);
        background: #ccc;
         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%;
         18.2px;
    }
    .right {
        transform: rotateY(90deg) translateZ(188.5px);
        background: #ddd;
        background-size: auto 100%;
         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

  • 相关阅读:
    使用Spring AOP实现MySQL数据库读写分离案例分析
    mysql的备份(文档的内容小编都已经验证过了)
    【信息化】MySQL数据库简介
    基于MySQL的分布式数据库TDSQL十年锻造经验分享
    MySQL数据库丢失数据场景分析
    微博的MySQL数据库优化实践经验
    数据库MySQL调优实战经验总结
    让数据库跑的更快的7个MySQL优化建议
    一文看懂 MySQL 分区和分表,提高表增删改查效率
    三分钟掌握SQL Server迁移Mongodb
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8283100.html
Copyright © 2011-2022 走看看