svelte中必须用transition:指令而非css transition属性,因响应式更新可能替换dom元素导致css过渡失效;transition:统一控制进出动画,in:/out:可分别指定;内置过渡需从svelte/transition导入,自定义过渡函数须返回含css或tick的对象。

直接用 transition: 指令,别写 transition CSS 属性——这是最常见的混淆点。
为什么不能直接写 CSS 的 transition 属性?
Svelte 的响应式更新是“原子级重渲染”,DOM 元素可能被完全替换(比如 {#if} 切换时),此时纯 CSS transition 会失效:没有“状态变化前后的同一元素”供浏览器过渡。Svelte 的 transition: 指令才是为此设计的解决方案,它在 DOM 移除/插入前主动捕获快照并注入动画逻辑。
- 写
transition: background-color 0.2s;在<style></style>里 —— 无效,尤其在条件渲染中 - 写
transition:fade或in:fly—— 才真正触发 Svelte 运行时的过渡生命周期 - 例外:hover、focus 等非响应式状态切换,CSS
transition仍可用,但和组件状态无关
transition: 和 in:/out: 的区别在哪?
transition: 是“进出都用同一个动画”,in: 和 out: 可以分别指定进入和离开行为,更精细控制。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
<div transition:fade> → 出现和消失都淡入淡出<li><code><div in:fly="{{y:" out:fade> → 进来时从上方飞入,消失时淡出<li><code><div in:slide> 单独使用 <code>in:时,只对首次渲染或条件为真时生效;out:同理- 如果组件频繁切换显示/隐藏,建议统一用
in:/out:,避免transition:在反复挂载时产生意外交互 -
fade:只改opacity,最轻量 →in:fade={{duration: 300}} -
fly:带位移 →in:fly={{x: 0, y: -10, duration: 250}} -
slide:沿容器边界滑入/滑出 →out:slide不需要参数,默认按父容器方向推 -
blur:模糊过渡 →transition:blur={{amount: 5}} - 注意:
easing值要从svelte/easing导入,比如import { cubicOut } from 'svelte/easing',然后传easing: cubicOut -
css更常用:适合一次性插值动画,比如transform: translateY(${100 * t}px) -
tick用于需要 DOM 测量或复杂时序逻辑的场景(如 FLIP 动画),但性能开销更高 - 函数第一个参数是
node(当前 DOM 元素),第二个是params(你传进来的配置对象) - 示例:
function mySlide(node, { distance = 20 }) { return { css: t => `transform: translateX(${distance * (1 - t)}px); opacity: ${t}` }; } - 使用:
<div in:myslide="{{distance:"><p>真正容易被忽略的是:transition 函数返回的 <code>css字符串里,t是归一化时间(0→1),不是毫秒;且 Svelte 会自动内联 style,不走 CSS class,所以没法用开发者工具直接 inspect 动画过程——调试得靠console.log(t)或断点。
哪些内置 transition 可直接用?参数怎么传?
所有内置 transition 都从 svelte/transition 导入,调用时传对象参数,支持 delay、duration、easing 等通用字段。
自定义 transition 怎么写?
函数必须返回一个对象,含 css(返回带插值的 CSS 字符串)或 tick(每帧回调)之一,不能两者都写。










