3D魔方的思路与实现

  思路:(要实现魔方六个面以及九个小块的样式并旋转展示。)

  内容部分:魔方分为六个面,每个面有九个小块,使用一个div内嵌套六个div再嵌套九个div实现内容部分。  样式部分:最外层div设置属性 transform-style: preserve-3d;实现整体的3D效果。

        内部六个面使用 transform: rotateX/Y/Z(0deg) translateZ(1px); 分别平移旋转不同的角度,与第一个面组成立方体。

        设置每个面九个小块的大小和边框样式(圆角)以及背景颜色。

       最后设置整体的旋转方式以及循环时间等。

  实现

html 部分

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <!-- 一个关于3D魔方的页面 -->
 4
 5 <head>
 6     <meta charset="UTF-8">
 7     <title>Document</title>
 8     <meta name="author" content="Wangshiyuan" />
 9     <link rel="shortcut icon" href="img/geekicon.ico" type="image/x-icon" />
10     <link rel="stylesheet" type="text/css" href="css/box.css">
11 </head>
12
13 <body>
14     <!-- 整体布局 -->
15     <div class="perspective m3d">
16         <!-- 六个面 -->
17         <div class="front big">
18             <!-- 九块 -->
19             <div class="one small"></div>
20             <div class="two small"></div>
21             <div class="three small"></div>
22             <div class="four small"></div>
23             <div class="five small"></div>
24             <div class="six small"></div>
25             <div class="seven small"></div>
26             <div class="eight small"></div>
27             <div class="nine small"></div>
28         </div>
29         <!-- 六个面 -->
30         <div class="back big">
31             <!-- 九块 -->
32             <div class="one small"></div>
33             <div class="two small"></div>
34             <div class="three small"></div>
35             <div class="four small"></div>
36             <div class="five small"></div>
37             <div class="six small"></div>
38             <div class="seven small"></div>
39             <div class="eight small"></div>
40             <div class="nine small"></div>
41         </div>
42         <!-- 六个面 -->
43         <div class="right big">
44             <!-- 九块 -->
45             <div class="one small"></div>
46             <div class="two small"></div>
47             <div class="three small"></div>
48             <div class="four small"></div>
49             <div class="five small"></div>
50             <div class="six small"></div>
51             <div class="seven small"></div>
52             <div class="eight small"></div>
53             <div class="nine small"></div>
54         </div>
55         <!-- 六个面 -->
56         <div class="left big">
57             <!-- 九块 -->
58             <div class="one small"></div>
59             <div class="two small"></div>
60             <div class="three small"></div>
61             <div class="four small"></div>
62             <div class="five small"></div>
63             <div class="six small"></div>
64             <div class="seven small"></div>
65             <div class="eight small"></div>
66             <div class="nine small"></div>
67         </div>
68         <!-- 六个面 -->
69         <div class="top big">
70             <!-- 九块 -->
71             <div class="one small"></div>
72             <div class="two small"></div>
73             <div class="three small"></div>
74             <div class="four small"></div>
75             <div class="five small"></div>
76             <div class="six small"></div>
77             <div class="seven small"></div>
78             <div class="eight small"></div>
79             <div class="nine small"></div>
80         </div>
81         <!-- 六个面 -->
82         <div class="bottom big">
83             <!-- 九块 -->
84             <div class="one small"></div>
85             <div class="two small"></div>
86             <div class="three small"></div>
87             <div class="four small"></div>
88             <div class="five small"></div>
89             <div class="six small"></div>
90             <div class="seven small"></div>
91             <div class="eight small"></div>
92             <div class="nine small"></div>
93         </div>
94     </div>
95 </body>
96
97 </html>

css 部分

  1 body {
  2     position: relative;
  3     width: 500px;
  4     height: 500px;
  5     padding: 0;
  6     margin: 0 auto;
  7 }
  8
  9
 10 /*整体视角与样式*/
 11
 12 .perspective {
 13     position: relative;
 14     width: 300px;
 15     height: 300px;
 16     -webkit-transform: perspective(1500px);
 17     -moz-transform: perspective(1500px);
 18 }
 19
 20
 21 /*整体3d效果*/
 22
 23 .m3d {
 24     -moz-transform-style: preserve-3d;
 25     -webkit-transform-style: preserve-3d;
 26     -webkit-animation-name: animation;
 27     -o-animation-name: animation;
 28     animation-name: animation;
 29     -webkit-animation-timing-function: ease-in-out;
 30     -o-animation-timing-function: ease-in-out;
 31     animation-timing-function: ease-in-out;
 32     -webkit-animation-iteration-count: infinite;
 33     -o-animation-iteration-count: infinite;
 34     animation-iteration-count: infinite;
 35     -webkit-animation-duration: 9s;
 36     -o-animation-duration: 9s;
 37     animation-duration: 9s;
 38     margin: 100px;
 39     -webkit-transform-origin: 150px 150px 0;
 40     -moz-transform-origin: 150px 150px 0;
 41     -ms-transform-origin: 150px 150px 0;
 42     -o-transform-origin: 150px 150px 0;
 43     transform-origin: 150px 150px 0;
 44 }
 45
 46
 47 /*六个面的样式*/
 48
 49 .perspective div {
 50     display: block;
 51     position: absolute;
 52     width: 298px;
 53     height: 298px;
 54     border: 1px solid rgba(255, 200, 0, 0.2);
 55     border-radius: 3%;
 56 }
 57
 58
 59 /*正面样式*/
 60
 61 .front {
 62     -webkit-transform: rotateY(0deg) translateZ(150px);
 63     -moz-transform: rotateY(0deg) translateZ(150px);
 64 }
 65
 66
 67 /*正面小块颜色*/
 68
 69 .front div {
 70     background: rgba(57, 170, 174, 0.8);
 71 }
 72
 73
 74 /*背面样式*/
 75
 76 .back {
 77     -webkit-transform: rotateY(180deg) translateZ(150px);
 78     -moz-transform: rotateY(180deg) translateZ(150px);
 79 }
 80
 81
 82 /*背面小块颜色*/
 83
 84 .back div {
 85     background: rgba(99, 234, 106, 0.8);
 86 }
 87
 88
 89 /*右面样式*/
 90
 91 .right {
 92     -webkit-transform: rotateY(90deg) translateZ(150px);
 93     -moz-transform: rotateY(90deg) translateZ(150px);
 94 }
 95
 96
 97 /*右面小块颜色*/
 98
 99 .right {
100     background: rgba(57, 209, 209, 0.8);
101 }
102
103
104 /*左面样式*/
105
106 .left {
107     -webkit-transform: rotateY(-90deg) translateZ(150px);
108     -moz-transform: rotateY(-90deg) translateZ(150px);
109 }
110
111
112 /*左面小块颜色*/
113
114 .left div {
115     background: rgba(252, 29, 20, 0.8);
116 }
117
118
119 /*上面样式*/
120
121 .top {
122     -webkit-transform: rotateX(90deg) translateZ(150px);
123     -moz-transform: rotateX(90deg) translateZ(150px);
124 }
125
126
127 /*上面小块颜色*/
128
129 .top div {
130     background: rgba(20, 252, 55, 0.8);
131 }
132
133
134 /*下面样式*/
135
136 .bottom {
137     -webkit-transform: rotateX(-90deg) translateZ(150px);
138     -moz-transform: rotateX(-90deg) translateZ(150px);
139 }
140
141
142 /*下面小块颜色*/
143
144 .bottom div {
145     background: rgba(20, 39, 252, 0.8);
146 }
147
148
149 /*小块的样式*/
150
151 .big div {
152     width: 97px;
153     height: 98px;
154     display: block;
155     float: left;
156     position: relative;
157     border: 1px solid rgba(255, 255, 255, 0.9);
158     ;
159     border-radius: 10%;
160 }
161
162 /*整体旋转方式*/
163 /*
164 @-webkit-keyframes animation {
165     from {
166         -webkit-transform: rotatey(0) rotateX(0);
167     }
168     to {
169         -webkit-transform: rotatey(360deg) rotateX(360deg);
170     }
171 }
172
173 @keyframes animation {
174     from {
175         transform: rotatey(0) rotateX(0);
176     }
177     to {
178         transform: rotatey(360deg) rotateX(360deg);
179     }
180 }
181 */
182
183 /*整体旋转方式*/
184
185 @-webkit-keyframes animation {
186     from,
187     to {}
188     16% {
189         -webkit-transform: rotatey(-90deg);
190     }
191     33% {
192         -webkit-transform: rotatey(-90deg) rotateZ(135deg);
193     }
194     50% {
195         -webkit-transform: rotatey(225deg) rotateZ(135deg);
196     }
197     66% {
198         -webkit-transform: rotatey(135deg) rotateX(135deg);
199     }
200     85% {
201         -webkit-transform: rotatex(135deg);
202     }
203 }
204
205
206 /*整体旋转方式*/
207
208 @keyframes animation {
209     from,
210     to {}
211     16% {
212         transform: rotatey(-90deg);
213     }
214     33% {
215         transform: rotatey(-90deg) rotateZ(135deg);
216     }
217     50% {
218         transform: rotatey(225deg) rotateZ(135deg);
219     }
220     66% {
221         transform: rotatey(135deg) rotateX(135deg);
222     }
223     85% {
224         transform: rotatey(135deg);
225     }
226 }

    

时间: 2024-08-01 10:44:41

3D魔方的思路与实现的相关文章

3D魔方场景

3D魔方场景实例 效果: 源码: ----------------------------------------- <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>3D魔方场景</title> <meta name="K

用css3画3d动画的思路

最近试了下CSS3动画,现在通过一个例子简单讲一讲我用css3画3d视图的思路. 任何时候敲代码前都要想清楚我要干什么,我要敲一个简单的3d旋转画册. 一. 1.首先用一个总容器包含所有的图片,设定属性perspective: 1000px,表示他距离我们屏幕1000px的距离,从二维变成了三维 2.要使用3d旋转,必先要有一个参考系使所有图片围绕他旋转,在总容器里面加一个div,添加属性transform-style: preserve-3d就可以变成参考系. 3.然后在这个div里设置动画效

DirectX11--实现一个3D魔方(3)

前言 (2019/1/9 09:23)上一章我们主要讲述了魔方的旋转,这个旋转真是有毒啊,搞完这个部分搭键鼠操作不到半天应该就可以搭完了吧... (2019/1/9 21:25)啊,真香 有人发这张图片问我写魔方的目的是不是这个...噗 现在光是键鼠相关的代码也搭了400行左右..其中键盘相关的调用真的是毫无技术可言,重点实现基本上都被鼠标给耽搁了. 章节 实现一个3D魔方(1) 实现一个3D魔方(2) 实现一个3D魔方(3) Github项目--魔方 对了,在此之前你可以去了解一下我这里所使用

用纯原生态javascript+css3 写的3D魔方动画旋扭特效

一直从事于后端编程工作,工作中也经常接触和使用一些前段技术,但大多数还是用于操作和控制数据与客户端交互工作.随着互联网技术的发展以及硬件性能的不断提升,人们对于交互式体验已变得越来越重视,进而前端技术已经越来越突显出它的重要性,特别是一些炫酷的特效,精美的UI设计,都使人眼前一亮,顿时觉得网站平台都高大上不少,很博人们眼球,给人们以很好的视觉冲击,特别是现在的css3,HTML5技术的更新,使得以更小的代价就可以轻松实现这些效果,故此,俺也顿时膜拜起前端技术,悠然起了兴趣,跃跃欲试,随机利用cs

CSS3中的3D动画实现(钟摆、魔方)--实现代码

CSS3中的3D动画实现(钟摆.魔方) CSS3的2D变形----传统的transform变形效果 transform : translate.scale.rotate.skew- translate:平移.scale:缩放.rotate:旋转.skew:倾斜 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tran

智能楼宇智慧建筑 3D 可视化管理平台设计思路以及展示效果图-小水智能

智能楼宇.智慧建筑3d可视化设计思路 需求分析智能建筑是将传统建筑技术同先进的信息技术(计算机技术.自动化技术.网络与通讯技术) 相结合,建筑一种舒适.高效的节能环境,为人们提高生产力创造条件,智能建筑是综合经济实力 的象征. 智能建筑的基础有三部分组成:办公自动化系统(OA),通讯自动化系统(CA),楼宇设备自动化系统(BA). 针对智能化系统的应用需求,注重从几个方面进行考虑和阐述. A:系统的需求定位分析:为创新园大楼智能化系统的定位.设计提供多角度的分析,力求项目定位与应用贴近实际. B

魔方还原视频教程

01魔方的基础架构 02魔方还原思路 03魔方第一层还原01十字架 03魔方第一层还原02四角 04魔方第二层还原教程 05魔方第三层还原01完成顶面 05魔方第三层还原02最后一层 06魔方还原完整示范 原文地址:https://www.cnblogs.com/viplued/p/9257945.html

JAVA上百实例源码以及开源项目

简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬.向往!此时此景,笔者只专注Android.Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能.编辑音乐软件的朋友,这款实例会对你有所帮助.Calendar万年历 1个目标文件EJ

曾经面试踩过的坑,都在这里了~

前言 前段时间面试(包括阿里巴巴的电话面试),遇到过一些面试题,且面试中出现机率较高的提问/笔试,有些答的不是很好挂掉了,今天终于有时间整理出来分享给大家,希望对大家面试有所帮助,都能轻松拿offer. !> 主要分三部分:html.css.js:react/vue等都归类于js,内容来源于面试过程中遇到的.在复习过程中看到认为值得加深巩固.群友交流分享的:如有理解的错误或不足之处,欢迎留言纠错.斧正,这里是@IT·平头哥联盟,我是首席填坑官?苏南(South·Su) ^_^- HTML 1.什