jQuery, CSS: Анимация следующих элементов DOM после отображения: отсутствует

#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 , когда синее поле не видно. Проверьте это.