ホームページ > 記事 > ウェブフロントエンド > CSS3 で 3D アニメーションを作成する方法 - サイコロの回転を例にして、CSS3 アニメーションのプロパティをdetail_html/css_WEB-ITnose で説明します。
まず、css3 で実現される 2 つの素晴らしい 3D アニメーション効果を見てみましょう
1
2
3
4
5
6
あなたはしませんでした読み方が間違っています。このクールな効果はすべて css3 を使用して実現されています。
以下は、アニメーションの実装に必要ないくつかの CSS3 プロパティです。
1. 視点: 3D シーンを実現するために使用されます
3D エフェクトを作成する最初のステップは、3D シーンを作成すること、つまり、エフェクトを実現するモジュールを要求することです。ここでは、perspective属性とperspective-origin属性を使用します。
トランジションは、アニメーションが硬くなりすぎないようにトランジション効果を実現するために使用されます。これは複合プロパティであり、次のプロパティがあります:
transform は、さまざまな変換効果を実現するために使用される複合属性でもあり、次の属性があります:
簡単なサイコロの書き方は次のとおりです
1 3D シーンを作成します
<!DOCTYPE html><html><head> <meta charset="UTF-8" /> <title>实现一个3D骰子</title> <style> *{ padding: 0; margin: 0; } .block{ border: 1px solid #000; padding: 100px 0; -webkit-perspective: 800px; -moz-perspective: 800px; perspective: 800px; -webkit-perspective-orign: 50% 50%; -moz-perspective-orign: 50% 50%; perspective-orign: 50% 50%; } .dice{ width: 300px; height: 300px; margin: 20px auto; position: relative; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; transform-style: preserve-3d; } <style></head><body> <div class="block"> <div class="dice"> </div> </div></body></html>
2. シーンが設定されたので、6 つの同じ div のサイコロの 6 つの面を書きましょう
<div class="block"> <div class="dice"> <div class="page" id="page1">1</div> <div class="page" id="page2">2</div> <div class="page" id="page3">3</div> <div class="page" id="page4">4</div> <div class="page" id="page5">5</div> <div class="page" id="page6">6</div> </div></div>
共通のスタイルを定義します。
りー
これ以下に示すように、6 つの重複した div を持つブロックが表示されます。
以下は、立方体構造を実現するための重要なステップです。
3. サイコロの 6 つの面の位置を定義します
.page{ width: 200px; height: 200px; background: rgba(0,0,0,0.3); position: absolute; font-size: 200px; color: #fff; line-height: 200px; text-align: center; border: 1px solid red;}
ここでは、transform の 2 つのプロパティ、回転と原点を使用します。前者は回転角度を定義し、後者は軸を定義します。回転。
按照上述代码来写,我们现在已经可以看见一个正方体了,如图:
现在已经实现了一大部分代码的书写了,我们已经写出了一个静态的正方体,接下来让他实现一个转起来的动画就可以了。
下面是动画的部分,实现让这个正方体以随机的角度转动起来。
css3里面另一强大的属性就是动画的实现,省去了很多的js代码的计算一级各种动画效果的考虑,拥有css3神器,就可以写出各种炫酷的效果来,赶紧来看看怎么实现。
上面我们讲过了他过transform的rotate属性来实现旋转,我们通过对每个面的旋转实现了一个正方体的样子,这里我们把正方体作为一个整体,来实现一整个正方体的旋转。
css3 里面写动画分为两步,第一步就是来定义一个动画。通过 @keyframes 来实现。
语法如下:
@keyframes animationname {keyframes-selector {css-styles;}}
我们这里歹意一个名为 random-rotate 的动画,通过transform的rotate属性来实现旋转。 代码如下:
@-webkit-keyframes random-rotate{ 0%{ -webkit-transform:rotateX(0deg) rotateY(0deg); -moz-transform:rotateX(0deg) rotateY(0deg); -o-transform:rotateX(0deg) rotateY(0deg); transform:rotateX(0deg) rotateY(0deg); } 100%{ -webkit-transform:rotateX(360deg) rotateY(360deg); -moz-transform:rotateX(360deg) rotateY(360deg); -o-transform:rotateX(360deg) rotateY(360deg); transform:rotateX(360deg) rotateY(360deg); }}@-moz-keyframes random-rotate{ 0%{ -webkit-transform:rotateX(0deg) rotateY(0deg); -moz-transform:rotateX(0deg) rotateY(0deg); -o-transform:rotateX(0deg) rotateY(0deg); transform:rotateX(0deg) rotateY(0deg); } 100%{ -webkit-transform:rotateX(360deg) rotateY(360deg); -moz-transform:rotateX(360deg) rotateY(360deg); -o-transform:rotateX(360deg) rotateY(360deg); transform:rotateX(360deg) rotateY(360deg); }}@-o-keyframes random-rotate{ 0%{ -webkit-transform:rotateX(0deg) rotateY(0deg); -moz-transform:rotateX(0deg) rotateY(0deg); -o-transform:rotateX(0deg) rotateY(0deg); transform:rotateX(0deg) rotateY(0deg); } 100%{ -webkit-transform:rotateX(360deg) rotateY(360deg); -moz-transform:rotateX(360deg) rotateY(360deg); -o-transform:rotateX(360deg) rotateY(360deg); transform:rotateX(360deg) rotateY(360deg); }}@keyframes random-rotate{ 0%{ -webkit-transform:rotateX(0deg) rotateY(0deg); -moz-transform:rotateX(0deg) rotateY(0deg); -o-transform:rotateX(0deg) rotateY(0deg); transform:rotateX(0deg) rotateY(0deg); } 100%{ -webkit-transform:rotateX(360deg) rotateY(360deg); -moz-transform:rotateX(360deg) rotateY(360deg); -o-transform:rotateX(360deg) rotateY(360deg); transform:rotateX(360deg) rotateY(360deg); }}
这里我们要这个动画x、y轴分别从0度 转到 360度。
3、动画的实现
css3 里面的animation 配合 @keyframe 来实现。 animation 是一个复合属性,同样我们来看下这个复合属性的各个属性是如何定义的。
下面来写下代码,我们这里让这个正方体无限转动,每次动画的时间为5s,速度为匀速,动画不延时。同时我们给动画添加一个过度的效果,使动画看起来更平滑。
外层div样式改为如下:
.dice{ width: 300px; height: 300px; margin: 20px auto; position: relative; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-animation: random-rotate 5s linear 0s infinite; -moz-animation: random-rotate 5s linear 0s infinite; -ms-animation: random-rotate 5s linear 0s infinite; -o-animation: random-rotate 5s linear 0s infinite; animation: random-rotate 5s linear 0s infinite; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; -ms-transition: all 1s ease; -o-transition: all 1s ease; transition: all 1s ease;}
至此,我们已经完整的实现了一个正方体(类似于一个骰子)的旋转,有几点需要注意的提示如下: