阅读 119

backdrop-filter,让你的网站熠熠生”毛’

前言

不知道大家有没有经常看到这种设计。

这种效果我们称之为毛玻璃效果。相信使用苹果的同学会很熟悉这种设计。

backdrop-filter 可以说是 CSS 中为毛玻璃量身定制的一个属性了。这也就是我在标题中使用熠熠生“毛”的原因了。

backdrop-filter

在 CSS 中还有一个属性叫 filter,这两个属性在语法层面是相同的。

filter 是将效果用于元素自身,而 backdrop-filter 则是将效果用于元素的背景。

先来看一下 MDN 上介绍的语法:

/* 关键词值 */ backdrop-filter: none; /* 指向 SVG 滤镜的 URL */ backdrop-filter: url(commonfilters.svg#filter); /* <filter-function> 滤镜函数值 */ backdrop-filter: blur(2px); backdrop-filter: brightness(60%); backdrop-filter: contrast(40%); backdrop-filter: drop-shadow(4px 4px 10px blue); backdrop-filter: grayscale(30%); backdrop-filter: hue-rotate(120deg); backdrop-filter: invert(70%); backdrop-filter: opacity(20%); backdrop-filter: sepia(90%); backdrop-filter: saturate(80%); /* 多重滤镜 */ backdrop-filter: url(filters.svg#filter) blur(4px) saturate(150%); /* 全局值 */ backdrop-filter: inherit; backdrop-filter: initial; backdrop-filter: unset; 复制代码

毛玻璃

注意点:必须使元素或其背景至少部分透明。

结构

<div>   <div>Life doesn't have to be perfect, but to be wonderful</div> </div> 复制代码

容器样式

.container{          position: relative;          width: 1000px;          height: 800px;          background: url(./bk.jpg);          background-repeat: no-repeat;    } 复制代码

卡片式样

使用 blur: backdrop-filter: blur(10px);

.card{      position: absolute;      top: 50%;      left: 50%;      height:50px;      line-height: 50px;      backdrop-filter: blur(10px);      transform: translate(-50% ,-50%);      padding: 0 20px;  } 复制代码

照片背景

对于下面的这种效果,我们来分析一下。 首先图片在上一层,下层是一个模糊的背景。

<div>   <img src="" class="Img"/> </div> 复制代码

 .bkImg {         background-color: #222;         align-items: center;         display: flex;         justify-content: center;         height: 100vh;         width: 100%;         position: relative;         background-image: url();         background-position: center;         background-repeat: no-repeat;         background-size: cover;       }       .Img {         position: relative;         max-height: 90%;         max-width: 90%;         z-index: 1;       } 复制代码

现在效果是这样的: 背景并不是我们所期望的,这里我们的背景是一张图片,这张图片跟上面的图片是一张图片。如果我们直接在 div 使用 backdrop-filter 的话,是否可行,答案是不可行。我们在上一个例子中明确指出。元素或者元素背景要透明或者干脆就没背景。

此时我们就考虑在 after 上添加。

  .bkImg::after {     backdrop-filter: blur(50px);     content: "";     display: block;     height: 100%;     left: 0;     position: absolute;     top: 0;     width: 100%;     z-index: 0;   } 复制代码

加点动画-日出东方

日出背景

<div> </div>  .card {       background-color: #f5f5f7;       padding-top:150px;       height: 300px;       display: flex;       flex-direction: column;       align-items: center;       margin: 64px 94px;       position: relative;     } 复制代码

太阳

<div>   <div></div>   <div></div> </div> .sun {   position: absolute;   top: 150px;   width: 130px;   height: 130px;   background-color: #ff6260;   border-radius: 50%;   animation: sunRise 5S; } .bk {   position: sticky;   bottom: 0;   width: 100%;   background-color: green;   padding-top: 64px;   padding-bottom: 8px;   height: 130px;   background-color: transparent;   display: flex;   align-items: center;   justify-content: center;   flex-direction: column;   margin-top: 32px;   backdrop-filter: blur(20px); } 复制代码

加上动画

@keyframes sunRise{   0%{       top:150px   }   100%{     top:0px;   } } 复制代码

效果


作者:前端picker
链接:https://juejin.cn/post/7015608045895942180


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐