可过渡性:能插值的与只能跳变的
不是所有属性都能过渡。CSS 把属性分两类:可插值(数值、颜色、长度、transform,按 computed value 连续补间)与离散(display、visibility、content 等,默认不补间,在过渡时长的中点直接跳变)。混淆这一点,就会写出「明明加了 transition
却没动」的样式。
1 · 可插值属性
2 · 离散属性
让离散属性(含 display)也能过渡,要靠 transition-behavior: allow-discrete,见入场与出场。
3 · 过渡到 height: auto
折叠面板想从 height: 0 平滑展开到内容高度,但 height: auto 的 auto 不是一个数值、无法插值。interpolate-size: allow-keywords(或 calc-size())让 auto、fit-content 这类关键字也能参与插值。
4 · 常见属性的可过渡性
| 属性 | 类型 | 过渡行为 |
|---|---|---|
opacity / color / background-color |
可插值 | 按 computed value 连续补间 |
transform / width / height(数值) |
可插值 | 连续补间 |
height: auto / fit-content |
关键字 | 需 interpolate-size 才能插 |
display / visibility / content |
离散 | 默认跳变;display 需 allow-discrete |
建议 ·「加了 transition 却不动」多半源于可过渡性限制:目标属性是离散的(display、visibility、关键字尺寸),或新旧值里有一端不是可插值的数值。解法分两路——离散属性走 allow-discrete 加 @starting-style;尺寸关键字走 interpolate-size 或 calc-size(),与 CSS Animation 进阶页同源。