【发布时间】:2021-05-25 21:17:06
【问题描述】:
我正在尝试将元素的高度从预设高度设置为取决于内部内容的高度(height: auto 将设置的高度)。因为动画不适用于height: auto(往返)我认为解决方案可能是保存当前高度,在元素上设置height: auto 以获得最终高度并保存,然后重置元素的高度初始,然后将其设置为最终高度。用户不会注意到“自动闪烁”,最后的更改应该会产生动画。
const containerBlockDiv = document.querySelector('.container-block')
const childBlockDiv = document.querySelector('.child-block')
const containerCurrentHeight = containerBlockDiv.scrollHeight
containerBlockDiv.style.height = 'auto'
const containerNewHeight = containerBlockDiv.scrollHeight
containerBlockDiv.style.height = `${containerCurrentHeight}px`
containerBlockDiv.style.height = `${containerNewHeight}px`
.container-block {
display: inline-block;
background-color: red;
height: 50px;
width: 20px;
transition: height 1s;
}
.child-block {
display: inline-block;
height: 100px;
}
<div class="container-block">
<div class="child-block"></div>
</div>
为什么这不起作用?
【问题讨论】:
-
首先,我很确定过渡不适用于通过 Javascript 设置的样式。我会使用 JS 添加一个类并使用 CSS 为该类设置所需的样式。
-
在此处使用
max-height制作动画,而不是height,然后您可以毫无问题地设置height:auto。 -
他们做codepen.io/warhammered_cat/pen/yLVPXRV。 @kdsprogrammer
-
因为它甚至没有看到第一个值。它不能从无到有过渡。
-
我的意思是它甚至没有看到 50px 的值。您的脚本在第一次回流之前运行。阅读链接问题中接受的答案以及那里的所有链接答案,我认为我已经写了足够多的内容。
标签: javascript css