一步步教你打造3D旋转盒

今天又来一了一篇关于3D效果的文章,教你打造自己的3D旋转盒

首先还是希望大家自己看看关于transform这个属性的相关特性作用,张前辈已经写了详细的教程,直接附上

http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/comment-page-1/

OK下面我们开始吧

首先我们创建如下的HTML基本骨架

<div id="container">
    <div id="box">
        <div class="plane front"></div>
        <div class="plane back"></div>
        <div class="plane top"></div>
        <div class="plane bottom"></div>
        <div class="plane left"></div>
        <div class="plane right"></div>
    </div>
</div>

要体现出3D的那种近大远小的感觉,我们首先需要在id=‘container‘的DIV中加入perspective:800px;(常用值),这个值越小近大远小的感觉会越明显,到接近0时,就会充满荧屏,就像你在眼前放一片叶子,很近的话,小小叶子就会充满你的整个视野,从而看不见其他东西,正所谓一叶障目,不见泰山。然后再加上一些其他基本样式

CSS代码:

#container {
width:200px;
height:200px;
border:1px solid #FF0;
position:relative;
perspective:800px;
margin:200px auto;
}

这是看见的应该只有一个黄色的正方形边框。

然后id="box"这个div很显然是这个旋转的盒子主体,里面的6个div就是盒子的六个面,现在我们要做的就是如何旋转和平移这六个面,是她拼接成一个立方体。

首先我们跟这6个面加上基本样式(长、宽、颜色)

     .plane{width: 100px;height: 100px;}
        .front{background: pink;}
        .back{background: purple;}
        .top{background: red;}
        .bottom{background: black;}
        .left{background: yellow;}
        .right{background: green;}

那么得到将是下面的样子

现在呢,我们就需要将这6个面旋转平移拼成一个立方体了,首先我们需要将id="box"这个div设置成3D模式呈现,即加入下面的css代码:

#box {
-webkit-transform-style:preserve-3d;
transform-style:preserve-3d;margin:73px auto;
}

然后我们将六个面相对于id="container"的DIV来个绝对定位,在.plane的类中加入

position: absolute;

那么我们就会得到下面的效果:

好了现在就好比,你手里有6张正方形的卡片,叠在一起,现在你要怎么将每个面进行不同的旋转平移变成一个立方体的问题,是不是马上就有了思路,下面我们就需要用代码来实现。为了便于观察,我们将加入如下代码

现在我们将黄色的面也就是class="left"的面进行以Y轴旋转90度,得到下图

然后我们只需要将这个黄色的面,向左边平移50px就行了(因为我们的立方体的边长为100,只需左边的面向左平移50px。右边的向右平移50px,合起来就是100px),但是如果平移50px,会刚好被绿色的面给挡住,所以我们平移60px,

.left{background: yellow;transform: rotateY(-90deg) translateZ(60px);} 

得到下图:

我们的俯视图将是这样

同样我们的右面可以这样得到:

.right{background: green;transform: rotateY(90deg) translateZ(60px);}

效果图(左边正视图,右边俯视图)

现在就需要前后两个面了,从上面的俯视图中我们可以知道,前后两面不需要旋转,只需要平移即可,代码如下

.front{background: pink;transform: translateZ(60px);}
.back{background: purple;transform: translateZ(-60px);}

效果图(左边正视图,右边俯视图)

现在就只需要处理上下两个面了,底面和顶面先都围绕X轴旋转90度

.top{background: red;transform: rotateX(90deg);}
.bottom{background: black;transform: rotateX(90deg);}

俯视图如下

现在只需要,底面向下平移50度,顶面向上平移50度就行了

.top{background: red;transform: rotateX(90deg) translateZ(50px);}
.bottom{background: black;transform: rotateX(90deg) translateZ(-50px)}

效果图(效果图都让id=‘box‘的div进行了一定的旋转,便于观察)

现在我们把平移的长度换成50px,每个面之间就不会再有缝隙了

        .plane{width: 100px;height: 100px;position: absolute;}
        .front{background: pink;transform: translateZ(50px);}
        .back{background: purple;transform: translateZ(-50px);}

        .left{background: yellow;transform: rotateY(-90deg) translateZ(50px);}
        .right{background: green;transform: rotateY(90deg) translateZ(50px);}

        .top{background: red;transform: rotateX(90deg) translateZ(50px);}
        .bottom{background: black;transform: rotateX(90deg) translateZ(-50px)}
        

效果图:

OK 已经出来了,现在我们加上动画,让这个盒子转起来:

     #container{width: 200px;height: 200px;border:1px solid yellow;margin:50px auto;position: relative;perspective:800px;}
        #box{-webkit-transform-style: preserve-3d;transform-style: preserve-3d;margin: 50px auto;animation:play 30s infinite linear ;}
        /* 6个面 */
        .plane{width: 100px;height: 100px;position: absolute;}
        .front{background: pink;transform: translateZ(50px);}
        .back{background: purple;transform: translateZ(-50px);}

        .left{background: yellow;transform: rotateY(-90deg) translateZ(50px);}
        .right{background: green;transform: rotateY(90deg) translateZ(50px);}

        .top{background: red;transform: rotateX(90deg) translateZ(50px);}
        .bottom{background: black;transform: rotateX(90deg) translateZ(-50px)}

        @keyframes play{
            to{transform: rotateX(360deg) rotateY(360deg);}
        }
        

OK,盒子就自己转起来了,怎么样,炫酷吧,我们可以用这个来做3Dbanner图,3D的旋转柱,3D的选项卡等等 如下图:

     

效果展示链接:http://djlxs.herokuapp.com/

怎么样效果不错吧

时间: 2024-10-15 10:08:04

一步步教你打造3D旋转盒的相关文章

最清晰细致的教程!一步步教你打造Win7+CentOS双系统

大概半年前自学了一段时间Linux,但没有坚持下来--最近又想开始看,但是希望看到Linux在物理机下的运行情况而不是仅仅在虚拟机下运行,所以尝试着在已经安装了Win7的系统下安装CentOS,实现双系统切换使用的目的.经过大半天的实验,算是成功了,现在把我的方法给大家介绍一下,希望对大家有帮助. 注意:1.由于涉及到对硬盘操作,请妥善备份数据,避免损失. 2.为了达到每个步骤都有图片覆盖,我使用了虚拟机来进行测试,不过请大家放心,我已经在自己的物理机上成功实现了. 3.我的步骤是绝对正确和缺一

【小松教你手游开发】【系统模块开发】做一个3d旋转菜单

在unity做一个3d旋转菜单,像乱斗西游2的这种: 暂时有两种方法可以实现: 一.当做是2d界面,通过定义几个固定点的坐标.大小.透明度,还有每个点的panel depth大小,把数据存储下来,在手机滑动的过程中计算滑动划过的距离和这个panel大小的比值,乘以两个点之间的距离,获得坐标点移动的距离,通过改变x轴改变位置,同理改变大小和透明度. 这个方法我自己做2d游戏的时候实现过,做起来比较简单,没有什么可拓展性可言,并且会有很多限制,比如拖动过程中很难转变方向.要自己实现运动中的弹性(这里

【CSS3进阶】酷炫的3D旋转透视

之前学习 react+webpack ,偶然路过 webpack 官网 ,看到顶部的 LOGO ,就很感兴趣. 最近觉得自己 CSS3 过于薄弱,想着深入学习一番,遂以这个 LOGO 为切入口,好好研究学习了一下相关的 CSS3 属性.webpack 的 LOGO 动画效果乍看不是很难,深入了解之后,觉得内部其实大有学问,自己折腾了一番,做了一系列相关的 CSS3 动画效果. 先上 demo ,没有将精力放在兼容上,请用 chrome 打开. 本文完整的代码,以及更多的 CSS3 效果,在我 g

Android实现3D旋转的View

今天在网上看到一篇文章写关于Android实现3D旋转(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt2/index.html?ca=drs-),出于好奇就写了一个,运行效果如下: 下面我们就开始一步步完成这个效果吧. 实现水平滑动 package com.example.rotation3dview; import android.content.Context; import android.util.At

3D旋转菜单

今天来个3D旋转菜单,是纯css3实现的,主要用到transform,transition,backface-visibility. 主要是transform这个变换,它是今天猪脚. transform里有transform-style 属性规定如何在 3D 空间中呈现被嵌套的元素. transform-origin 属性允许您改变被转换元素的位置. backface-visibility 属性定义当元素不面向屏幕时是否可见. 代码: <!DOCTYPE html> <html lang

一步步教你js原生瀑布流效果实现

一步步教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一张挨着一张竖直排列 4.鼠标向下滚动,一直不停的加载图片 5.浏览器的宽度改变,图片的列数会进行相应的更改 那么这种效果类似现实生活中的瀑布,所以我们叫它瀑布流的效果. Js原生瀑布流效果的实现 从上述分析中,我们可以把整个效果分为以下四个部分: html+css界面搭建 瀑布流效果 浏览器向下滚动

CSS3——3D旋转图(跑马灯效果图)

CSS3新增了很多新的属性,可以用很少的代码实现炫酷的动画效果,但由于兼容性各浏览器的能力存在不足,有特别需求的网站就呵呵啦.H5C3已是大势所趋了,之前看过一个新闻,Chrome将在年底全面转向H5,抛弃了Flash.. 本案例主要使用了CSS3中的变换transform和动画animation属性,实现了跑马灯效果,详细的解释在代码中的注释中. 做好布局之后的效果图 添加了animation样式,实现自动旋转,并且鼠标移入,停止动画.(鼠标移入,绕Z轴旋转90度) 代码: 1 <!DOCTY

【学】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)上—— 妙味课堂

这个是3D旋转的进阶版,是一个类似与骰子的正方体.这个版本只有秒数的个位数,还没有写整个钟表,下面那个版本好好想想该怎么写 这个效果需要用到transform-style: preserve-3d. 利用transform: rotateX, rotateY, rotateZ来定义物体转动轴,实现3D旋转 给一个正方体设置6个面,每个面都设置旋转基面,并且直接先朝各个方向转90度,有一个面要注意,就是和最前面的那个面的对面,不用转,但是要用transform: translateZ()来让这个面

一款基于jQuery和CSS3炫酷3D旋转画廊特效插件

这是一款效果炫酷的jQuery和CSS3 3D旋转画廊特效插件.该3D画廊插件可以通过前后导航按钮来切换图片,效果就像旋转木马一样.它还带有点击放大图片,显示图片标题和用键盘操作等功能. 在线预览   源码下载 简要教程 这是一款效果非常炫酷的jQuery和CSS3 3D旋转画廊特效插件.第一个DEMO是一个简单的例子,使用CSS3来制作3d旋转效果,然后用js来控制前后导航按钮.第二个DEMO是第一个DEMO的升级版,它增加了图片标题.查看图片.键盘控制等其它功能. HTML结构 这个3D画廊