⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

CSS 视图过渡 API 实战

学习使用 view-transition-name 和伪元素,在页面状态变化时创建流畅的动画过渡。 · 难度:入门 · +15XP

视图过渡:让 DOM 变化更丝滑

CSS 视图过渡(View Transitions API)提供了一种声明式的方法,在页面或单页应用的不同状态之间创建动画。它通过快照新旧状态并执行混合/变形动画,让元素增删、移动或改变大小变得自然。

基础使用方法

核心是 document.startViewTransition() 方法,配合 CSS 中的 view-transition-name 属性。

// JavaScript 触发过渡
const transition = document.startViewTransition(() => {
  // 在这里更新 DOM
  updateUI();
});
/* CSS 标记需要追踪的元素 */
.card {
  view-transition-name: card-1;
}

/* 自定义动画 */ ::view-transition-old(card-1) { animation: fadeOut 0.3s; } ::view-transition-new(card-1) { animation: fadeIn 0.3s; }

工作原理

当调用 startViewTransition 时,浏览器会:

  1. 捕获当前状态的快照(old)
  2. 执行回调更新 DOM
  3. 捕获新状态的快照(new)
  4. 将两个快照叠加到伪元素树中并播放动画

默认情况下,所有元素使用一个全局过渡(crossfade)。通过 view-transition-name,你可以为特定元素创建独立的过渡。

关键伪元素

伪元素作用
::view-transition根过渡容器
::view-transition-group(name)单个元素的过渡组
::view-transition-image-pair(name)旧/新快照的容器
::view-transition-old(name)旧状态快照
::view-transition-new(name)新状态快照

实际案例:图片画廊切换

假设你有一个图片画廊,点击缩略图时主图切换:

.main-image {
  view-transition-name: main-img;
}

::view-transition-old(main-img) { animation: scaleOut 0.4s ease; }

::view-transition-new(main-img) { animation: scaleIn 0.4s ease; }

@keyframes scaleOut { to { transform: scale(0.8); opacity: 0; } } @keyframes scaleIn { from { transform: scale(0.8); opacity: 0; } }

注意事项

点击下方按钮,观察卡片列表的添加与删除动画。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0