CSS3实现魔方动画

摘要:
translateZ()CSS函数沿着z轴在三维空间中重新定位元素,即,从观察者的角度而言更近或者更远。这个变换是由一个元素定义的,它指定元素向内或向外移动的距离。perspectiveCSS属性决定在z=0平面和用户之间的距离以便使所述3D定位的元素一些透视效果。z˃0的每个3D元素变大;,每个z˂0的三维元素则变小。说明:  d代表perspective设置的用户目视距屏幕的距离;  z代表translateZ设置的元素移动距离;源码来了:1˂!

本文将借助css3实现魔方动画效果,设计思路如下:

  1.   HTML方面采用六个div容器形成六个立方面;
  2.   CSS方面采用transform-style:preserve-3d;形成三维场景;transform:rotateX(-90deg) translateZ(150px);实现立方面旋转组成立方体;animation: rotate 10s linear infinite alternate;动画效果添加;

效果图:

CSS3实现魔方动画第1张

HTML内容:

1  <div class="box">
2             <div class="before">
3                 <ul>
4                     <li>1</li>
5                     <li>2</li>
6                     <li>3</li>
7                     <li>4</li>
8                     <li>5</li>
9                     <li>6</li>
10                     <li>7</li>
11                     <li>8</li>
12                     <li>9</li>
13                 </ul>
14             </div>
15             <div class="back"></div>
16 </div>

设置before、back等六面分别作为立面的前后左右上下各面;

CSS核心:

1 @keyframes rotate {
2 0% {
3 transform:rotateY(0deg) rotateX(0deg) rotateZ(0deg);
4             }
5 
6 20% {
7 transform:rotateY(30deg) rotateX(40deg) rotateZ(20deg);
8             }
9 
10 40% {
11 transform:rotateY(-60deg) rotateX(-40deg) rotateZ(-20deg);
12             }
13 
14 60% {
15 transform:rotateY(145deg) rotateX(80deg) rotateZ(10deg);
16             }
17 
18 80% {
19 transform:rotateY(90deg) rotateX(60deg) rotateZ(-20deg);
20             }
21 
22 100% {
23 transform:rotateY(135deg) rotateX(-45deg) rotateZ(30deg);
24             }
25 }
26 
27 .top {
28 background-color:transparent;
29 transform:rotateX(90deg) translateZ(150px);
30          }
31 
32 .box {
33 width:300px;
34 height:300px;
35 margin:150px auto;
36 position:relative;
37 font-size:50px;
38               /*perspective: 1000px;*/
39 transform-style:preserve-3d;
40 
41 animation:rotate 10s linear infinite alternate;
42          }
  1. 动画rotate设置不同时间段的立方体旋转角度;
  2. box容器指定了三维场景以及动画效果;
  3. top 则将平面旋转(rotateX)、设置距离屏幕距离(translateZ)

如何理解3D场景下perspective与translateZ的关系

translateZ()CSS函数沿着z轴在三维空间中重新定位元素,即,从观察者的角度而言更近或者更远。这个变换是由一个<length>元素定义的,它指定元素向内或向外移动的距离。

perspectiveCSS属性决定在z = 0平面和用户之间的距离以便使所述3D定位的元素一些透视效果。z> 0的每个3D元素变大;,每个z <0的三维元素则变小。效果的强度由此属性的值决定。

说明:

  1.   d代表perspective设置的用户目视距屏幕的距离;
  2.   z代表translateZ设置的元素移动距离;

translateZ perspective说明图

源码来了:

1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4     <meta charset="UTF-8">
5     <title></title>
6     <style>
7 
8 ul {
9 list-style:none;
10 margin:0;
11 padding:0;
12          }
13 .box {
14 width:300px;
15 height:300px;
16 margin:150px auto;
17 position:relative;
18 font-size:50px;
19               /*perspective: 1000px;*/
20 transform-style:preserve-3d;
21 
22 animation:rotate 10s linear infinite alternate;
23          }
24         
25 .box>div {
26 width:300px;
27 height:300px;
28 position:absolute;
29          }
30 .right {
31 background-color:transparent;
32 transform:rotateY(90deg) translateZ(150px);
33          }
34 .left {
35 background-color:transparent;
36 transform:rotateY(-90deg) translateZ(150px);
37          }
38 
39 .top {
40 background-color:transparent;
41 transform:rotateX(90deg) translateZ(150px);
42          }
43 
44 .bottom {
45 background-color:transparent;
46 transform:rotateX(-90deg) translateZ(150px);
47         }
48 
49 .before {
50 background-color:transparent;
51 transform:translateZ(150px);
52         }
53 
54 .back {
55 background-color:transparent;
56 transform:translateZ(-150px);
57         }
58 
59 li {
60 float:left;
61 width:90px;
62 height:90px;
63 border-radius:20px;
64 margin:5px;
65 text-align:center;
66 line-height:90px;
67         }
68 
69 .before li {
70 background-color:green;
71         }
72 .back li {
73 background-color:chartreuse;
74          }
75 
76 .top li {
77 background-color:purple;
78          }
79 
80 .bottom li {
81 background-color:cornflowerblue;
82          }
83 
84 .left li {
85 background-color:darkorange;
86          }
87 
88 .right li {
89 background-color:#37ffc7;
90          }
91 
92 .box:hover {
93 animation-play-state:paused;
94         }
95         
96 @keyframes rotate {
97 0% {
98 transform:rotateY(0deg) rotateX(0deg) rotateZ(0deg);
99             }
100 
101 20% {
102 transform:rotateY(30deg) rotateX(40deg) rotateZ(20deg);
103             }
104 
105 40% {
106 transform:rotateY(-60deg) rotateX(-40deg) rotateZ(-20deg);
107             }
108 
109 60% {
110 transform:rotateY(145deg) rotateX(80deg) rotateZ(10deg);
111             }
112 
113 80% {
114 transform:rotateY(90deg) rotateX(60deg) rotateZ(-20deg);
115             }
116 
117 100% {
118 transform:rotateY(135deg) rotateX(-45deg) rotateZ(30deg);
119             }
120 }
121     </style>
122 </head>
123 <body>
124         <div class="box">
125             <div class="before">
126                 <ul>
127                     <li>1</li>
128                     <li>2</li>
129                     <li>3</li>
130                     <li>4</li>
131                     <li>5</li>
132                     <li>6</li>
133                     <li>7</li>
134                     <li>8</li>
135                     <li>9</li>
136                 </ul>
137             </div>
138             <div class="back">
139                 <ul>
140                     <li>1</li>
141                     <li>2</li>
142                     <li>3</li>
143                     <li>4</li>
144                     <li>5</li>
145                     <li>6</li>
146                     <li>7</li>
147                     <li>8</li>
148                     <li>9</li>
149                 </ul>
150             </div>
151             <div class="top">
152                 <ul>
153                     <li>1</li>
154                     <li>2</li>
155                     <li>3</li>
156                     <li>4</li>
157                     <li>5</li>
158                     <li>6</li>
159                     <li>7</li>
160                     <li>8</li>
161                     <li>9</li>
162                 </ul>
163             </div>
164             <div class="bottom">
165                 <ul>
166                     <li>1</li>
167                     <li>2</li>
168                     <li>3</li>
169                     <li>4</li>
170                     <li>5</li>
171                     <li>6</li>
172                     <li>7</li>
173                     <li>8</li>
174                     <li>9</li>
175                 </ul>
176             </div>
177             <div class="left">
178                 <ul>
179                     <li>1</li>
180                     <li>2</li>
181                     <li>3</li>
182                     <li>4</li>
183                     <li>5</li>
184                     <li>6</li>
185                     <li>7</li>
186                     <li>8</li>
187                     <li>9</li>
188                 </ul>
189             </div>
190             <div class="right">
191                 <ul>
192                     <li>1</li>
193                     <li>2</li>
194                     <li>3</li>
195                     <li>4</li>
196                     <li>5</li>
197                     <li>6</li>
198                     <li>7</li>
199                     <li>8</li>
200                     <li>9</li>
201                 </ul>
202             </div>
203         </div>
204 </body>
205 </html>

免责声明:文章转载自《CSS3实现魔方动画》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python-PyCharm几个设置小技巧CodeSmith Generator代码生成器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

纯CSS3魔方的制作

  <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> *{ margin:0; padding:0; } html,bo...

TagHelper使用

谈谈ASP.NET CORE 中Razor Page 的TagHelper【标签助手】常见类型及其详细使用 David Hongyu 2020-03-15 15:42:39 748 收藏 4 原力计划分类专栏: ASP.NET CORE MVC 文章标签: asp.net版权 ASP.NET CORE MVC专栏收录该内容56 篇文章1 订阅订阅专栏一,T...

前端全链路优化总结

减少http请求 http请求每次都需要建立通信链路,进行数据传输,在服务端每个http都需要启动独立的线程去处理,这些开销很昂贵,减少请求的数量可有效的提高访问性能。例如: 合并公用的小css/js块 雪碧图、字体图标、base64图标 使用http2.0及其以上版本 使用浏览器缓存 通过设置http头中的cache-control和expire...

CSS网页排版

自印刷出版物诞生以来,排版就一直是平面设计的基础。 同样,排版在网页设计中也扮演着重要角色。 1.CSS的基本排版技术 1.1 文本颜色 对应网页而言,文本颜色也许是最基本的样式之一。 默认情况下,浏览器把绝大部分文本渲染为黑色。 p { color: #3b4348; } 1.2 字体族 字体族(font-family)属性的值是一个备选字体的...

【使用 DOM】为DOM元素设置样式

1. 使用样式表 可以通过document.styleSheets属性访问文档中可用的CSS样式表,它会返回一组对象集合,这些对象代表了与文档管理的各个样式表。 每个样式表 都由一个CSSStyleSheet 对象代表,它提供了一组属性和方法来操作文档里的样式。 1.1 获得样式表的基本信息 第一步是获得定义在文档中的样式表的一些基本信息。 <!...

巧用伪元素绘制带边的三角形--CSS3

<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <meta name="description"content=""> <meta name="author"...