transition简写中多个属性需用逗号分隔每组“属性+时间+缓动函数”,顺序严格对应,缺时间则整组失效;漏缓动会回退默认ease;不可动画属性(如display、height:auto)即使列出也无过渡效果。

transition简写中多个属性怎么写才生效
直接用逗号分隔每组「属性 + 时间 + 缓动」,顺序必须严格对应,浏览器按逗号切分后逐组解析。漏掉任意一项(比如只写 transform 0.3s 没写缓动函数),该组会回退到默认 ease;但若某组缺时间,整组失效。
transition: opacity 0.2s linear, transform 0.4s ease-in-out, background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);- 不要写成
transition: opacity, transform 0.3s;——这会让opacity无时长,等于没过渡 - 避免混用简写和单独属性:比如同时声明
transition: opacity 0.2s;和transition-duration: 0.5s;,后者会覆盖前者的时间值
为什么写了多属性却只有部分动了
常见原因是属性本身不可动画,或起始/结束值不构成可插值变化。浏览器对「能补间」的判断很严格,不是所有 CSS 值都支持中间状态计算。
-
height: auto→height: 100px:无效,auto不是具体数值,无法插值 -
display: none→display: block:完全不触发过渡,display不在可动画属性列表里 -
margin-left: 0→margin-left: 20px:有效;但margin-left: 0→margin-left: calc(100% - 20px)在某些旧浏览器中可能 fallback 到跳变 - 推荐优先使用
transform和opacity,它们不仅可动画,还能触发 GPU 加速,性能更稳
transition-property 显式列出 vs all 的实际差异
all 看似省事,但在真实项目中容易引发意料外的行为,尤其当后续 CSS 变更未被同步审查时。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
transition-property: all;+transition-duration: 0.3s;:只要该元素任何可动画属性变化(比如 JS 改了box-shadow或filter),都会强行过渡——可能导致重绘抖动 -
transition-property: opacity, transform, background-color;:精准控制,改其他属性(如border)完全不影响,调试时也更容易定位动画源头 - 旧版 Safari(≤13.1)和部分 Android WebView 对
all支持不一致,曾出现transform被忽略的情况,显式声明更稳妥
JS 动态添加类触发动画时要注意什么
靠 JS 切换 class 是最灵活的触发方式,但容易因渲染时机问题导致首帧丢失,动画“闪一下”就结束。
- 不能写成:
el.classList.add('active'); el.style.opacity = '0.5';——两步样式变更可能被合并,只触发一次重排 - 正确做法:先加类,再用
getComputedStyle(el).opacity或void el.offsetHeight强制触发重排,确保浏览器已读取初始状态,再改后续样式 - 监听
transitionend事件时,必须检查event.propertyName,因为多个属性过渡完成时间不同,一个事件不代表全部结束 - 如果要过渡
height,别依赖height: auto,改用max-height配合足够大的值(如max-height: 500px),并确保起始/结束值都是具体数字
过渡真正起效的临界点,往往卡在「属性是否可插值」和「浏览器是否强制重排」这两个地方。很多人调了半天发现没动画,最后发现只是 transition-duration 忘了写,或者把 visibility 当成可过渡属性用了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










