首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于类设置导航下划线动画

是一种在前端开发中常见的技术,用于为导航菜单添加动态的下划线效果。这种动画效果可以提升用户体验,并帮助用户更好地导航网站。

具体实现方式如下:

  1. 创建导航菜单的HTML结构,通常使用无序列表 <ul> 和列表项 <li> 来构建。
代码语言:txt
复制
<ul class="nav-menu">
  <li><a href="#">首页</a></li>
  <li><a href="#">产品</a></li>
  <li><a href="#">服务</a></li>
  <li><a href="#">关于我们</a></li>
</ul>
  1. 使用CSS样式来定义导航菜单的外观,并添加导航下划线的样式。
代码语言:txt
复制
.nav-menu {
  list-style: none;
  display: flex;
  justify-content: space-between;
}

.nav-menu li {
  position: relative;
}

.nav-menu li a {
  text-decoration: none;
  color: #000;
  transition: color 0.3s ease-in-out;
}

.nav-menu li a:hover {
  color: #ff0000;
}

.nav-menu li::after {
  content: '';
  position: absolute;
  bottom: -5px;
  left: 0;
  width: 0;
  height: 2px;
  background-color: #ff0000;
  transition: width 0.3s ease-in-out;
}

.nav-menu li:hover::after,
.nav-menu li.active::after {
  width: 100%;
}
  1. 使用JavaScript来实现导航下划线的动画效果。
代码语言:txt
复制
const navItems = document.querySelectorAll('.nav-menu li');
const underline = document.createElement('span');
underline.classList.add('underline');

navItems.forEach(item => {
  item.addEventListener('mouseenter', () => {
    const link = item.querySelector('a');
    const linkWidth = link.offsetWidth;
    const linkLeft = link.offsetLeft;

    underline.style.width = `${linkWidth}px`;
    underline.style.transform = `translateX(${linkLeft}px)`;
  });

  item.addEventListener('mouseleave', () => {
    underline.style.width = '0';
    underline.style.transform = 'translateX(0)';
  });
});

document.querySelector('.nav-menu').appendChild(underline);

通过上述代码,我们可以实现当鼠标悬停在导航菜单项上时,下划线的宽度会自动适应当前菜单项的宽度,并以动画效果从左到右扩展;鼠标移出时,下划线会收缩回初始状态。

推荐的腾讯云产品:无特定产品与该技术直接关联。

请注意,上述答案仅供参考,实际开发中可能会根据具体需求和框架选择不同的实现方式和技术工具。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从React-Native坑中爬出,我记下了这些

其中导航我们有两种写法,一种是单纯写成React的props函数调用的风格,另外一种是写成Redux的风格,就是通过dispatch/action的风格,使用Redux风格,是因为少部分场景可能会用到全局导航状态共享的需求...,对于多数简单的需求,我觉得写成React的风格就好了,因为简单易用 6.对于切换tabs,我们也许可以试试使用react-native-scrollable-tab-view 但有一点非常遗憾:这个组件对下划线的支持程度仍然无法满足普遍的业务需求...设置长度百分比,配合marginLeft就可以了。 可是,这样的话,我们切换的时候,平滑过渡的动画效果怎么实现?模块没有提供可以切入的相关props啊,实在没有办法,我最终还是无奈得自己定义了一个。...10.RN使用动画的时候,组件一定要使用专门的动画组件Animated.View, 不然没有动画效果,切记。...“CSS”不一样了,下面是部分列表 Flex Width htight margin Padding textAlign Overflow fontWeight Position 13.动画

2.3K30

不可思议的纯CSS导航下划线跟随效果

>PURE CSS Nav Underline 导航栏目的 li 的宽度是不固定的 当从导航的左侧 li 移向右侧 li,下划线从左往右移动。...同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。 实现需求 第一眼看到这个效果,感觉这个跟随动画,仅靠 CSS 是不可能完成的。...image 默认隐藏,动画效果 当然,这里一开始都是没有下划线的,所以我们可能需要把他们给隐藏起来。...现在还剩下一个最难的问题: 如何让线条跟随光标的移动动作,实现当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。...所以,可以能我们需要将下划线的初始位置位移一下,设置为 left: 100%,这样每次下划线收回的时候,第一个 li 就正确了: li::before { content: ""; position

1.6K20
  • 不可思议的纯CSS导航下划线跟随效果

    >PURE CSS Nav Underline 导航栏目的 li 的宽度是不固定的 当从导航的左侧 li 移向右侧 li,下划线从左往右移动。...同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。 实现需求 第一眼看到这个效果,感觉这个跟随动画,仅靠 CSS 是不可能完成的。...li { border-bottom: 0px solid #000; } 推翻重来,借助伪元素 这样好像不行,因为隐藏之后,hover li 的时候,需要下划线动画,而 li 本身肯定是不能移动的...现在还剩下一个最难的问题: 如何让线条跟随光标的移动动作,实现当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。...所以,可以能我们需要将下划线的初始位置位移一下,设置为 left: 100%,这样每次下划线收回的时候,第一个 li 就正确了: li::before { content: ""; position

    2.1K30

    不可思议的纯CSS导航下划线跟随效果

    >PURE CSS Nav Underline 导航栏目的 li 的宽度是不固定的 当从导航的左侧 li 移向右侧 li,下划线从左往右移动。...同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。 实现需求 第一眼看到这个效果,感觉这个跟随动画,仅靠 CSS 是不可能完成的。...li { border-bottom: 0px solid #000; } 推翻重来,借助伪元素 这样好像不行,因为隐藏之后,hover li 的时候,需要下划线动画,而 li 本身肯定是不能移动的...现在还剩下一个最难的问题: 如何让线条跟随光标的移动动作,实现当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。...所以,可以能我们需要将下划线的初始位置位移一下,设置为 left: 100%,这样每次下划线收回的时候,第一个 li 就正确了: li::before { content: ""; position

    1.7K30

    【CSS】828- 纯CSS导航下划线跟随效果

    Nav Underline 导航栏目的 li 的宽度是不固定的 当从导航的左侧 li 移向右侧 li,下划线从左往右移动。...同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。 实现需求 第一眼看到这个效果,感觉这个跟随动画,仅靠 CSS 是不可能完成的。...li { border-bottom: 0px solid #000;} 推翻重来,借助伪元素 这样好像不行,因为隐藏之后,hover li 的时候,需要下划线动画,而 li 本身肯定是不能移动的。...现在还剩下一个最难的问题: 如何让线条跟随光标的移动动作,实现当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。...所以,可以能我们需要将下划线的初始位置位移一下,设置为 left: 100%,这样每次下划线收回的时候,第一个 li 就正确了: li::before { content: ""; position

    2.9K20

    灵活运用CSS开发技巧

    在线演示 使用overflow-x排版横向列表 要点:通过flexbox或inline-block的形式横向排列元素,对父元素设置overflow-x:auto横向滚动查看 场景:横向滚动列表、元素过多但位置有限的导航栏...在线演示 使用:valid和:invalid校验表单 要点:使用伪:valid和:invalid配合pattern校验表单输入的内容 场景:表单校验 兼容:pattern、:valid、:invalid...在线演示 使用max-height切换自动高度 要点:通过max-height定义收起的最小高度和展开的最大高度,设置两者间的过渡切换 场景:隐藏式子导航栏、悬浮式折叠面板 兼容:max-height...在线演示 使用animation-delay保留动画起始帧 要点:通过transform-delay或animation-delay设置负值时延保留动画起始帧,让动画进入页面不用等待即可运行 场景:开场动画...在线演示 下划线跟随导航栏 要点:下划线跟随鼠标移动的导航栏 场景:动态导航栏 兼容:+ 代码:在线演示 ?

    4.6K20

    妙用 scale 与 transfrom-origin,精准控制动画方向

    上次发完 不可思议的纯 CSS 导航下划线跟随效果 这篇文章之后,很多朋友找我讨论,感叹 CSS 的奇妙。...然后昨天,群里一位朋友问到了一个和这个效果比较类似的效果,问如何 将下面这个动画下划线效果,从左进入,右边离开修改为从上方进入,下方离开。 描述很难理解,看看原本的效果: ?...以为只是简单的一个下划线 hover 效果,经过友人提醒,才发现,这个动画效果中,下划线是从一端进入,从另外一端离开的。而且,这个 hover 动画是纯 CSS 实现的。 ?...可以通过向量形式定义的缩放值来放大或缩小元素,同时可以在不同的方向设置不同的缩放值。...我们给线条设置一个默认的 transform-origin 记为状态1 hover 的时候,设置另外一个不同的 transform-origin, 记为状态2 所以,当然我们 hover 的时候,会读取状态

    1.3K40

    妙用 scale 与 transfrom-origin,精准控制动画方向

    上次发完 不可思议的纯 CSS 导航下划线跟随效果 这篇文章之后,很多朋友找我讨论,感叹 CSS 的奇妙。...然后昨天,群里一位朋友问到了一个和这个效果比较类似的效果,问如何 将下面这个动画下划线效果,从左进入,右边离开修改为从上方进入,下方离开。 描述很难理解,看看原本的效果: ?...以为只是简单的一个下划线 hover 效果,经过友人提醒,才发现,这个动画效果中,下划线是从一端进入,从另外一端离开的。而且,这个 hover 动画是纯 CSS 实现的。 ?...可以通过向量形式定义的缩放值来放大或缩小元素,同时可以在不同的方向设置不同的缩放值。...我们给线条设置一个默认的 transform-origin 记为状态1 hover 的时候,设置另外一个不同的 transform-origin, 记为状态2 所以,当然我们 hover 的时候,会读取状态

    86040

    小程序·云开发实战 - 校园约拍小程序

    官方默认的导航栏只能对背景颜色进行更改,对于想要在导航栏添加一些比较酷炫的效果则需要通过自定义导航栏实现 实现原理:通过设置app.json中页面配置的navigationStyle(导航栏样式)配置项的值为...custom,即可实现自定义导航 "window":{ "navigationStyle":"custom" } 本项目的部分页面自定义导航栏实现使用了ColorUI的导航栏组件,在完成上一步属性设置后再引入导航栏组件即可...usingComponents":{ "cu-custom":"/colorui/components/cu-custom" //该路径替换为自己项目内ColorUI组件所在位置 } 主页自定义导航栏通过设置背景图片加上...,页面的返回需要在自定义导航栏中自行设置 特别提醒2:导航栏组件需要自行引入ColorUI组件库后才能使用,具体引入教程地址在附录中给出 发布约拍 选择发布约拍功能填写约拍需求,提交审核通过后可在首页实时查看发布结果...的值从而控制整个动画过程(原理与Vue的动态名相似) data:{ toggleDelay;false }, onReady:function(){ let that = this

    3.9K31

    Joe主题再续前缘版 - 本站同款

    前言 因为Joe主题作者不再更新,我便基于原主题 7.3.7 最新版开发了再续前缘版,秉承着原版作者大神免费开源的伟大初衷(在这里吐槽一下...密...),再续前缘版是朝着简便实用的路线发展的。...主题亮点 1、整包仅1.3Mb,却实现超强功能,极其迅速的响应(在开发时,都是使用30000篇文章进行开发测试) 2、全站变量名、名统一规范,重在方便更多人参与二开与拓展 3、主题开箱即用,没有任何复杂的操作...优化文章内joe_message插件的上边距 部分文字颜色修改为渐变色 修改搜索按钮内英文文字为中文 优化移动端下站点公告隐藏为向下排序 优化文章内行内代码的蓝色背景显示高度 修改文章页面标签模块的选中下划线为渐变色...优化移动端下导航栏处搜索框样式 导航栏高度降低10px 可自定义首页热门文章显示数量 首页热门文章UI全新重构 1.18 2022-09-06 08:11:09 星期二 紧急修复主题设置页面报错提示...需要用请使用主题内自定义js代码设置引入 还原移动端侧边栏和搜索栏动画,移除毛玻璃效果,因为毛玻璃对页面的性能下拉的太严重了 移除控制台的页面加载计时,减少臃肿性 新增反QQ用户恶意举报功能 新增可开启关闭反蜘蛛爬虫非法扫描

    3K20

    Html与CSS快速入门03-CSS基础应用

    CSS设计导航系统:不同于简单的项目符号或编号列表,导航元素一般会需要如下特性:用户鼠标光标会改变,以指示元素是可单击的;当鼠标悬停在元素上时,元素周围的区域会改变外观;内容区域在视觉上显得与普通文本不同...比如相对于页面中的链接元素,nav中的链接元素可以使用text-decoration:none属性来去除蓝色下划线,为了表示出样式的不同,可以使用伪选择器nav li a:link, nav li a...此外,如果需要实现水平导航,可以将ul和li的display属性设置为inline,还可以设置line-height的高度。...animation之前,需要了解浏览器的差异,比如chrome和safari使用-webkit,firefox使用-moz,微软使用-ms,Opera使用-o前缀,这是基于不同浏览器内核决定的。...CSS的渐变可以通过transition:transform 5s ease-in 1s; 而对于动画来说,有一个关键的概念,即关键帧,@keyframes spin{ from {} to {}},

    2K80

    使用Span实现各种酷炫效果

    今天会简单介绍几个Span的基本用法,也会分享一些比较酷炫的使用方法: 设置字体颜色 改变字体背景色 给文本添加下划线 给文本加边框 彩虹色文字 彩虹色字体渐变动画 打字效果展示文本 ---- 1、设置字体颜色..."我爱北京天安门,天安门上太阳升 我爱北京天安门,天安门上太阳升"); //设置下划线 spannableString.setSpan(new UnderlineSpan...使用Shader进行着色渲染,LinearGradient是线性渐变,Gradient是基于Shader,所以我们通过Paint的setShader方法来设置这个渐变....; objectAnimator.setRepeatCount(ValueAnimator.INFINITE); objectAnimator.start(); } 大家可能注意到了,设置动画时用到了动画属性变化器...循环集合中所有的Span,除了最近一个打印的字以外,其他的字设置为不透明,第一个跟随动画进行渐变。

    1.9K41

    H5 和 CSS3 新特性

    onplay、onpause WebSocket:单个 TCP 连接上进行全双工通讯的协议 语义化标签 标签 描述 header 定义了文档的头部区域 footer 定义了文档的尾部区域 nav 定义文档的导航...、img、a、lable、input、abbr(缩写)、em(强调)、big、cite(引用)、i(斜体)、q(短引用)、textarea、select、small、sub、sup,strong、u(下划线...checked /* 选择每个被选中的E元素 */ :not(selector) /* 选择非 selector 元素的每个元素 */ ::selection /* 选择被用户选取的元素部分 */ 伪和伪元素...word-wrap 允许对长的不可分割的单词进行分割并换行到下一行 text-decoration 文本修饰符:overline、line-through、underline 分别是上划线、中划线、下划线...alternate: 指定元素动画播放的方向,其只有两个值,默认值为normal,如果设置为 normal 时,动画的每次循环都是向前播放;另一个值是 alternate,规定动画在下一周期逆向地播放

    2.4K10

    Ask Apple 2022 与 SwiftUI 有关的问答(上)

    隐式动画和显式动画Q:你好!是否有其他方法可以直接根据状态的变化对视图进行动画处理而不使用 onChange 修饰器?我的代码是这样的。....我是否可以认为,如果水平尺寸是紧凑( compact )的,它就是折叠的?还是有一个更可靠的判断方法?A:紧凑( compact )确实对应于一个折叠的导航分割视图。...下划线会让它看起来有点诡异,但访问底层存储并没有错。官方文档主要试图指出人们最常见的用法,这样他们就不会一开始就试图直接初始化他们的属性包装器。...有关下划线的含义和用法,请参阅 为自定义属性包装类型添加 @Published 的能力[17] 。...ViewBuilder 中的 if 语句Q:我知道 SwiftUI 是基于 ResultBuilder 的。所以 if 语句通过树状结构与 buildEither 进行操作。

    12.3K20

    vue菜单点击下划线跟随动画

    点击下划线跟随动画 思路 看效果,思路有2: 方案A:下划线 设置下划线 border-bottom 点击标题后控制下划线的展示隐藏 注:下划线长度及圆角无法设置 方案B:模拟下划线 新启元素模,使用背景色拟下划线效果...点击标题后,计算要滑动的距离 css3动画移动到目标位置 以上方案对比,发现方案1缺点较大,例如无法控制下划线长度,圆角,以及下划线渐变色等。...实现步骤 本案例基于vue实现 1. 基础布局 <!...设置下划线 /** * 设置下划线 */ setUnderLine() { + // 屏幕宽 + let width = document.documentElement.clientWidth...最终效果 完整代码关注本公众号回复【21601】获取 小结 案例通过新增元素div来模拟下划线,点击时计算水平方向的目的坐标,通过CSS动画实现效果。

    2.3K30
    领券