transition-opacity 必须写在初始 class 中,否则无动画效果;正确写法是 transition-opacity duration-300 ${isvisible ? 'opacity-100' : 'opacity-0'};需配合 transitionend 事件精准清理 dom。

transition-opacity 必须写在初始 class 里,不能等切换时才加
很多人写 opacity-0 和 opacity-100 却没动画,问题出在漏掉了 transition-opacity。Tailwind 的过渡类必须作用于元素首次渲染时的 class 列表,否则浏览器根本不会监听 opacity 变化。
错误写法:div className={`${isVisible ? 'opacity-100' : 'opacity-0'}`}——切换 class 时只改 opacity,没有过渡声明,结果就是瞬间跳变。
正确写法:div className={`transition-opacity duration-300 ${isVisible ? 'opacity-100' : 'opacity-0'}`}
-
duration-300必须显式指定,transition-opacity本身不含时长 - 别用
transition-all替代,它会把后续所有样式变更(比如 padding、color)都套上过渡,干扰预期效果 - 如果用原生 CSS,要确保
transition: opacity 0.3s ease;写在默认状态(非:hover或.active)里,否则回退动画失效
opacity 降到 0 后元素还在 DOM 里,得靠 JS 清理
仅靠 opacity-0 不等于隐藏:元素仍占布局空间、能响应 hover/click、影响 tab 键导航。要真正移除,必须等动画结束再更新状态。
推荐监听 transitionend 事件,而不是硬写 setTimeout:
- 监听
transitionend更精准,不受时长误差或重排打断影响 - 需过滤事件:只响应
opacity属性的结束,避免height或transform等其他过渡干扰 - 移除前先检查
event.propertyName === 'opacity'和当前 opacity 值是否为 0
示例逻辑:el.addEventListener('transitionend', (e) => { if (e.propertyName === 'opacity' && getComputedStyle(el).opacity === '0') el.remove(); });
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
别混用 visibility: hidden 和 transition-opacity
visibility: hidden 本身不可过渡,但它常被误当作“安全兜底”加在 opacity-0 上。结果是:opacity 还没开始变,visibility 就已生效,动画直接消失。
正确配合方式只有两种:
- 纯
opacity+transition:适合需要保留占位、允许交互(如 tooltip 淡出后仍可 hover 触发)的场景 -
opacity动画结束后,JS 主动设visibility: hidden或移除元素:适合彻底隐藏、释放空间的场景
绝对不要写 opacity-0 visibility-hidden 同时存在——前者依赖浏览器补间,后者立刻切断渲染,两者冲突。
动画中途取消时,transition 自动回退,@keyframes 不行
用户 hover 进来开始淡入,还没播完就移出,transition 会平滑回退到 opacity: 0;但用 @keyframes fade-in + forwards 就卡死在 opacity: 1,无法中断。
这是声明式(transition)和命令式(@keyframes)的根本差异:
-
transition是“告诉浏览器:只要 opacity 变了,就按这个规则补间”,浏览器全程控制中间帧 -
@keyframes是“播放一段预设路径”,一旦触发就走完,中途取消只能停在最后一帧 - 所以
animate-fadeOut类容易导致元素残留占位、遮挡点击——本质是没配 JS 同步清理
复杂交互动画里,优先用 transition-opacity,除非你需要多段贝塞尔曲线或非线性关键帧。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










