CSSで回転する地球効果を作成しています。 CSSでグローブを作成しました:
body {
background-color: #111;
}
#earth {
width: 300px;
height: 300px;
background: url(http://www.noirextreme.com/digital/Earth-Color4096.jpg);
border-radius: 50%;
background-size: 610px;
box-shadow: inset 8px 36px 80px 36px rgb(0, 0, 0),
inset -6px 0 12px 4px rgba(255, 255, 255, 0.3);
animation-name: rotate;
animation-duration: 12s;
animation-iteration-count: infinite;
animation-timing-function: linear;
-webkit-animation-name: rotate;
-webkit-animation-duration: 12s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
}
@keyframes rotate {
from { background-position: 0px 0px; }
to { background-position: 500px 0px; }
}
@-webkit-keyframes rotate {
from { background-position: 0px 0px; }
to { background-position: 500px 0px; }
}
<div id="earth"></div>
ただし、停止してから画像がリセットされて再び起動します。けいれんせずにスムーズに移動したいです。ありがとうございます!
background-position: 500px 0px;
500pxを610pxに置き換えます。これはbackground-size
body {
background-color: #111;
}
#earth {
width: 300px;
height: 300px;
background: url(http://www.noirextreme.com/digital/Earth-Color4096.jpg);
border-radius: 50%;
background-size: 610px;
box-shadow: inset 8px 36px 80px 36px rgb(0, 0, 0), inset -6px 0 12px 4px rgba(255, 255, 255, 0.3);
animation-name: rotate;
animation-duration: 12s;
animation-iteration-count: infinite;
animation-timing-function: linear;
-webkit-animation-name: rotate;
-webkit-animation-duration: 12s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
}
@keyframes rotate {
from {
background-position: 0px 0px;
}
to {
background-position: 610px 0px;
}
}
@-webkit-keyframes rotate {
from {
background-position: 0px 0px;
}
to {
background-position: 610px 0px;
}
}
<div id="earth"></div>
コードの問題は、画像サイズ(610px)とアニメーションのオフセット(500px)が異なり、アニメーションのリセット時にホップ(110px)することです。
ピクセル単位でアニメーションオフセットを定義する代わりに使用したい簡単なトリック:パーセンテージで定義。
610pxを移動するように指示する代わりに、100%を移動するように指示します。
100%の方法の利点は、画像を変更する場合、CSSのすべてのハードコードされた値を変更する必要がないことです。これはIMOが推奨される方法です。
注意:0から-100%に移動するとホップが作成されるようです。正しい方向に回転するには回転が必要なので、100%で開始して0に移動しようとしましたが、この時点で画像はもう存在しません。
@keyframes rotate {
from { background-position: 100% 0; }
to { background-position: 0 0; }
}
以下がスニペットですが、ピクセル値ではなく100%です。
*注:アニメーションは引き続きホップしますが、画像が存在しないため、新しいコードをテストできません。ロジックは機能しますが、この実装は機能していないようです。次のコードは、TSのコードを使用したデモのみです。
body {
background-color: #111;
}
#earth {
width: 300px;
height: 300px;
background: url(http://www.noirextreme.com/digital/Earth-Color4096.jpg);
border-radius: 50%;
background-size: 610px;
box-shadow: inset 8px 36px 80px 36px rgb(0, 0, 0), inset -6px 0 12px 4px rgba(255, 255, 255, 0.3);
animation-name: rotate;
animation-duration: 12s;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
@keyframes rotate {
from { background-position: 100% 0; }
to { background-position: 0 0; }
}
<div id="earth"></div>