css玻璃雨滴效果,CSS实现雨滴动画效果的实例代码

2023-10-27

玻璃窗

今天我们要实现的是雨滴效果,不过实现雨滴前,我们先把毛玻璃的效果弄出来,没有玻璃窗,雨都进屋了,还有啥好敲打的。

.window {

position: absolute;

width: 100vw;

height: 100vh;

background: url("https://cn.bing.com//th?id=OHR.ParrotsIndia_ZH-CN8386276023_UHD.jpg");

background-size: cover;

background-position: 100%;

filter: blur(10px);

}

其实就是给一张图片,做了个模糊化的效果,看起来像毛玻璃的效果

229049e54fcca4d83e468a57a76c9f15.gif

CSS实现雨滴动画效果的实例代码-1.jpg (49.02 KB, 下载次数: 0)

2020-7-22 17:49 上传

一滴雨

雨滴的效果就很巧妙了,让我们看下一滴雨完整的效果图

229049e54fcca4d83e468a57a76c9f15.png

CSS实现雨滴动画效果的实例代码-2.jpg (4.01 KB, 下载次数: 0)

2020-7-22 17:49 上传

这滴雨其实分为两个部分,第一部分是底部的阴影部分,其实是个边框来的,代码如下:

.border {

position: absolute;

margin-left: 92px;

margin-top: 51px;

border-radius: 100%;

box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.6);

transform: rotateY(0);

width: 20px;

height: 28px;

}

通过width和height属性和border-radius把border拉成一个椭圆形,然后用box-shadow把阴影拉出来,作为水滴的阴影,边框的最终效果如下:

229049e54fcca4d83e468a57a76c9f15.png

CSS实现雨滴动画效果的实例代码-3.jpg (2.75 KB, 下载次数: 0)

2020-7-22 17:49 上传

然后是水滴的部分

.raindrop {

filter: brightness(1.2);

position: absolute;

margin-left: 90px;

margin-top: 50px;

background-size: 5vw 5vh;

border-radius: 100%;

background-image: url("https://cn.bing.com//th?id=OHR.ParrotsIndia_ZH-CN8386276023_UHD.jpg");

transform: rotate(180deg) rotateY(0);

background-position: 48.1994160428% 54.3259834959%;

width: 24px;

height: 28px;

}

水滴用background-image设置了玻璃的图片作为倒影,倒影之所以是倒影,是因为影子是倒着的,所以用transform的rotate()旋转了图片180,正好倒过来通过background-position设置图片在水滴的显示的位置,后面不同的水滴会显示出的倒影因为图片位置的变化都不同,显得真实raindrop的width比border的width多几个像素,是为了让水滴的两边盖住border,只留border的上下显示阴影raindrop的margin-left和margin-top和border的也是略有不同,是为了raindrop能居中覆盖在border上面,使得水滴和阴影融合的更真实单独无阴影的水滴效果如下:

229049e54fcca4d83e468a57a76c9f15.png

CSS实现雨滴动画效果的实例代码-4.jpg (3.36 KB, 下载次数: 0)

2020-7-22 17:49 上传

随机雨滴

雨从来都不是一滴一滴来的,而且也不会很有规律的来,为了让雨滴随机出现在玻璃窗上,css-doodle框架。

先创建一个css-doodle的自定义组件

--rule: ( :doodle {

@grid: 10x10/ 100%;

overflow: visible;

}打出10*10个grid,这样最多可以出现100滴雨

transform: scale(@rand(.5, .9));

通过transform:scale让雨滴随机变大变小

:before {

content: '';

position: absolute;

margin-left: @var(--mleft);

margin-top: @var(--mtopb);

border-radius: 100%;

box-shadow: 0 0 0 @var(--shadow-size) rgba(0, 0, 0, 0.6);

transform: rotateY(0);

width: @var(--widthb);

height: @var(--height);

}

:after {

content: '';

filter: brightness(1.2);

position: absolute;

margin-left: @var(--mleft);

margin-top: @var(--mtopa);

background-size: 5vw 5vh;

border-radius: 100%;

background-image: url("https://cn.bing.com//th?id=OHR.ParrotsIndia_ZH-CN8386276023_UHD.jpg");

transform: rotate(180deg) rotateY(0);

background-position: @r(1%, 100%) @r(1%, 100%);

width: @var(--widtha);

height: @var(--height);

}

这里的:before和:after大家看的是不是很眼熟,其实:before里面的内容就是前面border的样式,:after里面的就是前面raindrop的样式。content必须要有,因为在伪元素(before,after)里如果没有设置“content”属性,伪元素是无用的,整个:before和:after里面的配置就都无效了。为了让雨滴显得更清晰,加了filter: brightness(1.2)让雨滴显得更亮一些。

这里面比较奇怪的是@var(),它其实就是css的变量,在css-doodle做了一层包装,作用和css的var()是一样的,我们看下这些变量的定义

--size:(4 + @r(1, 8));

--shadow-size: calc(((@var(--size)*0.3) - 1)*1px);

--mleft:@r(1, 100)px;

--mtop:@r(1, 100);

--mtop1:(@var(--mtop) - 1);

--mtopb:calc(@var(--mtop)*1px);

--mtopa:calc(@var(--mtop1)*1px);

--height:@r(15, 25)px;

--width:@r(8, 20);

--width1:(@var(--width) + 5);

--widthb:calc(@var(--width)*1px);

--widtha:calc(@var(--width1)*1px);这里有几个坑要说明一下:

1号坑:css-doodle提供了@calc(),但是这里计算还是要用css的calc(),使用@calc()无效。

2号坑:在使用@var做加减法的时候,+-号的两遍要有空格,否则计算无效,切记切记。

3号不是坑:计算好数值后,怎么带上px单位呢,用calc(value*1px)这种方法就可以了,其他的单位也可以用这种方法。

4号说明:为什么要用变量?是因为before和after不在一起,为了让boder和raindrop的margin-left、margin-top、width、height等属性能够保持一致,就需要用变量在before和after外面定义好,传值到里面去。

最终的效果如下:

229049e54fcca4d83e468a57a76c9f15.png

CSS实现雨滴动画效果的实例代码-5.jpg (18.14 KB, 下载次数: 0)

2020-7-22 17:49 上传

没动画效果怎么敲打我窗

雨点如果只是这样洒在窗户,那就没有敲打的意思,为了体现敲打,我决定让雨点动起来。

:before {

content: '';

position: absolute;

margin-left: @var(--mleft);

margin-top: @var(--mtopb);

border-radius: 100%;

box-shadow: 0 0 0 @var(--shadow-size) rgba(0, 0, 0, 0.6);

transform: rotateY(0);

width: @var(--widthb);

height: @var(--height);

opacity: 0;

animation: raindrop-fall 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275);

animation-fill-mode: forwards;

animation-delay: @var(--delay);

}

:after {

content: '';

filter: brightness(1.2);

position: absolute;

margin-left: @var(--mleft);

margin-top: @var(--mtopa);

background-size: 5vw 5vh;

border-radius: 100%;

background-image: url("https://cn.bing.com//th?id=OHR.ParrotsIndia_ZH-CN8386276023_UHD.jpg");

transform: rotate(180deg) rotateY(0);

background-position: @r(1%, 100%) @r(1%, 100%);

width: @var(--widtha);

height: @var(--height);

opacity: 0;

animation: raindrop-fall 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275);

animation-fill-mode: forwards;

animation-delay: @var(--delay);

}

重点是:before和:after里面的最后三行,是用来实现动画效果的。

cubic-bezier()控制动画的速度,使得雨滴落到玻璃窗的效果更逼真

animation-delay 雨点出现的时间随机,同样是为了效果更逼真,逼真的效果真麻烦

再来看看raindrop-fall的@keyframe设置

@keyframes raindrop-fall {

0% {

opacity: 0;

transform: rotate(180deg) scale(2.5, 2.3) rotateY(0);

}

100% {

opacity: 1;

transform: rotate(180deg) scale(1, 1) rotateY(0);

}

}

总结

以上所述是小编给大家介绍的CSS实现雨滴动画效果的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对咔叽论坛网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

css玻璃雨滴效果,CSS实现雨滴动画效果的实例代码 的相关文章

  • 临界区锁 InitializeCriticalSection()--- EnterCriticalSection()--LeaveCriticalSection()

    1 InitializeCriticalSection 此函数初始化一个临界区对象 格式 void InitializeCriticalSection LPCRITICAL SECTION lpCriticalSection 参数 lpCr
  • jmeter connect response timeout 默认超时时间

    jmeter connect response timeout 默认超时时间都是0 也就是会一直等下去 有时候不设置使用默认的配置 也会报错超时 这种超时可能是 nginx 等服务端主动断开 jmeter 源码 public int get
  • JavaWeb测试题

    第四小组 姓名 郑梦飞 说明 上方 组 填入所在的组 上方 姓名 填入自己的真实姓名 答题方式 基于Word文档基础上答题 编程题可利用工具编程完以后 复制到该文档内 答完以后 导成PDF 以姓名 PDF命名 上传至老师指定邮箱 一 选择题
  • VisualStudioCode开发Arm嵌入式Linux应用

    By Toradex胡珊逢 Visual Studio Code 在软件开发领域具有十分广泛的应用 其支持多种编程语言 丰富的插件极大得提高了开发效率 同时这也是一个非常开放的平台 本文接下来将介绍如何在 Visual Studio Cod
  • elasticearch 多种查询参数用法:

    range过滤器查询范围 gt gt 大于 lt lt 小于 gte gt 大于或等于 lte lt 小于或等于 多个range query bool filter range ymd gte 20181215 大于等于 lt 201812
  • GBase 8s数据库的空间管理

    GBase 8s数据库的空间管理 当使用GBase 8s的GBaseInit gbasedbt sh脚本创建数据库实例时 有一些参数无法指定 只能用于学习 真正的生产需要根据服务器的配置 规划并创建适合业务场景的数据库空间 以进行存储优化
  • 开发中RO,VO,DO,DTO,PO, BO, TO, CO, AO, SO的区别

    随着软件开发的不断发展 越来越多的概念被引入到开发中 其中就包括了RO VO DO DTO PO BO TO CO AO SO等概念 这些概念都是为了更好地组织代码 提高代码的可读性和可维护性而设计的 RO Resource Object
  • 127-Linux_Redis

    文章目录 一 Redis的基本概念 1什么是redis 2redis的特性 1 内存存储 2 数据持久化 3 多种数据结构 4 原子性操作 5 发布 订阅模型 6 高可用性 7 高并发性 二 Redis的数据结构 1 字符串 string
  • 关于程序间通信的两点应用

    由于ios程序本身采用沙盒结构 比较封闭 各个app间是比较独立的 但是ios还提供了一些app间通信的接口 可以利用这些接口 做些东西 1 判断系统里是否安装了某个app 比如新浪微博应用注册了URL scheme为 weibo 我们可以
  • 计算机编码规则

    英文 中文 解释 使用场景 bit 比特 一个位就代表一个0或1 即二进制 数据传输时以bit为单位 byte 字节 一个字节代表8位bit 2的8次方位 数据储存都是以byte位单位 字符 一个字符占几个字节由下面的编码方式决定 一个字符
  • Ant design pro-项目探究(7)react的markdown编辑器

    前言 普通的input和textarea已满足大部分的文本记录 但想要让输入文本更加多样化 markdown编辑器可谓是yyds 但是vue版本的markdown编辑器众多 基于react版本的编辑器就相当少一些 以下是整合和探究react
  • DNS术语中的CNAME、A、MX、TTL名词解释

    什么是域名解析 域名解析就是域名到IP地址的转换过程 IP地址是网路上标识您站点的数字地址 为了简单好记 采用域名来代替ip地址标识站点地址 域名的解析工作由DNS服务器完成 什么是A记录 A Address 记录是用来指定主机名 或域名
  • ffmpeg入门篇-滤镜的基本使用

    转发自白狼栈 查看原文 滤镜 什么是滤镜 百度百科介绍说 滤镜主要是用来实现图像的各种特殊效果 我们最早在ffmpeg是如何转码的一文中了解过滤镜 来回顾下当时的转码流程图 从图中可以看到滤镜前后画的是虚线 表示可有可无 在术语中 滤镜指的
  • 荣耀平板5可以升级鸿蒙系统吗,荣耀平板也要升级至鸿蒙系统了 今年Q4开始

    6 月 3 号消息 在 HarmonyOS 2 发布后 即将升级机型名单也正式来临 不仅仅是是华为相关设备 荣耀也有一些设备将要升级至鸿蒙系统 除了荣耀手机之外 荣耀平板也将升级为鸿蒙系统 在今年第四季度荣耀平板 6 荣耀平板 X6 两款平
  • 安装使用LangChain时的报错解决

    刚刚装了LangChain但是引入各种包都报错 原因貌似为 Python3 7 不支持 LangChain 需要开启一个新的Python3 10环境 再重新安装即可正常运行 创建新的python环境 conda create n new e
  • js 遍历数组取出字符串用逗号拼接

    var arr name abc name def function getTextByJs var str for let item of arr str arr name 去掉最后一个逗号 如果不需要去掉 就不用写 if str len
  • linux查询CPU信息几种方式

    CPU架构 CPU架构主要包括 amd64 arm32v7 arm64v8 mips64el mips32 ppc64le和ppc32等架构 CPU信息 CPU信息主要为中央处理器详细信息 包括 架构 核心数量 处理速度 厂商名称 CPU主
  • db2分页查询sql语句_08-Mybatis Plus分页及自定义SQL语句

    1 数据库的连接配置 首先我们要配置数据的连接等相关信息 因此我们需要在application properties文件中 增加如下定义 spring application name server page helperserver po
  • springboot如何区分测试环境、生产环境。分环境启动

    一 通过Maven打包时 将不同环境文件打入jar包来区分环境 然后直接启动jar包即可 1 pom xml文件project标签里面加入以下配置 环境关键字可以根据自己的习惯来改

随机推荐

  • C#基础代码笔记(二)

    文章目录 for循环嵌套 1 构造乘法表 2 构造加法表 循环练习 1 计算年龄平均值 2 登录账户 3 连加计算 4 计算百内质数 5 随机数 枚举 枚举类型格式 强制转换枚举类型 结构体 结构体与枚举类型混用 结构体练习 1 混合颜色调
  • 填充阴影线(45°细线、剖面线)——Visio制图总结(五)

    本文旨在解决图形填充阴影线问题 机械制图中又称剖面线 用以表示物体剖开的面 填充线条的差异表征了材质的不同 效果图 实现步骤 1 选中封闭的图形 比如矩形 线段围成的图形需封闭 右键打开设置形状格式 2 找到设置形状格式中的填充面板 在模式
  • 线程池必须是单例模式

    线程池一定要在合理的单例模式下才有效 工作中我发现有些同学将线程池的创建方法放在services方法里面去创建线程池 这是不可以的 因为每当这个方法被调用的时候不是创建多少个线程的问题了 而是创建出来了一大堆线程池
  • Redis键值类型<key value> 以及键的使用注意事项

    Redis的常用键值对 Redis的键值对 Redis是以键值 Key Value 为基础 支持不同类型值 value 的数据结构服务器 在传统键值存储中 一般将字符串键与字符串值相关联 而在Redis中 该值不仅限于简单的字符串 还可以容
  • web前端技术笔记(八)屏幕适配、移动端布局

    屏幕适配 移动端与PC端页面布局区别 视口 视网膜屏幕 retina屏幕 清晰度解决方案 适配布局类型 PC及移动端页面适配方法 流体布局 响应式布局 基于rem的布局 流体布局案例 不常用 rem布局案例 CSS3 浏览器前缀 浏览器样式
  • 【mysql+tableau实战】电商用户行为数据分析

    正文共3289字 今年2月做的项目 为了求职又梳理了一遍 希望能进一步提升自己的数据分析思维 博客名字改失败了 得4月中旬才能修改 cry 目录 一 前期准备 一 数据集下载 二 软件下载 1 kettle 2 mysql8 0 3 tab
  • Grafana任意文件读取

    Grafana任意文件读取 漏洞描述 Grafana存在任意文件读取漏洞 通过默认存在的插件 可构造特殊的请求包读取服务器任意文件 影响版本 Grafana 8 x 漏洞复现 POC HTTP XXX XXX XXX XXX public
  • linux频繁读写i2c,ZYNQ7020 在Linux下I2C频繁读取导致系统崩溃

    I2C连续频繁读取单字节 读取频率20hz 每次读写20次 每次需要读取不同地址单字节 系统崩溃前多次出现i2c连接超时错误 一款传感器芯片 崩溃时间不定 几个小时崩溃 有时几分钟崩溃 cdns i2c e0004000 i2c timeo
  • Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

    程序争取运行结束的提示是 Process finished with exit code 0 如果程序出现Process finished with code 137 interrupted by signal 9 SIGKILL 程序并没
  • selenium webdriver (python)的基本用法一

    前言 对于大多软件测试人员来讲缺乏编程经验 指项目开发经验 大学的 C 语言算很基础 的编程知识 一直是难以逾越的鸿沟 并不是说测试比开发人员智商低 是国内的大多测试 岗位是功能测试为主 在工作时间中 我们很难深入的接触和使用编程技术 笔者
  • [Python人工智能] 十六.Keras环境搭建、入门基础及回归神经网络案例

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章详细讲解了无监督学习Autoencoder的原理知识 然后用MNIST手写数字案例进行对比实验及聚类分析 这篇文章将开启Keras人工智能的学习 主要分享
  • 共享虚拟主机是不是服务器,共享虚拟主机是什么意思

    共享虚拟主机是什么意思 发布时间 2020 10 15 16 49 47 来源 亿速云 阅读 69 作者 Leah 栏目 云计算 这篇文章将为大家详细讲解有关共享虚拟主机是什么意思 文章内容质量较高 因此小编分享给大家做个参考 希望大家阅读
  • 微信小程序开发之详解生命周期方法

    生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 通过App 来注册一个小程序 通过Page 来注册一个页面 先来看一张小程序项目结构 根目录下面有包含了app js app wxss app json三个文件 这是小程序的全局文
  • c++模板的成员模板

    成员模板 成员模板 一个类 无论是普通类还是模板类 可以包含本身是模板的成员函数 成员模板不能是虚函数 普通类的成员模板 class DebugDelete public DebugDelete std ostream s std cerr
  • 在一定范围内的 Hash 爆破尝试

    爆破 SHA1 import hashlib cipher 6E32D0943418C2C33385BC35A1470250DD8923A9 lower for i in range 49 58 for j in range 48 58 f
  • CSS中使用flex弹性布局实现上下左右垂直居中排列并设置子元素之间的间距

    场景 Flex是Flexible Box的缩写 意为 弹性布局 怎样使用弹性布局实现页面上下两个元素上下左右垂直居中排列 实现如下类似布局 最外层是是一个div div里面是上面一个照片 下面一个表单 这两个元素居中排列 注 博客 霸道流氓
  • Unity3D镜头眩光组件Lens Flare

    在自然界中 由于亮度差异过大的时候 容易产生镜头眩光 为了增加场景的真实性 某些情况下我们也需要用到该组件 右键点击创建一个新的flare 这是个结构比较简单的组件 只需要拖入眩光的图片即可 然后在产生眩光的灯光上添加lens Flare组
  • 刀剑乱舞网页服务器闪退,刀剑乱舞无法打开怎么办 刀剑乱舞闪退解决方法

    刀剑乱舞无法打开怎么办 刀剑乱舞闪退解决方法 有些网友在玩游戏时 刀剑乱舞游戏无法打开 这是怎么回事呢 下面我们就一起来看看刀剑乱舞闪退解决方法吧 刀剑乱舞手游卡了怎么办 卡机闪退解决方法有哪些 刀剑乱舞手游今天开服 不少玩家遇到了卡机和闪
  • shell通过fio工具进行磁盘性能测试

    一 环境准备 已安装fio工具可忽略此步骤 准备一台centos服务器 要求能够访问互联网 安装fio工具 yum y install fio fio version 二 脚本内容 直接复制脚本到自己的主机中 我这里命名为fio sh bi
  • css玻璃雨滴效果,CSS实现雨滴动画效果的实例代码

    玻璃窗 今天我们要实现的是雨滴效果 不过实现雨滴前 我们先把毛玻璃的效果弄出来 没有玻璃窗 雨都进屋了 还有啥好敲打的 window position absolute width 100vw height 100vh background