Вращающийся глобус в CSS
Я создаю вращающийся эффект земли в 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>
Ответы
Ответ 1
В 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>
Ответ 2
Проблема в вашем коде заключается в том, что размер изображения (610px) и смещение анимации ( 500 пикселей) различаются, а в reset анимации он перескакивает (110 пикселей).
Простой трюк, который мне нравится использовать вместо определения смещения анимации в пикселе: Определить его в процентах.
Вместо того, чтобы сообщать ему переместить 610px, я говорю, чтобы он переместил 100%.
Бонус 100% -го метода заключается в том, что если вы уменьшаете изображение, вам не нужно изменять все жестко заданные значения в вашем CSS, что, ИМО, должно быть предпочтительным методом.
Обратите внимание: кажется, что переход от 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>