工具介绍
玻璃拟态是一种界面风格:元素看起来像磨砂玻璃——半透明背景让后面的颜色透出来,同时 backdrop-filter: blur() 把这层背景模糊化,让它读起来像玻璃而不是一块普通的透明面板。通常再配上一圈细细的半透明边框和圆角来完成整体效果。
这个工具让你可以可视化地做出这种效果。预览区特意放在一个流动的渐变背景上方,这样才能看清模糊效果——玻璃拟态只有在背后有颜色或细节的情况下才能正确呈现,单纯的白色页面上是看不出来的。调整背景色的不透明度、模糊强度、边框的不透明度和圆角半径,然后复制生成的 CSS。
来源:Filter Effects Module Level 1, W3C —— 定义了 backdrop-filter,即该效果所依赖的属性。
为什么使用它?
- 在色彩丰富的动态背景上实时预览,能真正看到磨砂玻璃效果,而不是对着空白背景瞎猜模糊数值。
- 背景不透明度、背景模糊强度、边框不透明度和圆角全部集中在一个界面里调整。
- 自动同时输出 backdrop-filter 和 -webkit-backdrop-filter 前缀,不用担心漏掉 Safari 支持。
- 全部在浏览器本地计算,你调整的任何参数都不会上传。
- 免费、不用注册,手机上也能用。
使用方法
- 选一个背景色并调整它的不透明度——较低的不透明度(10–25%)看起来像玻璃;不透明度较高则更像一块带颜色的实心面板。
- 增大模糊强度来模糊元素背后的内容——这才是真正做出磨砂玻璃观感的关键,和透明度本身是两回事。
- 调整边框不透明度,加一圈细微的高光边缘,这能帮玻璃卡片看起来是独立的一层表面,而不是和背景融为一体。
- 设置圆角半径——玻璃拟态卡片几乎总是圆角的,很少用直角。
- 复制生成的 CSS 并粘贴到你的样式表里。记住这个元素背后必须有带颜色或纹理的内容——在纯色平面背景上,玻璃拟态效果是看不出来的。
示例
输入
背景:白色,不透明度 20% · 模糊:10px · 边框不透明度:30% · 圆角:16px输出
background: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 16px;一种经典的磨砂玻璃卡片风格,常用于登录面板、导航栏和仪表盘小组件,背景通常是彩色或图片。
Safari 与浏览器支持
backdrop-filter 在当前版本的 Chrome、Firefox、Edge 和 Safari 中都受支持,但 Safari 历来需要同时写上 -webkit-backdrop-filter 前缀和无前缀属性才能渲染模糊效果——不加前缀的话,较旧版本的 Safari 会静默忽略模糊,只显示纯色透明背景。正因如此,这个工具始终会同时输出这两行声明。
关于当前的浏览器兼容性细节,可以参考 MDN 的 backdrop-filter 文档:https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter。
为什么玻璃拟态需要背后有内容
backdrop-filter 只会模糊元素视觉上背后的内容——背景图片、渐变、另一个有颜色的元素,或者滚动到下方的内容。在纯白色或单色背景上,没有任何东西可以被模糊,效果就会完全看不出来,元素只会显得像一个略带颜色的圆角方块。要让效果真正呈现,请始终把玻璃拟态元素放在渐变、图片或其他有细节的背景上。
配合其他 CSS 效果一起用
玻璃拟态卡片通常会在底部搭配一层柔和的 box-shadow 来增加层次感。先在这里生成磨砂玻璃 CSS,再用「盒阴影生成器」加一层柔和阴影,把两段声明一起应用到同一个元素上。
常见问题
为什么我页面上的玻璃效果没有显示出来?
backdrop-filter 模糊的是元素背后的内容。如果你的元素放在纯白色或纯色背景上,背后没有任何值得模糊的东西,看起来就只是一个淡淡的带色方块。把它放在渐变、图片或其他有细节的背景上,磨砂玻璃效果才会显现出来。
我需要加 -webkit-backdrop-filter 前缀吗?
如果你希望效果在 Safari 上稳定渲染,那就需要。这个工具始终会同时输出标准的 backdrop-filter 和加了 -webkit- 前缀的版本,因为 Safari 历来需要这个前缀才能应用模糊。
背景不透明度和模糊有什么区别?
背景不透明度控制的是你选的颜色遮罩显示多少,以及背后内容原样透出来多少。模糊控制的是那部分可见背景被涂抹/柔化的程度。玻璃拟态是两者一起用——一定的透明度加上一定的模糊——而不是单用其中一个。
backdrop-filter 可以用在任何元素上吗?
可以,但它只影响页面渲染中该元素视觉上背后的内容,不会影响元素自身的子元素。在部分设备上,如果把它应用到大量元素或频繁做动画,会有一定的性能开销,所以更适合用在少数几个重要的界面元素上,比如卡片、弹窗或导航栏,而不是几十个小元素。
为什么我的边框几乎看不见?
这个工具的边框用的是半透明白色,本来就是设计成很含蓄的——一圈淡淡的高光边缘,帮玻璃面板读出独立表面的感觉,而不是一条生硬、不透明的实线。如果想要更明显的边缘,可以调高边框不透明度滑块。