项目需要是实现背景的高斯模糊:
如果使用filter: blur(5px);
会使得元素整体模糊, 并不符合设计图:
百度找到的思路大多都是用一个元素(伪元素)绝对定位, 放在需要有背景模糊的盒子下面, 然后让绝对定位的元素高斯模糊, 这个方法可以实现, 但是太麻烦.
最终解决方法使用:backdrop-filter
:
backdrop-filter
backdrop-filter CSS 属性可以让你为一个元素后面区域添加图形效果(如模糊或颜色偏移)。因为它适用于元素背后的所有元素,为了看到效果,必须使元素或其背景至少部分透明。
根据作用描述, 正好是需要的功能
backdrop-filter和filter的语法是一模一样的:
/* 关键词值 */
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: revert;
backdrop-filter: unset;
各个滤镜方法对应含义如下表:
滤镜 | 释义 |
---|---|
blur | 模糊 |
brightness | 亮度 |
contrast | 对比度 |
drop-shadow | 投影 |
grayscale | 灰度 |
hue-rotate | 色调变化 |
invert | 反向 |
opacity | 透明度 |
saturate | 饱和度 |
sepia | 褐色 |
根据设计图的需要, 只要是背景设置为高斯模糊即可:
backdrop-filter: blur(23px);
效果:
但是设计图的模糊不单单是背后图片的颜色, 而是有些偏白的, 因此可以给元素加个白色的半透明的背景色或半透明的白色背景图, 至于为什么一定要半透明, MDN 有写:
再加一行代码:
backdrop-filter: blur(23px);
background: rgba(255, 255, 255, 0.3):
效果:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。