前端纯CSS3实现图片Logo鼠标悬停(hover)光泽一闪而过的光影特效
liuian 2025-01-11 15:10 43 浏览
喜欢看电影的朋友肯定会注意到一个有趣的细节,就是电影出品方一定会在片头的Logo环节做一个小特效:暗影流动之间光泽一闪而过,这样做不仅可以提高Logo的辨识度,还可以提升质感,一举两得。参照华纳兄弟影业(Warner Bros. Pictures)的例子:
那么,在前端领域,如果使用纯CSS技术,能不能实现类似的特效呢?答案当然是可以的,这次我们以本站的Logo为例子,以一持万、提纲挈领地讲解一下如何使用纯CSS技术实现图片Logo鼠标悬停光泽一闪而过的光影特效。
一般情况下,大多数前端开发会选择 linear-gradient() ,这个方法创建一个表示两种或多种颜色线性渐变的图片。其结果属于<gradient>数据类型,是一种特别的<image>数据类型。
简单用法:
/* 渐变轴为45度,从蓝色渐变到红色 */
linear-gradient(45deg, blue, red);
/* 从右下到左上、从蓝色渐变到红色 */
linear-gradient(to left top, blue, red);
/* 从下到上,从蓝色开始渐变、到高度40%位置是绿色渐变开始、最后以红色结束 */
linear-gradient(0deg, blue, green 40%, red);那么它怎么和logo图片结合使用呢?首先创建一个对象,因为是logo,所以我使用a标签,也就是超级链接,随后声明伪类mylogo:
<a href="/" class="mylogo" title="刘悦的技术博客"></a>之后,定义logo的样式:
.mylogo{
display:block;
margin: 0 auto;
width:255px;
height:200px;
background-image:/logo.png;
background-repeat: no-repeat;
}接着就是linear-gradient()出场,原理并不复杂,利用linear-gradient绘制一个白色半透明渐变层,利用背景的负坐标隐藏起来,同时配合transition属性,在鼠标悬停(hover)的时候,设置1秒钟的延时动画,逐渐将光斑的坐标进行位移,产生一种光泽掠过的效果:
.mylogo{
width: 255px;
height: 200px;
background: -webkit-linear-gradient(left, rgba(255,255,255,0)0, rgba(255,255,255,0.5)50%, rgba(255,255,255,0)100%) no-repeat -270px 0, url(/logo.png) no-repeat;
transition: 1s ease;
}
.mylogo:hover {
background-position: 200px 0, 0 0;
}这里需要注意的是,默认负坐标一定要超过logo本体的宽度,否则位移就不够充分,效果是下面这样的:
看起来还不错,这里transition的属性设置在logo本体的伪类上面,此时如果logo本体失去鼠标的焦点,光斑位置又会回到原来的负坐标,此时光影又会在回闪一次,也就是一次悬停发生两次位移,闪烁两次,如果只想闪一次,可以将transition加载hover伪类中,这样离开后不会二次位移,因为动画效果只会出现在鼠标悬停上,鼠标离开后,就没有动画回闪了:
.mylogo{
width: 255px;
height: 200px;
/*直接使用background缩放版本*/
/*每个渐变点的位置不能太小,不然会出现残缺光斑*/
/*no-repeat -270px 0:将光斑定位隐藏起来*/
background: -webkit-linear-gradient(left, rgba(255,255,255,0)0, rgba(255,255,255,0.5)50%, rgba(255,255,255,0)100%) no-repeat -270px 0, url(/logo.png) no-repeat;
/* transition: 1s ease; */
}
.mylogo:hover{
/*鼠标滑过实现光斑滑动,但是在多背景情况下,需要多个background-position属性值,否则会影响其他背景*/
background-position: 200px 0, 0 0;
transition: 1s ease;
}效果是这样的:
但是这就结束了吗?还没有,因为这看起来似乎。。。有点一律千篇?
如果所有人都用linear-gradient,就难免有点无趣了,那么有没有别的不落窠臼的玩儿法呢?
既然晓得了原理,无非就是位移产生的小把戏,那么我们完全脱离linear-gradient,使用一张带光泽质感的背景图片shine.png:
由于使用了背景图,所以我们需要对代码进行修改,为实体的背景图添加一个容器,span标签:
<a href="/" class="mylogo" title="刘悦的技术博客"><span></span></a>样式和linear-gradient差不多,也是利用负坐标将span标签内的背景图隐藏起来:
.mylogo span {
display: block;
background: url("/shine.png") -360px -380px no-repeat;
transition-property: all;
transition-duration: .7s;
height: 200px;
width: 255px;
}接下来要比linear-gradient要简单地多,直接设置悬停属性,让背景图片发生位移:
.mylogo:hover span {
background-position: 100px 300px;
}效果是这样的:
如果仔细观察,会发现背景图更加契合光影掠过的效果,因为linear-gradient每个渐变点在不同分辨率的屏幕下并不统一,也就是说在高分辨下会出现残缺光斑。
暗黑模式下的效果是这样的:
看起来似乎更加有质感一点,除此之外,也许你还想利用transition玩一些更加刺激的效果:
.mylogo:hover {
-webkit-transform: rotate(666turn);
transform: rotate(666turn);
transition-delay: 1s;
transition-property: all;
transition-duration: 59s;
transition-timing-function: cubic-bezier(.34, 0, .84, 1)
}让我们旋转、跳跃、闭着眼:
结语:两套方案都可以很好的实现光影特效,区别在于linear-gradient并不会消耗网站的带宽,但会消耗电脑的CPU和内存,而与背景渐变相比,背景图像效果会更好一点,但是将会更多地使用网络带宽,而webp技术又可以帮助我们对图片进行极致的压缩(参见:https://v3u.cn/a_id_190),所以我们可以理解这是一种权衡,毕竟,书本上写的是道理,但是现实中讲究的是取舍,不是吗?
相关推荐
- 推特官网入口(推特官网入口网页登录网址)
-
首先在浏览器中打开推特的官网,然后点击页面上的“注册”创建账号。Twitter可以让用户更新不超过140个字符的消息(除中文、日文和韩语外已提高上限至280个字符),这些消息也被称作“推文(Tweet...
- windows7如何清理c盘(win7怎么清理c盘)
-
1.打开桌面计算机,右键点击“C盘”,并选取“属性”。2.待新窗口弹出后,依次点击“工具”、“立即进行碎片整理”。3.最后,选取C盘,在按下“磁盘碎片整理”按钮,系统就会对C盘进行分析,并进行整理。4...
- win10自带分区工具(win10官方分区工具)
-
Win10自带的分区工具是磁盘管理器,可以用来创建、删除、格式化和调整磁盘分区。下面是使用磁盘管理器分区的步骤:1.打开磁盘管理器。您可以在Windows10搜索栏中输入“磁盘管理器”来快速打开。...
- appstore正版下载软件(apple store下载正版)
-
不会,他是正版的,因为只有ios系统可以用,但他里面的好游戏都是要收费的,所以打架都要越狱,去其它地方下载,不去商店的在安卓上,GooglePlayStore是类似于苹果的AppStore一...
- 手机锁屏密码键盘没了(手机输入密码的键盘没了怎么办)
-
如果手机锁屏密码的键盘找不到,首先要确认是否是由于软件问题导致的。可以尝试重启手机或者清理手机缓存来解决。如果问题仍然存在,可以尝试更换输入法或者恢复手机出厂设置来解决。如果以上方法都没有效果,建议联...
- 移动硬盘跟固态硬盘的区别(移动硬盘跟固态硬盘的区别是什么)
-
一:移动硬盘移动硬盘是指以传统机械磁盘作为存储介质,用于计算机之间交换大容量数据,讲究移动便携性的存储产品。优点:具有容量大、价格便宜的特点,方便存储大量文件数据。(推荐学习:web前端视频教程)缺...
- windows怎么截图快捷键(windows截图快捷键没反应)
-
1、按Prtsc键截图这样获取的是整个电脑屏幕的内容,按Prtsc键后,可以直接打开画图工具,接粘贴使用。也可以粘贴在QQ聊天框或者Word文档中,之后再选择保存即可。2、按Ctrl+Prtsc键截图...
- 显示器分辨率有哪几种(显示器屏幕分辨率都有哪些)
-
目前使用较多的显示器分辨率有640*480,800*600,1024*768,1280*1024四种。刷新率,这主要是指显示器显示画面每秒刷新的次数,现在的电脑显示屏刷新率一般为75Hz,如果刷新率在...
- windows7激活工具 知乎(win7激活工具怎么使用教程)
-
Win7激活工具有很多,比如kms激活工具、小马激活工具、Windowsloader等。下面以这三款激活工具为例,做一个简单的比较。1、kms激活工具,相对比较稳定,通用性强,对各种gho、iso镜...
- 英伟达高端显卡排行(英伟达最高级显卡)
-
具体的排名如下:1、NVIDIAGeForceRTX30902、NVIDIAGeForceRTX3080Ti3、NVIDIAQuadroRTXA60004、NVIDIAGeFor...
- 苹果电脑为啥不能玩游戏(买苹果电脑的十大忠告)
-
1、MacBook本身就不是用来玩游戏的,是用来轻度办公的,只有集成显卡没有独立显卡,玩游戏也会非常卡。2、MacOS系统虽然支持steam软件,但是里面的游戏并不支持MacOS,况且本身支持MacO...
- 笔记本电脑显卡驱动怎么安装
-
使用驱动精灵或者驱动之家搜索驱动,下载后会自动安装驱动的。您好,以下是安装MacBook独立显卡驱动的步骤:1.打开“应用程序”,找到“实用工具”文件夹,打开“终端”。2.在终端窗口中输入以下命令...
- 家庭wifi已连接不可上网(家里wifi已连接不可用是什么原因)
-
WiFi已连接不可上网原因和解决方法一、路由器不稳定有些无线路由器、光猫(宽带猫)的质量比较差,长时间运行后会出现死机等一系列的问题。解决办法:把你家里的无线路由器、光猫(宽带猫)断电,等待几分钟,然...
- win10专业版在哪下(win10专业版在哪下载)
-
1.登陆MicroSoft官方网站会员中心,https://insider.windows.com/?lc=1033,点击“登陆”。2.使用hotmail邮箱或者开发者帐号登陆即可。3.选择“获...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
