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 минус паддинги"functionupdateHeight(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;}
该属性具有
height
初始值auto
,因此transition: height
无法使用它。因此,最合理和最明显的解决方案是
height
显式设置属性值:在将内容插入容器时(获取内容的高度或插入后容器的高度)。第二种方法的实现示例(插入后调整大小,按总高度):
这就是你的意思 jquery::animate 吗?
并解释什么是高度 - 最后插入的 div 的高度?