CSS 与布局 / CSS Transition · 状态间的隐式动画 / 入场与出场:让刚出现或将消失的元素也能过渡 待审核 4 / 6
@starting-style · transition-behavior: allow-discrete

入场与出场:让刚出现或将消失的元素也能过渡

transition 需要旧值才能补间,这给入场和出场各留了一个坑。入场时元素刚插入 DOM(或从 display: none 现身),没有上一帧,过渡不触发——@starting-style 专门提供这个起始帧。出场时元素一旦 display: none 就立刻消失、根本来不及播——transition-behavior: allow-discretedisplay 这类离散属性也参与过渡,把「变 none」推迟到过渡结束。两者合起来,就有了完整的进入与退出生命周期。

图 0-1 · 完整的进出场生命周期。可反复开合,并逐项关掉 @starting-style 或 allow-discrete,看缺哪一件会退化成什么样。

建议 · 三件套各管一段,缺一不可:@starting-style 给「从无到有」那一帧的起点,没有它入场不动;transition-behavior: allow-discretedisplay 能参与过渡,没有它出场会瞬间消失;过渡列表里还要把 display(以及 top layer 元素的 overlay)一并列上,浏览器才知道延后那次离散翻转。与 CSS Animation 的 starting-style 页相比,那边对照 transition 版与 @keyframes 版、并细讲 discrete 动画类型;本页聚焦 transition 路线的完整进出场。

图 0-2 · 三件套的完整 CSS 写法。