Apr 22, 2026Evergreen

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

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

notesthinking
Mar 15, 2026Budding

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

为什么 layoutId 是 SPA 路由间共享元素过渡最稳的方案,以及它的几个坑。

reactanimation
Feb 1, 2026Seedling

为什么我放弃了 scroll-snap

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

cssux
Mar 8, 2025Budding

SVG 动画的几种范式比较

SMIL、CSS、JS、Web Animations API,各有适用场景。一张速查表。

svganimation
Feb 14, 2025Seedling

字体加载策略:FOIT vs FOUT 之外

Web 字体加载的两个传统问题之外,还有 size-adjust 这个新玩具。

performancetypography
Jan 20, 2025Seedling

快捷键设计的几个原则

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

uxui
May 8, 2026·Budding·
#css#design

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

苹果在 iOS 26 与 macOS Tahoe 上推出的 Liquid Glass,是一种比传统毛玻璃更"活"的材质——它不只是模糊背景, 还会折射光线、在曲面边缘产生轻微的视差与高光。要在 web 上还原,需要把几个分别独立的视觉特性叠加起来。

三层结构

最朴素的做法是把每个特性切成一层 CSS:

  • 底层:backdrop-filter: blur(28px) saturate(180%),吃掉背景细节
  • 中层:SVG <feDisplacementMap> 把局部像素轻微推开,模拟折射
  • 顶层:径向 / 线性高光渐变,给左上角一道柔和的曲面反光
.glass {
  backdrop-filter: blur(28px) saturate(180%);
  background: linear-gradient(135deg,
    rgba(255,255,255,0.55),
    rgba(255,255,255,0.15));
  border: 1px solid rgba(255,255,255,0.4);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.6) inset,
    0 30px 60px -20px rgba(15,23,42,0.18);
}

折射感

feDisplacementMap 的参数中 scale 控制位移强度,保持在 8 以下才不会显得 glitchy。 噪点贴图可以是低分辨率 <feTurbulence> 产物——把 baseFrequency 拉到 0.012 左右,再用 <feGaussianBlur> 抚平。

活感

最后一步是 hover 时让左上角高光跟随鼠标轻微位移。这层动效不能急,150ms 的 ease-out 是上限。

or scroll·Enterto open