毛玻璃效果(Glassmorphism)是目前非常流行的设计新趋势,你可以在 Dribbble 等网站上看到毛玻璃效果,甚至像 Apple 和 Microsoft 这样的大公司也在使用它。

让我来介绍一下新的设计趋势:毛玻璃效果

什么是毛玻璃效果

基本上,它的主要特征就是半透明的背景,以及阴影和边框。

同时还要为背景加上模糊效果,使得背景之后的元素根据自身内容产生漂亮的“变形”效果。

示例:

image.png

这是一个应用毛玻璃效果的真实示例,可以在 ui.glass 网站上查看(它是一个即将推出的 UI 库)。

你可以在上图中右侧代码后面看到我所说的模糊效果,后方的内容产生了漂亮的变形效果,同时还保持了可读性,赏心悦目。

这就是本教程要构建出的效果。我们将看到如何仅用 HTML 和 CSS 来实现它。

开始

学习本教程,你只需要一个浏览器和一个代码编辑器,因为我们只会用到 HTML 和 CSS。

我们将要构建的元素的最终效果如下:

image.png

毛玻璃效果示例

首先,创建一个 HTML 文件,写入如下内容:

<!DOCTYPE html><html lang="en"><head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Glassmorphism effect</title></head><body>
    <!-- code goes here --></body></html>

我不太喜欢默认的字体,让我们使用更好看的 Google Fonts 字体。我很喜欢 Inter 字体,在 head 标签中将其引入:

<link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">

Google Fonts

现在,为 body 标签添加一些样式,并使用鲜艳的颜色和渐变作为背景:

body {
  padding: 4.5rem;
  margin: 0;
  background: #edc0bf;
  background: linear-gradient(90deg, #edc0bf 0,#c4caef 58%);
  font-family: 'Inter', sans-serif;}

很好!现在基本的标签和样式做好了,接下来在 body 标签里创建一个卡片元素:

<div class="card">
    <h3 class="card-title">Glassmorphism is awesome</h3>
    <p>A modern CSS UI library based on the glassmorphism design principles that will help you quickly design and build beautiful websites and applications.</p>
    <a href="https://ui.glass">Read more</a></div>

卡片中的内容是什么无关紧要——你可以加入一些按钮、图标或者其他元素。

在卡片上应用毛玻璃效果之前,先添加一些排版样式,加入以下 CSS:

.card {
  width: 400px;
  height: auto;
  padding: 2rem;
  border-radius: 1rem;}.card-title {
  margin-top: 0;
  margin-bottom: .5rem;
  font-size: 1.2rem;}p, a {
  font-size: 1rem;}a {
  color: #4d4ae8;
  text-decoration: none;}

很好!接下来将会演示如何应用这个特殊的效果。

如何使用 CSS 制作毛玻璃效果

你要做的只是设置一个半透明背景颜色,并使用 backdrop-filter 属性设置模糊效果。在 .card 元素的样式中加入以下 CSS:

.card {
	/* other styles */
	background: rgba(255, 255, 255, .7);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);}

使用 CSS 制作毛玻璃效果

现在我们已经为卡片加上了毛玻璃效果的样式,可是为什么看起来没效果?

我们还需要在卡片后面加上一些元素,如一些形状或者图片,以便看到它的实际效果。

image.png

后方没有形状时的效果

让我们使用 img 标签在 body 起始标签之后加入一个形状图片:

<img class="shape" src="https://s3.us-east-2.amazonaws.com/ui.glass/shape.svg" alt="">

并为 .shape 元素添加以下样式,将其定位在页面的合适位置:

.shape {
  position: absolute;
  width: 150px;
  top: .5rem;
  left: .5rem;}

现在你应该能看到完整的毛玻璃效果了,恭喜!

image.png

毛玻璃效果示例

可以在这里查看本教程的完整代码。

浏览器支持

毛玻璃效果的主要缺点之一就是 backdrop-filter 属性在 Internet Explorer 11 上不被支持,而且 Firefox 默认禁用了这个属性。

image.png

backdrop-filter 的浏览器支持情况

然而,根据 caniuse.com 网站的数据,全世界超过 88.2% 的浏览器支持这个样式。如果 Firefox 决定默认启用这个属性,并且随着过时浏览器(如 IE 11)的使用率下降,我相信未来几年毛玻璃效果会得到更广泛的应用。

在此之前,尽管在你的个人项目中使用它吧,或者使用这个神奇的设计来创建一些页面玩一玩。