讲师中心 微信公众号
AI工具推荐 视频效率加速

Bootstrap导航栏怎么实现鼠标滑过显示二级菜单

云磊同学_8911

云磊同学_8911

发布时间:2026-09-06 09:13:09

|

759人浏览过

|

来源于php中文网

原创

Bootstrap 5 默认禁用 hover 触发二级菜单,仅支持点击;需同时修正 CSS 定位、显式重置 display、添加 focus-within 支持,并用 JS 初始化子菜单实例以保障可访问性与移动端兼容。

bootstrap导航栏怎么实现鼠标滑过显示二级菜单

Bootstrap 5 默认不支持鼠标滑过(hover)触发二级菜单,这不是你写错了,是框架主动禁用的——它只响应点击(click),且不初始化嵌套的 dropdown-menu。强行加 :hover .dropdown-menu { display: block } 会破坏可访问性、导致移动端点击后菜单闪退、键盘焦点失效,甚至让 Popper.js 定位错乱。

为什么纯 CSS hover 规则在 Bootstrap 5 里大概率失效

常见错误现象:二级菜单没显示、飞出屏幕、鼠标一移开就立刻收起、移动端点一下就全关了。

  • .dropdown-item:hover .dropdown-menu 不生效,是因为 .dropdown-item 缺少 position: relative,子菜单的 left: 100% 会相对于 body 定位,直接跑出视口
  • Bootstrap 5 默认给嵌套的 .dropdown-menu .dropdown-menu 加了 opacity: 0visibility: hidden,而 display: block 无法覆盖这些声明
  • 原生 JS 没绑定二级菜单的事件,data-bs-toggle="dropdown" 只作用于一级,二级 <ul> 根本没被 Dropdown 实例接管
  • 没删掉默认的 display: none !important(尤其在 bootstrap.min.css 里),浏览器渲染时仍以它为准

必须加的最小 CSS(绕不开)

仅靠 JS 不行,CSS 层级和定位必须先对。以下四条缺一不可:

  • .dropdown-submenu { position: relative; } —— 让二级菜单能相对于它定位
  • .dropdown-submenu .dropdown-menu { top: 0; left: 100%; margin-top: -1px; } —— 贴右展开,-1px 消除边框间隙
  • .dropdown-submenu .dropdown-menu { display: none; } —— 显式重置,覆盖默认 !important
  • .dropdown-submenu.show .dropdown-menu, .dropdown-submenu:focus-within .dropdown-menu { display: block; } —— 用 show 类或 focus-within 触发,兼容键盘用户

注意:.dropdown-submenu 是你自定义的 wrapper 类名,不能直接套在 <a><button> 上,得包一层 <li class="dropdown-submenu">

Bootstrap
Bootstrap

Bootstrap 5.3.8 编译版包含可直接用于项目的 CSS、JavaScript 和插件文件,适合快速搭建响应式网页。

下载

JS 必须接管事件链(否则移动端/键盘全崩)

不能只监听 mouseenter 然后 show(),那会绕过 Bootstrap 的 ARIA 状态同步,屏幕阅读器读不出“菜单已打开”。正确做法是手动调用实例方法,并阻止默认关闭逻辑:

  • 给二级触发项(如 <li class="dropdown-submenu"><a class="dropdown-toggle">Services</a></li>)加 data-bs-toggle="dropdown"data-bs-auto-close="outside"
  • 在 DOM 加载后,为每个 .dropdown-submenu 初始化独立 Dropdown 实例:new bootstrap.Dropdown(el.querySelector('.dropdown-toggle'))
  • 监听 click 事件,遇到 .dropdown-submenu-togglee.stopPropagation(),防止冒泡触发父级 hide()
  • 移动端需降级:用 matchMedia('(hover: none)') 检测是否无 hover 支持,若有则禁用 hover 逻辑,只保留点击

Popper.js 可能干扰二级菜单位置,可在二级 <ul> 上加 data-bs-popper="none" 关闭自动定位。

移动端和键盘导航的硬约束

iOS Safari 的 :hover 在触摸后仅维持极短时间,纯 CSS 悬停在真机上基本不可靠;而键盘用户按 Tab 进入二级项时,若没 focus-within 或 JS 同步 aria-expanded,菜单不会出现,也无法用 ESC 关闭。

最易被忽略的一点:二级菜单的 <ul> 必须包裹在上级 .dropdown-menu 内部,结构形如 <li class="dropdown"><ul class="dropdown-menu"><li class="dropdown-submenu"><ul class="dropdown-menu"></ul></li></ul></li>。如果二级 <ul> 被写到外面,鼠标一移出一级项,整个区域就失去 hoverfocus 状态,菜单立刻收起。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2043

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

4363

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

5470

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

4918

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

703

2024.05.22

bootstrap框架介绍
bootstrap框架介绍

本专题整合了bootstrap框架相关介绍,阅读专题下面的文章了解更多详细内容。

565

2026.03.18

bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

159

2026.03.18

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

20

2026.09.21

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap5 入门教程
Bootstrap5 入门教程

共0课时 | 0人学习

Bootstrap Components 组件文档
Bootstrap Components 组件文档

共0课时 | 0人学习

Bootstrap Grid 栅格系统
Bootstrap Grid 栅格系统

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn