Подтвердить что ты не робот

Переход CSS между левыми → правыми и верхними → нижними позициями

Можно ли использовать переходы CSS для анимации чего-то между позицией, установленной как left: 0px, на right: 0px, чтобы она проходила весь экран? Мне нужно выполнить то же самое сверху донизу. Я застрял, вычисляя ширину экрана/размер объекта?

#nav {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 50px;
    height: 50px;
    -webkit-transition: all 0.5s ease-out;
}

.moveto {
    top: 0px;
    right: 0px;
}

а затем я использую jQuery .addClass

4b9b3361

Ответ 1

Если вы знаете ширину/высоту анимированного элемента, вы можете анимировать позицию (сверху, снизу, влево, вправо), а затем вычесть соответствующий запас.

​.animate {
  height: 100px;
  width: 100px;
  background-color: #c00;
  -webkit-transition: all 1s ease;
  -moz-transition: all 1s ease;
  -o-transition: all 1s ease;
  -ms-transition: all 1s ease;
  transition: all 1s ease;
  position: absolute;
  left: 0; /*or bottom, top, right*/
}

И затем оживить в зависимости от позиции...

.animate.move {
  left: 100%;   /*or bottom, top, right*/
  margin-left: -100px; /*or bottom, top, right */
}

Эта реализация, вероятно, будет более гладкой с transform: translate(x,y), но я буду хранить ее так, чтобы она была более понятной.

demo: http://jsfiddle.net/nKtC6/

Ответ 2

Это работало для меня на Chromium. Значение% for translate относится к размеру ограничивающего прямоугольника элемента, к которому он применяется, поэтому он отлично передает элемент в нижний правый край, не имея необходимости переключать какое свойство используется для указания его местоположения.

topleft {
  top: 0%;
  left: 0%;
}
bottomright {
  top: 100%;
  left: 100%;
  -webkit-transform: translate(-100%,-100%);
}

Ответ 3

В более современных браузерах (включая IE 10+) теперь вы можете использовать calc():

.moveto {
  top: 0px;
  left: calc(100% - 50px);
}