CSS中width/height的transition对auto值无效,因auto无法插值;应改用具体数值、max-height模拟或transform/opacity组合实现平滑过渡。
CSS 中直接对 width 或 height 设置 transition 有时看起来“不生效”,其实不是过渡失效,而是因为元素初始或目标状态的宽高为 auto —— 而 auto 无法参与数值插值,浏览器无法计算中间帧,导致过渡被跳过。
过渡只在两个确定的长度值之间生效(如 100px → 200px、0 → 2rem)。若其中一端是 auto(常见于内容自适应容器),过渡就会静默失败。
height: auto; → height: 300px;(auto 无法插值)auto,例如先用 JS 获取真实高度,再设置为内联 style 过渡;或改用 max-height 模
拟(见下文)当需要对未知高度的内容做展开动画时,max-height 是最常用且可靠的替代方案。只要设一个足够大的上限值(大于内容实际高度),配合 overflow: hidden,就能实现平滑过渡。
max-height: 0; overflow: hidden;
max-height: 500px;(需确保该值 ≥ 内容最大可能高度)transition: max-height 0.3s ease-in-out;
max-height: 100vh 或用 JS 动态写入精确高度如果目标是视觉上的“缩放”或“显现”,优先考虑 transform: scale() 和 opacity。它们触发硬件加速,性能更好,且无需关心具体尺寸值。
transform: scale(0); opacity: 0;
transform: scale(1); opacity: 1;
transition: transform 0.2s ease, opacity 0.2s ease;
即使写了 transition: width 0.3s;,也可能因 CSS 优先级、简写覆盖或触发时机问题而失效。
transition: all 0.3s; 和单独的 width 过渡,容易被覆盖requestAnimationFrame 或微任务延迟display: none 切到 block 不会触发动画,因为元素在 none 时无盒模型。应改用 visibility: hidden + height/opacity 组合