transition-property 仅指定参与过渡的CSS属性,不控制值范围;它只接受属性名列表或all/none,对无效属性名或不可动画属性(如display)完全无效,需与duration等配合使用。
很多人以为 transition-property 能像动画关键帧那样限定起始/结束值,其实它只是个“开关清单”:开就过渡,关就不动。真正决定「从哪到哪」的是属性本身的值变化(比如从 opacity: 0 到 opacity: 1),transition-property 对这个过程不干预。
opacity、transform、color),或关键字 all / none
opactiy)或用了不支持过渡的属性(如 display、z-index),该属性完全不会动,也不报错all 看似省事,但会把所有可动画属性都拉进来,可能触发意外重排或性能抖动(比如无意中让 width 和 height 同时过渡)不是所有属性都能过渡,只有「有明确中间计算值」的属性才支持。浏览器内部要能插值,比如颜色、长度、角度;而像 visibility 或 font-family 这类离散型属性,即使写进 transition-property 也无效。
opacity、transform、background-color、left/top(需配合 position)、font-size
width/height(触发布局重排,性能差;优先用 transform: scale() 替代)display、visibility、z-index、content、font-family
border 类属性:单独写 border 不生效,得拆成 border-width 或 border-color
transition-property 必须和 transition-duration、transition-timing-function 配合才有意义。它们可以合并写在 transition 简写里,但顺序和数量必须严格对应——这是最容易出错的地方。
transition: opacity 0.3s, transform 0.2s ease-out;
duration,它会作用于所有列出的 property;想给不同属性配不同时间,就得一一对应写全:transition: opacity 0.3s, transform 0.2s;
duration(比如只写 transition-property: opacity;),过渡完全不会发生——没有默认时长transition: all 0.3s; 时,后续新增的可动画属性(比如后来加了 filter)也会自动参与,但不可控,调试困难如果你实际想控制的是「过渡只在某个数值区间内生效」(比如只在滚动到某位置后才启动 opacity 过渡),transition-property 做不到。这时候得靠 JS 控制 class 切换时机,或者用 @keyframes + animation 配合 animation-fill-mode 和 JS 动态设置 animation-delay 或 animation-play-state。
立即学习“前端免费学习笔记(深入)”;
transition)本质是「响应式」的:依赖属性值变化触发,没有主动控制点animation)才是「声明式」的,能精确控制每一步,适合复杂范围逻辑will-change: opacity; 提前告知浏览器优化目标属性,对性能有帮助,但别滥用——它本身不触发过渡,只是提示