CSS 实现背景模糊

项目需要是实现背景的高斯模糊:
image.png

如果使用filter: blur(5px);会使得元素整体模糊, 并不符合设计图:
image.png

百度找到的思路大多都是用一个元素(伪元素)绝对定位, 放在需要有背景模糊的盒子下面, 然后让绝对定位的元素高斯模糊, 这个方法可以实现, 但是太麻烦.

最终解决方法使用:backdrop-filter:

backdrop-filter

backdrop-filter CSS 属性可以让你为一个元素后面区域添加图形效果(如模糊或颜色偏移)。因为它适用于元素背后的所有元素,为了看到效果,必须使元素或其背景至少部分透明。

根据作用描述, 正好是需要的功能
backdrop-filter和filter的语法是一模一样的:

/* 关键词值 */
backdrop-filter: none;

/* 指向 SVG 滤镜的 URL */
backdrop-filter: url(commonfilters.svg#filter);

/*  滤镜函数值 */
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: revert;
backdrop-filter: unset;

各个滤镜方法对应含义如下表:

滤镜 释义
blur 模糊
brightness 亮度
contrast 对比度
drop-shadow 投影
grayscale 灰度
hue-rotate 色调变化
invert 反向
opacity 透明度
saturate 饱和度
sepia 褐色

根据设计图的需要, 只要是背景设置为高斯模糊即可:

backdrop-filter: blur(23px);

效果:image.png

但是设计图的模糊不单单是背后图片的颜色, 而是有些偏白的, 因此可以给元素加个白色的半透明的背景色半透明的白色背景图, 至于为什么一定要半透明, MDN 有写:

image.png

再加一行代码:

backdrop-filter: blur(23px);
background: rgba(255, 255, 255, 0.3):

效果:
image.png

https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter

你可能感兴趣的:(前端css3)