#javascript #jquery #css #dom #display
#javascript #jquery #css #dom #отображение
Вопрос:
Один быстрый вопрос.
Если я установлю для div значение display: none
, следующие элементы в DOM будут отображаться на том месте, где был div.
Как я могу анимировать этот переход, чтобы он просто плавно перемещался вверх?
Спасибо заранее за каждую помощь!
Ответ №1:
Вы не можете. Вместо отображения: нет; сделайте его с высотой: 0; и переходом: высота .5s; переполнение: скрыто;
Тогда вам придется немного переместить другие разделы рядом с другими. 🙂
Если вы хотите, я могу создать простой codepen.
Комментарии:
1. Это было бы неплохо 🙂
2. Чистый CSS: codepen.io/bra1N/pen/bwQQOo вот так, просто нажмите на красный квадрат 🙂
3. Никаких проблем, в любое время 🙂
Ответ №2:
Используйте slideUp()
вместо hide();
, если вы используете jquery
$('.hidden').slideUp();
Ответ №3:
Просто анимируйте это. У jQuery есть много способов сделать это, например:
$('#myDiv').hide(200); // 200ms
Комментарии:
1. @madalinivascu Нет, я имею в виду jQuery api.jquery.com/hide/#hide-duration-complete
Ответ №4:
Чтобы избежать сохранения скрытого элемента с шириной, которая может мешать другим элементам на странице, вы должны просто:
$('yourElement').slideUp();
Таким образом, вы заставите yourElement
высоту анимироваться и, наконец, спрячете ее, фактически удалив из потока элементов.
Редактировать: Спасибо A. Wolff за комментарий. После .hide()
удалена ненужная .slideUp()
функция.
Комментарии:
1. Нет,
hide()
(без параметра duration) не будет помещен в очередь fx, что означает, что элемент будет скрыт до завершения анимации скольжения, и в любом случае это действительно не имеет смысла, потому что вызов обоих методов избыточен2. Спасибо, вы полностью правы. Я собираюсь исправить ответ.
Ответ №5:
Есть даже лучшее решение для вас. Вы можете показывать и скрывать синюю рамку при каждом нажатии на розовую рамку.
$('.pinkBox').click(function() {
$('.pinkBox').addClass('show');
$('.blueBox').addClass('displayed');
});
$('.blueBox').click(function() {
$('.pinkBox').removeClass('show');
setTimeout(function() {
$('.blueBox').removeClass('displayed');
}, 300);
});
.blueBox {
height: 100px;
width: 100px;
background-color: blue;
transition: all .3s ease;
position: absolute;
display: none;
}
.pinkBox {
height: 100px;
width: 100px;
background-color: pink;
transition: all .3s ease;
position: absolute;
}
.show {
transform: translateY(100px);
}
.displayed {
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='blueBox'>
</div>
<div class='pinkBox'>
</div>
Комментарии:
1. Выглядит довольно солидно, хотя и не то, что мне нужно для этой проблемы, но довольно хорошее решение для множества вещей. Спасибо!
2. @klvler Анимировать
display
всегда очень проблематично. В большинстве случаев это просто работает не так, как задумано.3. @klvler Я немного изменил код. Добавлено
display: none
, когда синее поле не видно. Проверьте это.