Я предполагаю, что ваше всплывающее окно абсолютно позиционировано, поэтому вы можете сделать следующее:
- Пока оно скрыто, установите для всплывающего окна
top
огромное отрицательное значение.Это убирает его с экрана и избавляет от полосы прокрутки. - При наведении установите
top
на правильное значение и передайте значение opacity
. - Убедитесь, что ваш CSS
transition
правила предназначены только для свойства opacity
.
HTML
<a href="">Popup go now</a>
<div class="popup">
My cat's breath smells like cat food...
</div>
CSS
.popup {
position: absolute;
top: -2000px;
opacity: 0;
transition: opacity 1s ease-in-out;
}
a:hover + .popup,
.popup:hover {
top: 30px;
opacity: 1;
}
Вот выше в действии .
Обновление : чтобы добавить левое колебание и очистить анимацию мышки, вы можете использовать следующий код:
.popup {
position: absolute;
top: -2000px;
width: 300px;
left: 0;
opacity: 0;
/* Animate opacity, left and top
opacity and left should animate over 1s, top should animate over 0s
opacity and left should begin immediately. Top should start after 1s. */
transition-property: opacity, left, top;
transition-duration: 1s, 1s, 0s;
transition-delay: 0s, 0s, 1s;
}
a:hover + .popup,
.popup:hover {
top: 30px;
left: 30px;
opacity: 1;
/* All animations should start immediately */
transition-delay: 0s;
}
Это делается следующим образом:
- Указана анимация для нескольких свойств (непрозрачность, слева, сверху).
transition-delay
предотвращает верхнююзначение изменяется до тех пор, пока анимация непрозрачности и левой анимации не будет завершена.Хитрость здесь в том, что когда элемент равен :hover
, задержки нет (непрозрачность, левая и верхняя анимации начинаются сразу).Однако, когда :hover
больше не активен, верхняя анимация ждет 1 секунду перед запуском.Это дает непрозрачность и оставляет достаточно времени для завершения.
Вот обновленный пример .