::view-transition-old(root) 必须显式指定 root 参数才有效,仅写 ::view-transition-old 无效;它不支持嵌套选择器,仅接受顶层匹配;推荐用 transform + opacity 组合实现稳定退出动画,避免 scale/rotate 或 display/visibility 修改;命名过渡需用 ::view-transition-old() 而非 root;旧视图快照冻结 dom 和样式,运行时修改 animation 属性无效。

::view-transition-old(root) 必须用 root 参数
不写 (root) 就完全无效——浏览器不会识别 ::view-transition-old 这个伪元素。它不是通用选择器,必须显式指定作用域为 root,否则 CSS 规则被忽略,旧页面直接消失,毫无过渡。
动画只能定义在 ::view-transition-old(root) 上,不能套 class
常见错误是写成 .theme-dark ::view-transition-old(root) 或 body ::view-transition-old(root)。这些组合选择器浏览器直接丢弃,因为 View Transitions 的伪元素只接受顶层匹配,不支持上下文嵌套。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
-
::view-transition-old(root)✅ 有效 -
.dark ::view-transition-old(root)❌ 无效(被忽略) -
html ::view-transition-old(root)❌ 无效(多余前缀破坏匹配)
transform + opacity 是最稳的退出组合
仅靠 opacity 淡出容易有视觉残留;纯 transform 移动可能因快照裁剪导致边缘撕裂。两者叠加最可靠:
::view-transition-old(root) {
animation: slide-out 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
}
@keyframes slide-out {
from {
opacity: 1;
transform: translateX(0);
}
to {
opacity: 0;
transform: translateX(-20px);
}
}
- 避免用
scale或rotate做全页退出——快照是静态位图,大角度旋转易糊边 - 不要设
display: none或visibility: hidden:会中断快照生命周期,动画直接跳过 - 时长建议 0.3–0.6s:短于 0.25s 感觉突兀,长于 0.8s 易让用户误判卡顿
命名过渡里不能用 ::view-transition-old(root)
如果你用了 view-transition-name 给某个元素单独设动画(比如标题飞出),它的旧态要靠 ::view-transition-old(<name>)</name>,而不是 root。混用会导致规则冲突或静默失效:
-
::view-transition-old(hero)✅ 控制命名元素hero -
::view-transition-old(root)✅ 控制整页背景/容器 -
::view-transition-old(root), ::view-transition-old(hero)✅ 可共存,但必须分开写、不能合并声明 - 不能把
hero的退出逻辑塞进::view-transition-old(root)—— 它只管快照整体,不管内部命名元素
::view-transition-old(root) 的 animation 属性,它已经锁定帧了。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










