玻璃拟态做出来像「磨砂白卡片」,八成不是样式写错了,而是底下没东西可模糊。
条件一:背后必须有内容
backdrop-filter 模糊的是元素背后的已绘制内容。如果背后是一片纯色,模糊纯色还是纯色——玻璃感无从谈起。
所以玻璃 UI 的第一步是给画布安排「可被模糊的色彩」:大半径、低透明度的径向渐变光晕,让每张卡背后都有平缓的颜色流动。
条件二:模糊半径与内容频率匹配
- 背后是平滑渐变:小半径即可,模糊前后几乎无差别;
- 背后是文字与卡片边缘(典型如导航条):需要大半径,把高频细节摊开,否则高对比边缘会以「光条」「亮线」的形态透出来。
经验值:导航条这类「背后什么都会路过」的层,模糊半径 24px 起;普通卡片背后是平滑渐变时,甚至可以不模糊。
条件三:边缘语言要统一
玻璃的「边」由三件套构成:
- 半透明发丝线(深色下 white/12,浅色下 white/40——密度观感对齐);
- 顶部 1px 内高光(
inset 0 1px 0 white),模拟光从上方来; - 大圆角加柔和投影。
发丝线的透明度有硬阈值:1px 亮线与相邻区域的亮度差超过约 +27 就会被读成「渲染故障」而不是「边框」。底边尤其危险——卡下方是投影压暗的画布,同样的线在底边会显得更亮。稳妥做法是底边不画发丝线,或把线压暗。
一个反直觉的结论
卡片自己往往不需要模糊。 卡片背后是平滑光晕,模糊与不模糊肉眼无差;而每多一层模糊就多一个合成层,导航条再对这些「已模糊层」采样时,容易叠出双层模糊的怪相。把模糊留给真正需要它的导航条,卡片用「半透明底 + 发丝边 + 内高光」就足够成立。
检查清单
- 画布有可被模糊的色彩流动
- 高频内容层上方的玻璃用了足够大的模糊半径
- 发丝线亮度差在阈值内,底边单独处理
- 只有一层 blur,没有嵌套模糊