在CSS中旋转地球仪

时间:2015-01-05 14:30:47

标签: html css html5 css3 css-animations

我在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>
&#13;
&#13;
&#13;

但它停止然后图像重置并重新开始。我想让它顺利移动而不会抽搐。非常感谢你!

2 个答案:

答案 0 :(得分:91)

background-position: 500px 0px;中将610px替换为500px,即background-size

&#13;
&#13;
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;
  }
}
&#13;
<div id="earth"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:46)

您的代码中的问题是图像大小( 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>