CSS如何实现毛玻璃效果

刘隆-产品设计师
• 阅读 464

CSS 如何实现毛玻璃效果

写在前面

之前在逛一些网站的时候,就经常看见一些图片背景模糊的效果,这样的效果可以使得用户将更多的注意力放在清晰的地方上,可以不经意间引导用户。

我就很好奇,这样的一种效果是怎么实现的。恰好这几天周末,顺便弥补一下我拙劣的css知识。
通过查找一些资料,我发现这样的效果大致可以使用两种方法来实现:

  1. 传统的filter
  2. css3新特性:backdrop-filter

下面我就主要讲述这两种方法的实现。

传统的filter

首先就讲一下比较老一点的方法,filter(过滤),听这名字,就知道里面可以实现功能不仅仅是实现毛玻璃这样的效果。

    filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();
复制代码

可以看到这个属性里面有很多的功能,其中就包括了模糊的功能,blur(),这个属性可以实现模糊的效果,但是这个属性是不支持IE的,所以如果你的项目需要兼容IE的话,那么这个方法就不适合你了。(但是还好IE已经停止更新了)

    filter: blur(10px);
复制代码

那就用一个例子来说明一下这个功能吧。

<div class="test"></div>
复制代码

为了方便,我们只使用一个div盒子

css代码如下:

.test {
    width: 400px;
    height: 200px;
    filter: blur(2px);
    background: url(background.png) no-repeat;
}
复制代码

这个图片地址是我本机的图片地址,所以你们可能看不到效果,但是你们可以自己找一张图片,然后把地址改成你们的图片地址就可以了。

效果如下:

CSS如何实现毛玻璃效果

为了对比更加明显,加一个没有模糊效果的图片:

CSS如何实现毛玻璃效果

但是使用这个方法的话,就会有一个问题,就是如果你的图片是一个动态的图片,那么这个模糊的效果就会跟着动态的图片一起动,这样的效果就不是我们想要的了。并且这个方法的模糊效果会影响到子元素,比如我在图片中间放一个盒子(子元素),那么盒子里面的内容也会被模糊掉。

就像这样

CSS如何实现毛玻璃效果

我在子盒子里面放了1-6的数字,但是数字被模糊掉了,这样的效果就不是我们想要的了。

所以就有了第二种方法实现:

css3新特性:backdrop-filter

这个属性是css3的新特性,所以兼容性不是很好,但是现在的浏览器都已经支持了,所以这个方法还是可以使用的。

    backdrop-filter: none|filter|initial|inherit;
复制代码

可以看到这里有四个属性,其中filter就是我们需要的属性,

当然在filter属性里面也有很多的功能,我们只需要用到模糊的功能就可以了,blur()。

    <div class="test">
        <div class="child">123456</div>
    </div>
复制代码

然后接下里,就是css代码:

    .test {
            width: 1200px;
            height: 800px;
            background: url(background.png) no-repeat;
        }
    .child {
            width: 600px;
            height: 200px;
            position: absolute;
            left: 50%;
            margin-left: -60px;
            top: 50%;
            margin-top: -100px;
            background-color: rgba(255, 255, 255, .7);
            backdrop-filter: blur(10px);
        }
复制代码

首先放一张没有模糊效果的图片: CSS如何实现毛玻璃效果

接下来就是效果图:

CSS如何实现毛玻璃效果

可以很明显得看到,这次我们模糊的知识盒子的背景,并有模糊掉盒子本身的内容,这就是backdrop-filter的优势所在。

总结

这两种方法都可以实现模糊效果,但是第二种方法的兼容性不是很好,所以如果你的项目需要兼容性比较好的话,那么就使用第一种方法,如果你的项目不需要兼容性的话,那么就使用第二种方法。

还有就是第一种毛玻璃效果会影响后面子元素,导致后面子元素也会被模糊掉。所以如果你的项目中有子元素并且不愿意被模糊的话,那么就建议使用第二种方法。

点赞
收藏
评论区
推荐文章
js + css实现点击 波纹效果
有时候我们为了增加用户体验,可能会有一些点击样式类似框架中的haverclass这里简单用jscss实现一个点击效果(类似水波纹)大体思路1.获取点击时鼠标坐标(相对于父元素)2.在当前点创建节点(设置对应的样式)3.设置定时器,移除节点Okjsdom<divclass"box"<button
代码哈士奇 代码哈士奇
3年前
uni-app/vue 引入 Animate.css (好看且实用的动画库)
开发一个程序的时候,我们总想着程序能有各种各样的组件效果比如弹跳的球等等,像ppt动画那样的效果整合了Animate.css我们程序的逼格会高很多的,相信我Animate.css官网这个网站也是整合了Animate.css引入执行npminstallanimate.csssave在main.js中import'animate.css';如何使
Jacquelyn38 Jacquelyn38
3年前
天哪!几行js代码就可以实现拳皇小游戏
前言今天,我们用原生JS实现一个拳皇人物位置控制的小效果。话不多说,我们赶紧来看下如何实现吧!效果(非静止八神)分别按W、S、A、D键可实现位置移动,并且效果真实。源码html与css很简单,主要是js中有几点需要注意的。<!DOCTYPE html<html lang"en"<head <meta charset"UTF8" <title游
徐小夕 徐小夕
3年前
如何使用css3实现一个类在线直播的队列动画
之前在群里有个朋友问了这样一个问题,就是如何在小程序中实现类似直播平台的用户上线时的队列动画?作为一名前端工程师,解决方案无非以下2种:1.使用javascript根据条件来控制元素的样式实现队列动画2.用纯css3配合数据驱动模型来实现.大家都知道在现代的Web开发中,我们能使用Css实现的效果尽量不要用Js,所以我们应该优先考虑用C
徐小夕 徐小夕
3年前
《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画
今天我们来继续复盘一些工作中常用的css技巧和知识,以便我们可以更加优雅的用css实现富有动感的网站.你将收获网站换肤设计方案介绍:target伪类介绍和用法以及如何使用css实现网站换肤transition动画以及如何用纯css实现焦点图动画效果展示1.网站换肤(https://imghelloworld.ossc
Wesley13 Wesley13
3年前
JS动画与CSS动画
一、JS动画(setIntervalsetTimeOutrequestAnimationFrame)优点:  1)过程控制能力强。可以对动画工程进行精准的控制,暂停、取消、开始、终止都可以。  2)动画效果多、炫酷。有一些效果是CSS动画所不能实现的  3)兼容性比较高缺点:   1)由于JS是通过不断的操
Wesley13 Wesley13
3年前
CSS3的基础知识学习(二)
前言:CSS主要是用来修饰标签的样式、使得网页更加美观,其实css的引用有三种方式,但主要是使用链接引用,意思就是我们写一个.css的文件,将样式修饰的控制代码写在这里面,这样控制起来方便快捷。对于CSS的学习,知识点中最重要的部分就是属性和选择器,其次还有页面布局和盒子模型,下面进行学习以及代码效果演示。一、CSS的三种引入
可莉 可莉
3年前
19 年学好前端的6点建议
1\.夯实基础要成为一名年薪30W的前端工程师,基础一定要掌握牢固,基础知识一问三不知,岂不是要贻笑大方。css,js基础知识一定要掌握得很熟练,你能使用css实现斑马条纹背景,毛玻璃效果吗?能给图片实现滤镜效果,能实现所有自适应布局效果吗?原型,原型链,闭包是实现设计模式的必备知识,你真的弄懂了吗?闭包导致内存泄漏的原因
Wesley13 Wesley13
3年前
CSS中的滤镜
设计网页时合理的为页面应用滤镜,可以起到非同凡响的效果。CSS滤镜分为基本滤镜和高级滤镜,基本滤镜又称为视觉滤镜,只要将其应用于对象上,便可以立即产生视觉特效,但其效果远不及高级滤镜。css的滤镜标示符是filter,在创建滤镜时首先要对filter进行定义,使用方法同其他css语法。一、Alpha滤镜:对图像,文字设置透明效果1、语法.
京东云开发者 京东云开发者
11个月前
WebSocket魔法师:打造实时应用的无限可能 | 京东物流技术团队
1、背景在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是依然有很多缺点,缺点就不在这里说了,感兴趣的小伙伴可以自行
刘隆-产品设计师
刘隆-产品设计师
Lv1
男 · 国家特务组 · 产品设计师
用AI构建有趣产品
文章
4
粉丝
4
获赞
6