Переход CSS - два направления?

Вот грубый пример, который поможет показать, что мне хотелось бы: http://jsfiddle.net/GVaNv/

Мне было интересно, если в любом случае сделать накладку transition слева, а затем оставить с правой стороны.

Итак, при наведении наложение появляется, как и в примере, но вместо того, чтобы отступать назад влево, до transition вправо.

Возможно ли это? (необязательно использовать transition, я открыт для любого способа сделать это).

Ответ 1

Вот простое решение, которое не требует больше HTML или JavaScript:

.box {
    height: 100px;
    width: 250px;
    background: aqua;
    position: relative;
    overflow: hidden;
}

.overlay {
    position: absolute;
    background-color: rgba(0, 0, 0, 0.5);
    width: 100%;
    color: white;
    padding: 10px;
    left: -270px;
    margin-left: 520px;
    bottom: 0;
    transition: left 300ms linear, margin-left 300ms ease-out;
}

.box:hover .overlay {
    left: 0;
    margin-left: 0;
    transition: left 300ms ease-out;
}
<div class="box">
    <div class="overlay">
        Overlay
    </div>
</div>

Ответ 2

Я пытался добиться этого только с помощью CSS, включая добавочную разметку div, следующим образом DEMO

HTML

<div class="box">
    <div class="overlay">
        Overlay
    </div>
    <div class="overlayFalse">
        Overlay false
    </div>
</div>

CSS

.box {
    height: 250px;
    width: 250px;
    background: aqua;
    position: relative;
    overflow: hidden;
}

.overlay, .overlayFalse {
    position: absolute;
    background-color: rgba(0, 0, 0, 0.5);
    width: 96%;
    color: white;
    padding: 2%;
    right:-274px;
    bottom: 0;
    transition: right 300ms ease-out, left 300ms ease-out;

}

.overlayFalse{
    opacity:0;
    right:auto;
    left:-274px;
}

.box:hover .overlay {
    right:0;
    opacity:0;
}

.box:hover .overlayFalse{
    opacity:1;
    left:0;
}

Ответ 3

Возможно, вы можете использовать CSS3 Animations, используя один для скользящего и другой для выдвижения:

@keyframes overlay-in {
  from {
    left: -999px;
  }

  to {
    left: 0;
  }
}

@keyframes overlay-out {
  from {
    left: 0;
  }

  to {
    left: 999px;
  }
}

Теперь вы можете применить анимацию overlay-in к :hover, а другую - к определению нормального элемента:

.box .overlay {
    /* other definitions ... */
    animation-name: overlay-out;
    animation-duration: 1000ms;
    animation-fill-mode: none;
}

.box:hover .overlay {
    animation-name: overlay-in;
    animation-duration: 600ms;
    animation-fill-mode: forwards;
}

Но есть одна проблема: анимация слайдов будет воспроизводиться один раз при загрузке страницы. Я не могу понять, как предотвратить это без крошечного JavaScript, добавив класс в оверлей в первом событии mouseout. Я сделал это таким образом в JSFiddle.

Но, конечно, как только вам потребуется JavaScript, вы также можете использовать простые переходы. Но этот метод работает даже без JavaScript, если вы можете жить с анимацией, играющей при загрузке страницы.