CSS2 CSSでアニメーション Time
動く正方形
ヤシ21
y
s
秒針
長針
短針
animation-name: abc;
animation-duration: 60s;(ドレーション)期間

animation

動きがあると表減が広がります。

animation-name: abc;

abcという名前の動きをなぞることができます。

@keyframes abc{...}

abcの内容を書く場所です。{left: 0vw;top: 0vw;} のように座標を列記することができます。

animation-duration: 10s;

10秒間で動かせます。

実行結果

正方形が動きます。

用意するのはdivタグ1つです。
10vwX10vwの大きさと色を付けます。可視度を半分にしました。
強調された3行でアニメーションを行います。3行目は繰り返しの指示です。

プログラム

HTML
<div class="div">四角形</div>

/*CSS*/ .div{ width: 10vw;height:10vw; position:relative; left: 0vw;top: 0vw; background-color: #f88; color: white;opacity: 0.5; animation-name: abc; animation-duration: 10s; animation-iteration-count: infinite; } @keyframes abc{ 0%{left: 0vw;top: 0vw;} 20%{left: 10vw;top: 0vw;} 40%{left: 10vw;top: 10vw;} 60%{left: 20vw;top: 10vw;} 80%{left: 20vw;top: 20vw;} 100%{left: 30vw;top: 30vw;} }

備考

animation-iteration-count: infinite;

iteration(イテレーション)反復
infinite(インフィニト)"無数の"
@keyframes 名前{...}の中に動きの内容を書きます。

name変更

実行結果

3次元アニメ-ション

transform-style: preserve-3d;

transform-style:

変形させる...形・方法

preserve-3d;プレサーブ

要素の子要素を 3D 空間に配置します。

flat

要素の子要素を要素自身の平面上に配置します。

animation:

動画・アニメーション

animation:aa 10s infinite

aaの動きどを10秒間 何回も繰り返します。

実行結果

cubeContainerキューブコンテナの中のcubeキューブに cubeSurfaceサーフェイス(面)を張り付けました。


A
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0

5vwX5vwのdivと比較してください。

離れたところから見ているので,軸を含めて少し小さくなります。

プログラム

HTML
<div class="cubeContainer">
  <div class="cube">
    <div class = "cubeSurface cubeSurface0">0</div>
  </div>
</div>

/*CSS*/ .cubeContainer{ width: 5vw;height:5vw;margin:0vw; perspective:26vw;} .cube { width: 5vw;height: 5vw;margin:0vw; transform-style: preserve-3d; animation:aa 15s infinite; } .cube .cubeSurface{/*.cubeの中の.surface*/ position: absolute; box-sizing: border-box; width:5vw;height:5vw;margin:0vw; border:0.1vw solid #234; text-align:center; font-size:3vw; } .cubeSurface0{background:#ff0;}

考察

cubeと言ってもただの四角です。 cubeSurface0がcubeを実体化させたものです。
.cube .cubeSurface{...}で形を作っています。 色と場所は各surfaceで決めます。 transform-style:でpreserve-3d;として3Dの形を作ります。
animation:で動きの記録名"aa"と時間,回数を指定します。

動きの記録

@keyframes 名前

@keyframesは名前を付けて動きを記録する場所です。

解説

0%,はじめは角度0degから始めます。
30%まではY軸(縦線)の周りを360度回転します。
60%まではX軸(横線)の周りを360度回転します。
90%まではZ軸(画面から手前に向かってくる線)の周りを360度回転します。
100%まで最後の10%で全ての軸周りを360度から0度に戻します。忙しい回転です。

プログラム

@keyframes aa{
0%{transform:rotateX(0deg)
  rotateY(0deg)rotateZ(0deg);}
30%{transform:rotateX(0deg)
  rotateY(360deg)rotateZ(0deg);}
60%{transform:rotateX(360deg)
  rotateY(360deg)rotateZ(0deg);}
90%{transform:rotateX(360deg)
  rotateY(360deg)rotateZ(360deg);}
100%{transform:rotateX(0deg)
  rotateY(0deg)rotateZ(0deg);}
}
transform:rotateX(〇deg)
X軸周りに〇度,回転させます。
transform:rotateY(〇deg)
Y軸周りに〇度,回転させます。
transform:rotateZ(〇deg)
Z軸周りに〇度,回転させます。

説明

2D用,3D用 共用

2D用も3D用も共通に使うことができる場合があります。
animation:abc 30s infinite;を使った場合 animation-name:で名前を変更することはできません。
#pause3:checked ~ label .cube{
  animation:abb 10s infinite;}    
  

一時停止

アニメーションを途中で止めます。

animation-play-state:

paused;

止まります。

running;

動きます。

実行結果

z軸方向に2.5vw移動した図形を動かします。

アニメーションを途中で止めるボタンです。

perspective:は見る場所の距離です。

プログラム

HTML
<input type="checkbox" id="pause4" class="stop">
<label for="pause4" class="pause">pause
  <div class="cubeContainer">
  <div class="cube">
    <div class = "cubeSurface cubeSurface1">1</div>
  </div>
</div>
</div>
</label>

CSS .cubeContainer0{ width: 5vw;height:5vw;margin:0vw; perspective:26vw; } .cube{/*動かすもの*/ width:5vw;height:5vw;margin:0vw; transform-style: preserve-3d; animation:aa 15s infinite; } .cube .cubeSurface{/*.cubeの中の.surface*/ position: absolute; box-sizing: border-box; width:5vw;height:5vw;margin:0vw; border:0.1vw solid #143; text-align:center; font-size:3vw; } /*z軸方向に2.5vw移動した図形*/ .cubeSurface1 {background:#cc0; transform:translateZ(2.5vw);} #pause4:checked ~ label .cube{ animation-play-state: paused;}

備考

perspective-origin:

視点の位置です。


100% 100%でも同じです。

視点から見た立体

視点が近すぎたり端によりすぎると. 空間を回転するのではなく,見え方のまま回転します。

実行結果

1
2
3
4
5
6
立方体の回転
0
1
translateZ(2.5vw)
0
2
rotateX(-90deg)
0
3
rotateX(90deg)
0
4
rotateY(-90deg)
0
5
rotateY(90deg)
0
6
rotateX(180deg)
1
2
3
4
5
6
cubeSurface1からcubeSurface6までそれぞれ回転させた後 Z軸方向に2.5vw移動します。
cubeSurface1は回転させずに移動のみです。 cubeSurface3だけZ軸方向に3.9vw移動してみました。 張り付けるときのz軸方向の移動がわかります。
1
2
3
4
5
6

プログラム

HTML
<div class = "cubeContainer">
  <div class = "cube">
    <div class = "cubeSurface cubeSurface1">1</div>
    <div class = "cubeSurface cubeSurface2">2</div>
    <div class = "cubeSurface cubeSurface3">3</div>
    <div class = "cubeSurface cubeSurface4">4</div>
    <div class = "cubeSurface cubeSurface5">5</div>
    <div class = "cubeSurface cubeSurface6">6</div>
  </div>
</div>

/*CSS*/ .cubeContainer { width: 5vw;height:5vw;margin:0vw; perspective:6vw; } .cube { width: 5vw;height: 5vw;margin:0vw; transform-style: preserve-3d; animation:aa 5s infinite } .cube .cubeSurface{ position: absolute; box-sizing: border-box; width:5vw;height:5vw;margin:0vw; border:0.1vw solid #234; text-align:center; font-size:3vw; } .cubeSurface1 {background:#884;transform: rotateY(0deg)translateZ(2.5vw);} .cubeSurface2 {background:#88a;transform: rotateX(-90deg)translateZ(2.5vw);} .cubeSurface3 {background:#488;transform: rotateY(90deg)translateZ(3.9vw);} .cubeSurface4 {background:#a88;transform: rotateY(-90deg)translateZ(2.5vw);} .cubeSurface5 {background:#8a8;transform: rotateX(90deg)translateZ(2.5vw);} .cubeSurface6 {background:#848;transform: rotateY(180deg)translateZ(2.5vw);} @keyframes aa{ 0%{transform:rotateX(0deg) rotateY(0deg)rotateZ(0deg);} 30%{transform:rotateX(0deg) rotateY(360deg)rotateZ(0deg);} 60%{transform:rotateX(360deg) rotateY(360deg)rotateZ(0deg);} 90%{transform:rotateX(360deg) rotateY(360deg)rotateZ(360deg);} 100%{transform:rotateX(0deg) rotateY(0deg)rotateZ(0deg);} }

考察

ものさし挿入

cubeSurface3だけにしてZ軸方向に3.9vw移動してみました。 xy軸を付けてみました。cubeSurface3bに張り付いて軸も動きます。
0
3
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
.cubeSurface3 { background:#488; transform: rotateY(90deg) translateZ(2.5vw);} cubeの中でY軸を中心にして90deg回転していることがわかります。 その時x軸,y軸も一緒に動きます。
z軸は表grんできていませんが,xy軸から想像できるように,cubeSurface0 の中心から離れる方向だと推測できます。
2,5,6はx軸を中心にして回転させているので, 縦回りの時に数字が正しく見えます。 3,4は横回りの時正しく見えます。6は倒立します。