5分钟用CSS实现毛玻璃效果 CSS Glassmorphism

2023-10-31 06:30

本文主要是介绍5分钟用CSS实现毛玻璃效果 CSS Glassmorphism,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 视频

2 知识点

2.1 CSS calc() 函数

2.2 CSS var() 函数

2.3 backdrop-filter 

2.4 CSS3 box-sizing 属性

2.5 实现思路

3 参考代码

3.1 HTML

3.2 CSS


1 视频

视频地址:https://www.bilibili.com/video/BV1Ny4y1U7hp

5分钟实现CSS毛玻璃效果,王冰冰照片毛玻璃效果

 

2 知识点

2.1 CSS calc() 函数

CSS calc() 函数用于动态计算长度值。

语法

calc(expression)

描述

expression

必须,一个数学表达式,结果将采用运算后的返回值。

需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px); 

任何长度值都可以使用calc()函数进行计算;

calc()函数支持 "+", "-", "*", "/" 运算; 

calc()函数使用标准的数学运算优先级规则; 

支持版本:CSS3

2.2 CSS var() 函数

var() 函数用于插入自定义的属性值,如果一个属性值在多处被使用,可以使用该方法。

支持版本:CSS3

语法

var(custom-property-name, value)

描述

custom-property-name

必需。自定义属性的名称,必需以 -- 开头。

value

可选。备用值,在属性不存在的时候使用。


 

2.3 backdrop-filter 

backdrop filter属性允许我们使用css对元素后面的内容应用过滤效果。

此属性是定义筛选器属性的筛选器效果模块级别1的扩展。它使用与filter属性相同的语法,但效果将应用于元素的背景。这种影响常见于运行ios7及以上版本的设备接口,以及os x yosemite及以上版本的设备接口。如果没有这个特性,这种效果只能通过编辑背景图像本身并应用剪裁和定位技术来实现。

若要使属性具有任何可见效果,需要从嵌套元素或绝对位置沿Z轴将两个元素堆叠在一起。另外,应用背景过滤器的元素的背景必须是半透明的。backdrop filter的工作原理是使浏览器引擎将目标锁定在样式元素后面的内容,而不是元素本身的背景。过滤效果随后应用于该内容,在最终呈现中,背景与页面上的其他元素合成。

对元素应用背景过滤器也会创建新的堆叠上下文,就像应用不透明度时一样。

语法:

backdrop-filter: none | <filter-function-list>

首字母: 无

适用于: 所有元素。在svg中,它应用于没有<defs>元素和所有图形元素的容器元素

可设置动画: 是

<filter-function-list>

一个空间分隔的过滤函数列表,应用于它们被声明的顺序。下面是可用的筛选器函数列表,它们与筛选器属性的筛选器功能相同。

  • blur()

    brightness()

    contrast()

    grayscale()

    hue-rotate()

    invert()

    opacity()

    saturate()

    sepia()

    drop-shadow()

    url()

2.4 CSS3 box-sizing 属性

Box-sizing 属性允许你以某种方式定义某些元素,以适应指定区域。

例如,假如您需要并排放置两个带边框的框,可通过将 box-sizing 设置为 "border-box"。这可令浏览器呈现出带有指定宽度和高度的框,并把边框和内边距放入框中。

默认值:content-box
继承:no
版本:CSS3
JavaScript 语法:object.style.boxSizing="border-box"

语法

box-sizing: content-box|border-box|inherit:
说明
content-box这是 CSS2.1 指定的宽度和高度的行为。指定元素的宽度和高度(最小/最大属性)适用于box的宽度和高度。元素的填充和边框布局和绘制指定宽度和高度除外
border-box指定宽度和高度(最小/最大属性)确定元素边框。也就是说,对元素指定宽度和高度包括了 padding 和 border 。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。
inherit指定 box-sizing 属性的值,应该从父元素继承

 

2.5 实现思路

1. 定义三个box,布局方式都为absolute。

2. 第一个box 放背景图片,第二个box实现模糊过滤,第三个box放要显示的图片。

3. 通过监听鼠标移动,改变css 自定义属性值,通过calc(), var()函数获取计算自定义属性值实现移动效果。

3 参考代码

3.1 HTML

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>毛玻璃效果:微信公众号AlbertYang</title></head><link rel="stylesheet" type="text/css" href="style.css" /><body><section><div class="imgBx"><h1>毛玻璃效果</h1></div><div class="box box1"></div><div class="box box2"><h1>毛玻璃效果</h1></div></section><script>const position = document.documentElement;position.addEventListener('mousemove', e => {position.style.setProperty('--x', e.pageX + 'px');position.style.setProperty('--y', e.pageY + 'px');})
</script></body>
</html>

3.2 CSS

* {margin: 0;padding: 0;box-sizing: border-box;
}
section {position: absolute;top: 0;left: 0;width: 100%;height: 100%;overflow: hidden;
}
section .imgBx {position: absolute;top: 0;left: 0;width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;background: url(wbb.jpg);background-size: 100%;background-position: calc(var(--x)/5) calc(var(--y)/5);
}
section .box {position: absolute;top: 0;left: 0;width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;backdrop-filter: blur(10px);
}
section .box.box2 {background: url(wbb.jpg);background-size: 100%;clip-path: circle(260px at center);background-position: calc(var(--x)/5) calc(var(--y)/5);
}
section .box.box2::before {content: "";position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);width: 520px;height: 520px;box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.25);z-index: 10;border-radius: 50%;
}
section h1 {position: absolute;margin-top: 30%;color: #fff;font-size: 88px;transform: translate(calc(var(--x)/5), calc(var(--y)/5));
}

今天的学习就到这里了,由于本人能力和知识有限,如果有写的不对的地方,还请各位大佬批评指正。如果想继续学习提高,欢迎关注我,每天学习进步一点点,就是领先的开始,加油。如果觉得本文对你有帮助的话,欢迎转发,评论,点赞!!!

这篇关于5分钟用CSS实现毛玻璃效果 CSS Glassmorphism的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313471

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount