博客使用的 Butterfly 主题好看是好看,但是果然太费图片了……特别是有时候文章使用的 cover 图清晰度不是很高,在大屏幕上看默认的效果就可能很糊,比如之前文章里用的这张图:
如果能加上模糊效果的话,就能在一定程度上掩盖图片分辨率不足的缺陷,显得更加美观。
一般实现背景模糊,直接在元素上加 filter: blur(3px);
的样式就可以了,比如:
查看源码
1 2 3 4 5 6
| <style> .demo_img { filter: blur(3px); } </style> <img class="demo_img" src='/images/bg.webp'/>
|
但是这种方式有一个很大的问题,就是如果给元素设置模糊,对其子元素也是生效的,比如:
DebuggerX
查看源码
1 2 3 4 5 6 7 8 9 10 11 12
| <style> .demo_img { filter: blur(2px); background-image:url("/images/bg.webp"); } .demo_img > span { margin: 50px auto; } </style> <div class="demo_img"> <span>DebuggerX</span> </div>
|
可以看到 div 里的文字也变得模糊了,如果想要只让 div 模糊,文字清晰,就需要结构,把文字从 div 中挪出来:
查看源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <style> .demo_img { width: 50%; position: relative; display: flex; margin: auto; } .demo_img > div { background-image:url("/images/bg.webp"); filter: blur(2px); position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .demo_img > span { margin: 50px auto; z-index: 1; } </style> <div class="demo_img" style="position: relative"> <div> </div> <span>DebuggerX</span> </div>
|
这不仅需要额外的一个 div 作为定位容器,设置背景的 div 需要绝对定位,可能还需要调整内部文字或者其他元素的叠放次序。
而且针对现在博客的情况,页面元素和结构都是框架和主题自动生成的,如果要改,要么改源码,要么在页面生成后动态运行 js 脚本调整,都挺麻烦的……
那么没有不用改页面结构的方法么?
那就是 backdrop-filter
这个属性了:
https://developer.mozilla.org/zh-CN/docs/Web/CSS/backdrop-filter
这个属性的用法和 filter
相同,不同点是 backdrop-filter
可以让你为一个元素后面区域添加图形效果,同样上面的例子用它来实现:
DebuggerX
查看源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <style> .demo_img_backdrop { background-image:url("/images/bg.webp"); width: 50%; display: flex; margin: auto; position: relative; } .demo_img_backdrop:before { position: absolute; width: 100%; height: 100%; content: ''; backdrop-filter: blur(3px); } .demo_img_backdrop > span { margin: 50px auto; z-index: 1; } </style>
<div class="demo_img_backdrop"> <span>DebuggerX</span> </div>
|
测试下来兼容性还好,主流浏览器应该都能支持,但是感觉加上以后好像会影响部分设备浏览页面的流畅度,所以目前只应用在文章页面,主页的封面图还是保持原样吧