CSS过渡动画在动态调整高度时失效通常由以下几个原因导致:
height: auto
),过渡效果无法计算中间状态auto
值:CSS无法从auto
到具体数值或反之进行平滑过渡.element {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
}
.element.active {
max-height: 500px; /* 设置为大于实际高度的值 */
}
.element {
transform: scaleY(0);
transform-origin: top;
transition: transform 0.3s ease;
}
.element.active {
transform: scaleY(1);
}
// 获取实际高度
const element = document.querySelector('.element');
const height = element.scrollHeight;
// 设置初始高度
element.style.height = '0';
element.style.transition = 'height 0.3s ease';
// 触发高度变化
setTimeout(() => {
element.style.height = `${height}px`;
}, 0);
.container {
display: grid;
grid-template-rows: 0fr;
transition: grid-template-rows 0.3s ease;
}
.container.active {
grid-template-rows: 1fr;
}
.inner-content {
min-height: 0; /* 关键 */
}
height: auto
:这是最常见的问题根源will-change
属性:可以提示浏览器优化性能
css
.element {
will-change: height;
}
javascript
element.addEventListener('transitionend', () => {
console.log('Transition ended');
});
transition: all 0.3s ease
临时测试是否是特定属性问题通过以上方法,您应该能够解决大多数CSS高度过渡失效的问题。