网站首页 > 基础教程 正文
我们可能看到过这样的一个效果:页面中的内容滚动穿过某个固定元素时,会产生虚化的视觉效果,能看出文字的轮廓,但是却无法看到具体的内容,给人一种哎呦?不错哦的感觉。
我们来拿element-plus官网作为案例,看看它是如何实现的,然后我们再自己照着实现一版。
比如正常的文字显示是这样的:
虚化之后看起来是这个样子:
这个是element-plus官网中首页的效果,顶部有一个固定高度的头部横条,当页面滚动的时候,横条下面的文字就会显示成上面图中虚化后的样子。
首先来分析一下,如果是我们自己实现一个这样的效果,该怎么做呢?看来这个头部横条不能是一个纯白色的背景,因为要能看到文字,所以应该要有一个透明度,但是不能完全透明,因为它看起来不是那么的黑,然后我们观察到有毛玻璃的效果,所以我们要给它模糊一下。
先来做一个最初的原图,在这个基础上尝试几种方案:
从上面的分析中我们可以知道,主要的手段就是:背景+模糊。
我们先来用第一种方案做一下:背景透明度+模糊
它的代码非常简单
{
background-color: rgba(255,255,255,0.5);
backdrop-filter: blur(4px);
}
我们可以通过背景透明度和模糊的程度来调整视觉效果。
其中vite的官网就是这样实现的,只是参数有所改变,我们来看下它的效果和代码:
{
backdrop-filter: saturate(50%) blur(8px);
background: rgba(255,255,255,.7);
}
我们再看elemen-plus官网中的第二种方案:背景图+模糊
它的代码也很简单,我们可以对它简单的分析一下。
{
background-image: radial-gradient(transparent 1px,#ffffff 1px);
background-size: 4px 4px;
backdrop-filter: saturate(50%) blur(4px);
}
这里用到了径向渐变,径向渐变默认从中心向外扩散,其中transparent和#ffffff表示从透明过渡到纯白,两个1px的作用就是在1px处直接从透明变为白色,不产生渐变的过渡效果,因此从中心到1px距离处都是透明的,也就是半径为1px的圆内都为透明色,从1px之外都是显示成白色,它这里在实现的时候使用了单位区域4px的大小来绘制背景,然后通过背景重复的方式来平铺整个元素。
可以这样来理解,单位区域内,透明色为半径是1px的圆的范围,那么直径就是2px,为了分布平均,因此左右和上下都加上了1px的纯白,我们来设定一下background-repeat为no-repeat,看一下单位区域的效果,为了明显我们把颜色改一下:
这就是单位区域在页面中左上角显示的样子,红色就是原来的透明色,黑色就是原来的白色,为了看得明显,我把页面放大了500%,如果我把背景设置为重复:
可以看到就是这个样子,因此它后面的文字就会有一部分通过透明区域显示出来:
这个时候我们再加上模糊效果,那么就会显示成官网中的样子了。
那么还有没有其他的方法呢?
有!思路跟第二种类似,只不过我们不用径向渐变,而是使用线性渐变。
我们可以看到,径向渐变有误伤的像素,4px的大小会覆盖两个像素点,使我们看不见后面的文字,而且圆形不能使文字完全露出来。
最好是一个像素看不见,一个像素能看见,这样就像蒙了一层纱布一样均匀。
要想实现这样的效果,我们首先把单位区域设置成2px大小的正方形,然后借鉴一下CSS3 Patterns Gallary的鬼斧神工:
我们通过设置透明色和黑色来展示样子,同样页面放大了500%。代码如下:
{
background-image: linear-gradient(45deg, black 25%, transparent 25%, transparent 75%, black 75%, black), linear-gradient(45deg, black 25%, transparent 25%, transparent 75%, black 75%, black);
background-size: 2px 2px;
background-position: 0 0, 1px 1px;
}
我们再把背景重复一下:
这样就变成了一个透明像素一个黑色像素。我们把黑色变成白色再看实际的文字显示:
可以看到,文字就好像每隔一个像素点都被掏空了一样。
然后我们再加上之前用到的模糊,调整一下视觉效果:
这样就有了毛玻璃叠加纱布的视觉效果。完整代码如下:
{
background-image: linear-gradient(45deg, black 25%, transparent 25%, transparent 75%, black 75%, black), linear-gradient(45deg, black 25%, transparent 25%, transparent 75%, black 75%, black);
background-size: 2px 2px;
background-position: 0 0, 1px 1px;
backdrop-filter: blur(4px);
}
原理不难,技术也是很简单,都是一些好玩的css特性,实现的方式也很多。
创造力是无穷的,就看谁的花样多!
- 上一篇: 一篇文章带你了解SVG 渐变知识
- 下一篇: Go 每日一库之 fyne:跨平台 GUI 库
猜你喜欢
- 2025-01-16 CSS简易动画示例——太阳、地球、月球运动轨迹
- 2025-01-16 Go 每日一库之 fyne:跨平台 GUI 库
- 2025-01-16 一篇文章带你了解SVG 渐变知识
- 2025-01-16 echarts:虚线柱状图、渐变圆环以及纯css做圆环渐变效果
- 2025-01-16 CSS奇思妙想-使用background创造美妙背景(上篇)
- 2025-01-16 SVG 径向渐变
- 2025-01-16 仅使用一个 DIV 配合 CSS 实现饼状图
- 2025-01-16 Vue里使用Tailwind CSS,这不是耍流氓吗
- 2025-01-16 用纯CSS实现优惠券剪卡风格
- 2025-01-16 css背景设置
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)