在 CSS 中旋转地球

新手上路,请多包涵

我正在 CSS 中创建一个旋转的地球效果。我在 CSS 中创建了地球:

 body {
  background-color: #111;
}

#earth {
    width: 300px;
    height: 300px;
    background: url(https://web.archive.org/web/20150807125159if_/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>

但它停止,然后图像重置并重新开始。我希望它平稳移动而不会抽搐。非常感谢你!

原文由 user4420272 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

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

 body {
  background-color: #111;
}
#earth {
  width: 300px;
  height: 300px;
  background: url(https://web.archive.org/web/20150807125159if_/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>

原文由 The Pragmatick 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 body {
  background-color: #111;
}
#earth {
  width: 300px;
  height: 300px;
  background: url(https://web.archive.org/web/20150807125159if_/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>

原文由 Martijn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏