'height: fit-content' 没有 CSS 过渡 [英] No CSS transition for 'height: fit-content'
问题描述
我使用 transition: height 500ms
向元素添加动画,该元素通过按钮从 height: 0
滑动打开到 height: 100px
反之亦然.
由于元素的内容是动态添加的,我不知道它的大小,我想切换到 height: fit-content
代替.这样,元素将始终具有合适的大小来显示其内容.
遗憾的是,这会禁用动画.
如何将动画与大小适合其内容的 div 元素结合在一起?
以下代码段显示了行为:
document.querySelector('button').addEventListener('点击',() =>document.querySelectorAll('div').forEach(div => div.classList.toggle('closed')));
div {背景颜色:浅蓝色;边框:1px纯黑色;溢出:隐藏;过渡:高度500ms;}div.关闭{高度:0!重要;}div.div1 {高度:100px;}div.div2 {高度:适合内容;}
<button type="button">toggle</button><h1>'高度:100px' =>'高度:0'<div class="div1">一些文字<br/>更多文字<br/>这么多文字
<br><h1>'height: fit-content' =>'高度:0'<div class="div2">一些文字<br/>更多文字<br/>这么多文字
正如 Mishel 所说,另一个解决方案是使用 max-height.这是该解决方案的一个工作示例.
关键是在完全展开时近似于您的最大高度,然后过渡将变得平滑.
希望这会有所帮助.
https://www.w3schools.com/css/css3_transitions.asp
document.querySelector('button').addEventListener('点击',() =>document.querySelectorAll('div').forEach(div => div.classList.toggle('closed')));
div {背景颜色:浅蓝色;边框:1px纯黑色;溢出-y:隐藏;最大高度:75px;/* 近似最大高度 */过渡属性:全部;过渡持续时间:0.5s;过渡时间函数:cubic-bezier(1, 1, 1, 1);}div.关闭{最大高度:0;}
<button type="button">toggle</button><h1>'高度:100px' =>'高度:0'<div class="div1">一些文字<br/>更多文字<br/>这么多文字
<br><h1>'height: fit-content' =>'高度:0'<div class="div2">一些文字<br/>更多文字<br/>这么多文字