Вращающийся глобус в 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>но он останавливается, а затем изображение сбрасывается и начинается снова. Я хочу, чтобы он двигался плавно, без рывков. Большое спасибо!
2 ответов:
на
background-position: 500px 0px;заменить 500px на 610px, который являетсяbackground-sizebody { 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>
проблема в вашем коде заключается в том, что imagesize (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% вместо pixelvalue:
* Пожалуйста, обратите внимание: анимация все еще прыгал, но я не могу проверить новый код, потому что изображение больше не существует. Логика работает, но эта реализация, кажется, нет. Следующий код - это только демонстрация с кодом 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>
Comments