下划线跟随鼠标移动效果

1,567 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看: 8月更文挑战

登录华为云的时候看到顶部导航栏效果挺好的就想实现一个

先看看华为云官网的大概效果 hkxon-syols.gif

下划线跟随鼠标移动效果(上图)

首先分析一下大概做法:

  • 过渡动画
  • 下划线有一个由长到慢的过程
  • 监听鼠标在那一个栏目的下面

总之就是,监听鼠标的移动,然后让当前导航栏的下划线从0到100%占满。

有思路后先走一波代码,然后慢慢调试:

 <ul>
	<li>跟着</li>
	<li>导航栏</li>
	<li>光标小下划线跟随</li>
	<li>跟随走动的下划线</li>
	<li>跟随走动</li>
</ul>

效果如下图: 屏幕截图 2021-07-28 160113.png

然后我们让li水平一行展示:

 ul li {float: left;display: block; list-style: none;margin-left: 20px;border-bottom: 2 px black solid;position: relative;}

导航栏已经能正常显示,接下来就是下划线了

  • 使用伪元素实现下划线
  • 鼠标移动到那儿就展示当前伪元素
 ul li::before {content: ""; position: absolute; top: 0; left: 0; width: 0; height: 100%;border-bottom: 2px solid red;width: 100%; }

这样的话,底部下划线也已经可以看到(如下图) 屏幕截图 2021-07-28 160755.png 底部下划线也已经有了,接下来就是鼠标移动到那儿,那个的导航栏下划线展示,这个用hover就能实现

我们可以先让所有li的伪类长度为0 ,hover到当前时使其宽度为100%
 ul li:hover::before {width: 100%;}

我们看下效果图: rcxrt-h8lbb.gif

我们看到鼠标移动到某个导航栏下导航栏下的下划线能够展示,但是很生硬,这里我们设置一个transition

  transition: 0.2s all linear;	

4kumv-25bxu.gif

这是设置transition后的动画,看到的效果已经越来越接近,但是还是有两个问题

  • 鼠标移开后上一个下划线回向左减少
  • 鼠标往上一个导航栏移动时应该从右向左移动,现在还是从左向右移动 思路
  • 我们让每一个伪类的left设置为100%,
  • 把当前鼠标所在的下一个导航栏的left设置为0 这样的话会造成视觉差形成鼠标跟随效果,效果如下图: 1dado-vw645.gif 大概效果就实现了,有一个问题就是hover的第一元素下划线移动位置还是从右往左增长,其他效果大致相同 华为云的导航栏的话,应该使用的js实现的,喜欢的大佬可以自己去看看,我这儿就实现一个简陋版的css实现过程
<!--
 * @Descripttion: 
 * @version: 
 * @Author: shijuwang
 * @Date: 2021-08-02 17:23:57
 * @LastEditors: shijuwang
 * @LastEditTime: 2021-08-02 15:09:41
-->

代码地址: >>> 项目查看

码字不易,希望大佬多多指点