用CSS实现鼠标悬停呈现阴影效果代码是什么
Admin 2022-11-30 群英技术资讯 315 次浏览
通过以下的gif图中的鼠标悬停效果,相信你能理解使用 text-shadow 却为什么没有阴影。
看到此图你的第一感觉是不是复制了一份文本,比如创建伪元素,设置 content: 'text'
,然后为其设置单独的动画。但是本文完全使用text-shadow
实现,接下来将为大家展开说明四种悬停动画的实现方式。
text-shadow为文字添加阴影,可以为文字添加多个阴影,添加多个时阴影值之间用逗号隔开。每个阴影值由元素在X和Y方向的偏移量、模糊半径和颜色值组成。
text-shadow: h-shadow v-shadow blur color;
参数 | 描述 |
---|---|
h-shadow | 必需。水平阴影的位置。允许负值。 |
v-shadow | 必需。垂直阴影的位置。允许负值。 |
blur | 可选。模糊的距离。 |
color | 可选。阴影的颜色。 |
CSS代码如下,我们将文本实际的颜色设置透明(color: #0000);然后通过text-shadow
创建两个阴影,可选参数blur不设置,这样我们就得到了一份清晰的阴影,通过设置不同的颜色和垂直的数值即可产生炫酷的效果。
.hover-1 {
line-height: 1.2em;
color: #0000;
text-shadow:
0 0 #000,
0 1.2em #1095c1;
overflow: hidden;
transition: .3s;
}
.hover-1:hover {
text-shadow:
0 -1.2em #000,
0 0 #1095c1;
}
如下图所示,红色虚线区域是我们页面可视区。通过设置overflow: hidden
,重复的文本也就看不见了,在悬停过程中增加transition
过渡时间,看起来就像是两个文本在交替显示,这就是本文示例中的主要技巧。
接下来可以继续优化我们的CSS代码,如上面代码所示,我们多次使用了1.2em来定义了阴影的高度及移动的偏移量,通过CSS var() 自定义属性值优化后的代码如下:
.hover-1 {
--h: 1.2em;
line-height: var(--h);
color: #0000;
text-shadow:
0 0 #000,
0 var(--h) #1095c1;
overflow: hidden;
transition: .3s;
}
.hover-1:hover {
text-shadow:
0 calc(-1 * var(--h)) #000,
0 0 #1095c1;
}
这样还是不够简洁,还可以通过calc()继续优化:
.hover-1 {
--h: 1.2em;
line-height: var(--h);
color: #0000;
text-shadow:
0 calc(-1*var(--_t, 0em)) #000,
0 calc(var(--h) - var(--_t, 0em)) #1095c1;
overflow: hidden;
transition: .3s;
}
.hover-1:hover {
--_t: var(--h);
}
这个动画主要用到了两个属性,text-shadow和background,text-shadow仍然是设置两个图层,但是这次只需要移动下面的一个,在移动的过程中将上面的颜色设置为透明。同时增加一个background-size修改背景色。
.hover-2 {
/* the height */
--h: 1.2em;
line-height: var(--h);
color: #0000;
text-shadow:
0 var(--_t,var(--h)) #fff,
0 0 var(--_c, #000);
background:
linear-gradient(#1095c1 0 0)
bottom/100% var(--_d, 0) no-repeat;
overflow: hidden;
transition: 0.3s;
}
.hover-2:hover {
--_d: 100%;
--_t: 0;
--_c: #0000;
}
以上我们通过结合CSStext-shadow和background属性创建了悬停效果,但是我们还能继续使用CSS变量来优化代码,最终只需要一个CSS自定义属性变量即可。
.hover-2 {
/* the height */
--h: 1.2em;
line-height: var(--h);
color: #0000;
text-shadow:
0 var(--_i, var(--h)) #fff,
0 0 rgb(0 0 0 / calc(var(--_i, 1) * 100%) );
background:
linear-gradient(#1095c1 0 0)
bottom/100% calc(100% - var(--_i, 1) * 100%) no-repeat;
overflow: hidden;
transition: 0.3s;
}
.hover-2:hover {
--_i: 0;
}
这个效果是基于本文第一个动画效果增加了一个前置动画效果。经过最终优化后也只需控制一个CSS自定义变量即可。
.hover-3 {
/* the color */
--c: #1095c1;
/* the height */
--h: 1.2em;
line-height: var(--h);
color: #0000;
overflow: hidden;
text-shadow:
0 calc(-1 * var(--h) * var(--_i, 0)) var(--c),
0 calc(var(--h) * (1 - var(--_i, 0))) #fff;
background:
linear-gradient(var(--c) 0 0) no-repeat
calc(200% - var(--_i, 0) * 100%) 100% / 200% calc(100% * var(--_i, 0) + .08em);
transition: .3s calc(var(--_i, 0) * .3s), background-position .3s calc(.3s - calc(var(--_i, 0) * .3s));
}
.hover-3:hover {
--_i: 1;
}
这个悬停效果是基于第二种效果的改进版本,这里新用到了clip-path
,我们使用inset(0 0 0 0)
类似于overflow: hidden
我们所看到的只是实际文本。在悬停时,我们使用等于高度的负值更新第三个值(表示底部偏移)以显示放置在底部的文本层。因为我们需要先运行clip-path
动画,然后再运行其他所有内容,所以我们在悬停时为所有属性添加延迟,除了clip-path
:
transition: 0.4s 0.4s, clip-path 0.4s;
在鼠标移出时,我们做相反的事情:
transition: 0.4s, clip-path 0.4s 0.4s;
最后的完整代码
.hover-4 {
/* the color */
--c: #1095c1;
/* the height */
--h: 1.2em;
line-height: var(--h);
color: #0000;
text-shadow:
0 var(--_t, var(--h)) #fff,
0 0 var(--_c, #000);
box-shadow: 0 var(--_t, var(--h)) var(--c);
clip-path: inset(0 0 0 0);
background: linear-gradient(var(--c) 0 0) 0 var(--_t, var(--h)) no-repeat;
transition: 0.4s, clip-path 0.4s 0.4s;
}
.hover-4:hover {
--_t: 0;
--_c: #0000;
clip-path: inset(0 0 calc(-1 * var(--h)) 0);
transition: 0.4s 0.4s, clip-path 0.4s;
}
如上的几个例子都只用到了一个元素和CSS实现了几种复杂的悬停效果,不需要用到其他的元素及伪元素。基于以上的动画可以发现我们可以结合不同的动画组成更复杂的动画效果,且相对不需要很大的成本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
HTML元素基本标签包括哪些,功能及用法是什么
css中sticky属性的特点:1、这个元素并不脱离文档流,仍然保留着元素在文档流中的原始位置。2、当元素在容器中滚动超过指定偏移值时,元素固定在容器的指定位置。3、固定元素的相对偏移是相对于最接近它的带滚动框的祖先元素。
align-content可以看成是和justify-content是相似且对立的属性,是指垂直方向每一行flex子项的对齐和分布方式。只适用于多行的flex容器,并且当交叉轴上有多余空间使flex容器内的flex线对齐。
这篇文章主要介绍了html5写一个BUI折叠菜单插件的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了纯CSS实现“文本溢出截断省略”的几种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008