0

0

html中如何用hover做二级菜单栏

霞舞

霞舞

发布时间:2026-02-17 20:42:46

|

495人浏览过

|

来源于php中文网

原创

二级菜单闪退主因是dom结构断裂和css选择器范围不足,需将二级ul嵌入一级li内、用:hover+>组合选择器扩展悬停区域,并为触屏和键盘访问补充js与aria支持。

html中如何用hover做二级菜单栏

hover 触发二级菜单时下拉区域消失

鼠标从一级菜单移向二级菜单途中,两个元素之间有空隙,mouseleave 立刻触发,菜单闪退。这不是 CSS 写错了,是 DOM 结构没连上。

  • <ul></ul>(二级菜单)直接放在对应 <li>(一级项)内部,确保父子关系连续
  • display: blockvisibility: visible 控制显示,别用 opacity: 0pointer-events: none —— 后者会让中间区域无法 hover 过渡
  • 给一级 <li>position: relative,二级 <ul></ul>position: absolute 定位,避免脱离文档流导致位置偏移

CSS 中 hover 选择器写法容易漏掉父级状态

只写 ul li:hover ul 不够,它只在鼠标真正在 li 上时生效;一旦二级菜单展开,鼠标移到子项上,父级 li 就不再满足 :hover,菜单立刻收起。

  • 必须让整个悬停区域“连成一片”:用 ul li:hover > ul, ul li ul:hover 把二级菜单自身也纳入 hover 范围
  • 更稳妥的做法是加一层包裹容器,比如 <nav class="menu"></nav>,然后用 .menu:hover ul ul 统一控制,避免逐级嵌套失效
  • 注意层级顺序:二级 <ul></ul> 必须紧跟在一级 <li> 里,不能被 <div> 或其他标签隔开,否则 <code>> 子选择器不匹配

    移动端 touch 设备 hover 不生效怎么办

    手机和平板没有“悬停”概念,:hover 在 iOS Safari 和多数安卓浏览器里仅在模拟桌面模式或极少数场景下触发,不能当交互主逻辑用。

    X-Node企业快速建站1.0.6.0801
    X-Node企业快速建站1.0.6.0801

    特色介绍: 1、ASP+XML+XSLT开发,代码、界面、样式全分离,可快速开发 2、支持语言包,支持多模板,ASP文件中无任何HTML or 中文 3、无限级分类,无限级菜单,自由排序 4、自定义版头(用于不规则页面) 5、自动查找无用的上传文件与空目录,并有回收站,可删除、还原、永久删除 6、增强的Cache管理,可单独管理单个Cache 7、以内存和XML做为Cache,兼顾性能与消耗 8、

    下载
    • 纯 CSS hover 二级菜单本质是桌面端专属方案,上线前必须确认目标用户设备分布
    • 如果要兼容触屏,得补 JS:监听 touchstart 给菜单加 active 类,再用 CSS 控制显示;但注意避免点击穿透和重复触发
    • 更现实的做法是用媒体查询降级:@media (hover: none) and (pointer: coarse) 下直接显示一级菜单,二级改用点击展开(如加 <button></button> 触发 aria-expanded

    键盘焦点与可访问性被 hover 方案绕过

    只靠 :hover 实现菜单展开,键盘用户按 Tab 到一级菜单项时,二级菜单不会出现,EnterSpace 也没响应 —— 屏幕阅读器根本感知不到隐藏内容。

    立即学习前端免费学习笔记(深入)”;

    • 必须配合 aria-haspopup="true"aria-expanded="false/true",并在 JS 中同步更新状态
    • :focus-within 替代部分 :hover 场景(例如 li:focus-within > ul),能让键盘聚焦时也展开菜单
    • 二级菜单的 <ul></ul> 必须有 role="menu",子项用 role="menuitem",且 Tab 键能顺序进入、Arrow 键能切换,否则 WCAG 2.1 AA 直接不达标
    实际做出来才发现,hover 二级菜单最麻烦的不是样式,而是“什么时候该显示、谁来决定显示、显示了之后怎么让所有人都能操作”。DOM 结构、CSS 选择器范围、触屏降级、键盘路径——四个地方漏一个,菜单就卡在半空中。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

624

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

21

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

521

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

412

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

553

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5646

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

491

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

216

2023.09.04

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

462

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.4万人学习

AngularJS教程
AngularJS教程

共24课时 | 3.7万人学习

CSS教程
CSS教程

共754课时 | 32.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号