May 8, 2026Budding

复刻液态玻璃:从 backdrop-filter 到光线折射

用 CSS backdrop-filter 加 SVG feDisplacementMap 做出近似 iOS 26 的玻璃质感。

cssdesign
Apr 22, 2026Evergreen

我的阅读栈:从 Zettelkasten 到数字花园

三年的笔记折腾让我学到的,关于知识系统怎么搭建的几条经验。

notesthinking
Feb 1, 2026Seedling

为什么我放弃了 scroll-snap

原生 scroll-snap 写起来很爽,但一旦动效要超过 CSS 能表达的范围,就要换 JS。

cssux
Jan 12, 2026Budding

TypeScript 模板字面量的实用场景

Template literal types 不只是写出 'Hello, ${name}' 那么简单。一些被低估的用法。

typescriptdx
Dec 28, 2025Seedling

暗色主题的 token 拆分

做暗色模式时,直接把每个 hex 翻一遍不够。颜色 token 至少要拆成 raw 和 semantic 两层。

cssdesign
Jan 20, 2025Seedling

快捷键设计的几个原则

Vim、Notion、Linear,好的快捷键有共同的纹理。

uxui
Mar 15, 2026·Budding·
#react#animation

Framer Motion 的 layoutId:共享元素过渡的工作原理

layoutId 是 Framer Motion 用于跨组件、跨路由共享布局的关键机制。 当一个组件挂载、而另一个同 layoutId 的组件正在卸载时,Framer 会自动计算二者的 FLIP 差, 并用 spring 把新组件从旧位置过渡到目标位置。

关键约束

  • 两个 motion 元素必须同时存在于 React 树中至少一帧,否则 FLIP 计算失败。 实践中要么用 AnimatePresence,要么用 portal 把退出元素挂在外层。
  • 不要嵌套两个相同 layoutId,否则 transform 会被叠加。
  • 文字大小变化时,建议同时用 layout prop 让子元素也参与过渡,避免 reflow 跳变。

与 View Transitions API 的对比

维度 layoutId View Transitions API
跨浏览器 稳定 Safari 26+ 才支持
嵌套元素 需手动声明 自动
调试 React DevTools 浏览器原生
中断恢复 支持 部分支持

对生产项目,目前仍建议 layoutId 兜底,View Transitions API 渐进增强

or scroll·Enterto open