Движение влево-вправо .. css только очень общий

Я хотел бы написать общую анимацию 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 
}

Почему бы вам не использовать calc()?

Jacques Marais 29.06.2018 12:28

Он упомянул, что может случиться так, что он не знает ширины элемента. Кроме того, я использовал cacl() и он тормозит в конце.

Toan Lu 29.06.2018 13:03
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
6
2
204
1

Ответы 1

Используйте 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 устраняет проблему прокрутки при достижении края? Если я удалю его, он выйдет за пределы области просмотра и создаст скроллер.

Toan Lu 29.06.2018 12:55

@ToanLu transfom на -100% будет перемещать элемент в противоположную сторону на 100% ширины ТОЛЬКО визуально, поэтому ссылка left будет справа от элемента. это как будто мы переместили координату элемента

Temani Afif 29.06.2018 12:57

Спасибо за объяснение, теперь я понял. Очень простое и элегантное решение.

Toan Lu 29.06.2018 13:00

Другие вопросы по теме