CSS3----实现⽑玻璃完美效果
其实⽑玻璃的模糊效果技术上⽐较简单,只是⽤到了 css 滤镜(filter)中的 blur 属性。但是要做⼀个好的⽑玻璃效果,需要注意很多细节。
⽐如我们需要将上图中页⾯中间的⽂字区域变成⽑玻璃效果,⾸先想到的是给其设置⼀个透明度,并添加模糊滤镜:
.content {
background-color: rgba(0,0,0,0.3);
-webkit-filter: blur(2px);
-moz-filter: blur(2px);
-ms-filter: blur(2px);
-o-filter: blur(2px);
filter: blur(2px);
}
可是⽣成的效果却是下⾯这样:
从这个失败的例⼦我们得到两个结论:
1. 对元素直接使⽤模糊会将其内容全部模糊掉,为了保证⽂字不会模糊掉需要多⼀个层单独应⽤模糊效果。
2. 模糊效果并不会应⽤到其背后的元素上,所以需要使⽤ content 区域有和背景相同的背景图并进⾏模糊。
先解决第⼀个问题:
多⼀个层级的⽅法不通过添加元素,⽽通过伪元素。
.content {
z-index: 1;
}
.content:after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255,255,255,0.8);
z-index: -1;
}
这⾥有两点需要注意,由于伪元素不能通过 width:100% 和 height:100% 来继承宿主元素的尺⼨,所以通过上述⽅式来继承 content 的尺
⼨;为了使伪元素位于 content 的下⾯这⾥给其设置 z-index:-1,为不使其隐藏到背景图的后⾯,这⾥给 content 设置 z-index:1。
效果:
接下来给 content::after 设置相同的背景图。
如上图,即使我们设置了相同的 background-postion 与 background-size,中间部分的图和⼤背景还是没有拼接成功。
解决这个问题的⽅法很简单,只需要添加 background-attachment: fixed 属性,之后为其进⾏模糊处理。
.
content {
background-position: center top;
background-size: cover;
}
.content::after {
background-image: url(xxx.jpg);
background-position: center top;
background-size: cover;
background-attachment: fixed;
-webkit-filter: blur(20px);
-moz-filter: blur(20px);
-
css特效文字ms-filter: blur(20px);
-o-filter: blur(20px);
filter: blur(20px);
}
可以看到基本得到了我们想要的效果,美中不⾜的是在元素的边缘模糊的效果减弱了。为了解决这个问题,我们将伪元素的范围扩⼤⼀些,
同时为了效果不超出 content 的范围,给其设置 overflow:hidden 属性。
.content {
overflow: hidden;
}
.content::after {
margin: -30px;
}
这样⼀个⽐较完美的⽑玻璃效果就完成了,⽆论你如何改变浏览器窗⼝的尺⼨,content 部分的背景图都能很好的与背景拼接,这都归功于background-attachment 属性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论