Я хотел бы написать общую анимацию css для перемещения div вправо и влево, касаясь краев контейнера ... для простого применения к любому div, о котором я ничего не знаю, кроме того, что он имеет абсолютное позиционирование.
Проблема в том, что просто оставив 0%, а затем 100% ... на несколько мгновений исчезнет, я должен использовать что-то вроде calc (100% -width) .. Установка ключевого кадра на 50% - это почти то, что я хотел бы, но есть замедление, и это не очень плавно и линейно ... Любые предложения, учитывая, что я не знаю, как долго будет мой div, и я не работаю с js / jquery, а только с css ..?
https://codepen.io/alemarch/pen/vrvgMo
@keyframes destraSinistra {
0% {
left: 0%;
color: black;
right: unset;
}
50% {
left:50%;
right: 50%;
}
100% {
left:unset;
right: 0px;
color: green;
}
}
#div1 {
position: absolute;
border: solid 1px lightgray;
width: 100px;
top: 200px;
height: 30px;
background-color: lightgreen;
animation-name: destraSinistra;
animation-duration: 4s;
animation-iteration-count: infinite;
animation-timing-function: linear;
animation-direction: alternate-reverse
}
Он упомянул, что может случиться так, что он не знает ширины элемента. Кроме того, я использовал cacl() и он тормозит в конце.






Используйте transform в сочетании с left или right, чтобы избежать добавления какого-либо фиксированного значения:
@keyframes destraSinistra {
0% {
left: 0;
}
100% {
left: 100%;
transform:translateX(-100%);
}
}
#div1 {
position: absolute;
border: solid 1px lightgray;
width: 100px;
height: 30px;
background-color: lightgreen;
animation: destraSinistra 1s linear infinite alternate
}<div id = "div1"></div>Могу я спросить, как атрибут transform устраняет проблему прокрутки при достижении края? Если я удалю его, он выйдет за пределы области просмотра и создаст скроллер.
@ToanLu transfom на -100% будет перемещать элемент в противоположную сторону на 100% ширины ТОЛЬКО визуально, поэтому ссылка left будет справа от элемента. это как будто мы переместили координату элемента
Спасибо за объяснение, теперь я понял. Очень простое и элегантное решение.
Почему бы вам не использовать
calc()?