ease-out 实现“先快后慢”需搭配 transition-property 和 transition-duration,其等价于 cubic-bezier(0,0,0.58,1),起始斜率最大、终点斜率为0;单独设置无效,且须避免 display:none 或同次js中连续改值导致过渡被跳过。

transition-timing-function 设为 ease-out 就行
“先快后慢”是 ease-out 的标准行为,它不是靠 JS 控制节奏,而是由 CSS 缓动函数直接定义的视觉曲线。只要过渡属性、时间和函数三者配齐,浏览器就会自动按该节奏渲染。
-
ease-out等价于cubic-bezier(0, 0, 0.58, 1),起始斜率最大(快),终点斜率为 0(慢停) - 必须搭配
transition-property和transition-duration才生效,单独写ease-out没用 - 不要和
animation-timing-function混用——那是 keyframes 动画的配置项,和 transition 无关
常见错误:写了 ease-out 却没效果
根本原因不是函数写错,而是过渡没被真正“触发”:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 目标属性值没变:比如从
opacity: 1切到opacity: 1,浏览器不认为有变化 - 元素初始状态不可见:
display: none或visibility: hidden下设ease-out,过渡直接跳过 - 样式设置在同一次 JS 执行中完成:比如
el.style.opacity = '0'; el.classList.add('fade');连写,浏览器合并渲染,没机会读旧值 - 补救方式:在改值前加
void el.offsetWidth或el.getBoundingClientRect()强制重排
和 ease、ease-in-out 的关键区别在哪
别只记名字,要看实际曲线拐点位置:
-
ease:慢→快→慢(cubic-bezier(0.25, 0.1, 0.25, 1)),适合通用交互,但“先快后慢”感不强 -
ease-out:快→慢(起始速度最高),适合“收尾动作”,比如菜单收起、卡片淡出 -
ease-in-out:慢→快→慢,但两端缓动对称,中间段更长;若要强调“收尾顿挫”,它不如ease-out明确 - 真要微调节奏,直接上
cubic-bezier(0, 0, 0.42, 1),比ease-out收得更急一点
transition-duration 太短时 ease-out 容易被忽略
过渡时间低于 300ms 时,人眼很难分辨“先快后慢”和线性变化的区别:
- 建议最小设为
300ms,比如transition: opacity 300ms ease-out - 移动端触摸反馈更敏感,可拉长到
400ms,避免“一闪而过”感 - 如果配合 transform(如
translateY),持续时间可略长(450ms),否则容易显得突兀 - 注意:duration 是毫秒级数值,写成
0.3s或300ms都行,但别混用单位(如0.3ms)
cubic-bezier 调得再精准也没用。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










