Плавно растянуть div

251
13 марта 2018, 00:59

в контейнер div с классом .message добавляется другие div по средствам ajax
как сделать что бы при добавлении новых элементов контейнер .message плавно растягивался по высоте контента ?

Answer 1

У свойства height исходное значение auto, поэтому transition: height с ним не работает.
Следовательно, самое разумное и очевидное решение - устанавливать значение свойства height явно: при вставке контента в контейнер (получая либо высоту контента, либо высоту контейнера после вставки).

Пример реализации второго способа (ресайз после вставки, по суммарной высоте):

let container = document.getElementById('container'); 
updateHeight(container);  // изначальная установка высоты в пикселях 
let count = 5, 
    interval = setInterval(() => {  // добавление 5 блоков с интервалом 1с 
      if (!count) { 
        clearInterval(interval); 
        return; 
      } 
      container.insertAdjacentHTML('beforeend', '<div class="content-block"></div>'); 
      updateHeight(container);     // добавили контент - изменим высоту контейнера 
      count--; 
    }, 1000); 
 
// считает высоту элемента по принципу "scrollHeight минус паддинги" 
function updateHeight(el) { 
  let cs = getComputedStyle(el), 
      paddings = (parseInt(cs.getPropertyValue('padding-top'))    || 0) +  
                 (parseInt(cs.getPropertyValue('padding-bottom')) || 0); 
  el.style.height = (el.scrollHeight - paddings) + 'px'; 
}
#container { 
  border : 1px dashed red; 
  padding: 8px; 
  text-align: center; 
  font: 16px sans-serif; 
  color: red; 
  overflow-y: hidden;  /* обязательно */ 
  transition: height 0.2s linear; 
} 
 
.content-block { 
  height: 1em;  /* явно указывать высоту потомков не обязательно, здесь это делается только потому что div'ы добавляются пустыми (мне лень копипастить lorem ipsum) */ 
  margin: 8px; 
  background: #77d; 
}
<div id="container">Контейнер</div>

Answer 2

вот это вы имеете ввиду jquery::animate?

и поясните что такое по высоте - по высоте последнего вставленного div ?

READ ALSO
Съезжает блок при добавлении текста

Съезжает блок при добавлении текста

Сорян за тупой вопрос, но почему блок съезжает вниз когда добавляю в него текст? И как исправить?

250
Как реализовать блок с такой рамкой

Как реализовать блок с такой рамкой

Подскажите, как реализовать блок с такой рамкой

187
Как лучше реализовать фон в блоке?

Как лучше реализовать фон в блоке?

Можно ли такой фон, как в шапке, реализовать на чистом CSS без использования графики?

215
Как изменить css по названию документа?

Как изменить css по названию документа?

Возможо ли изменить css по названию документа, например:

199