CSS响应式导航菜单折叠_hover与媒体查询结合

阿杰同学_8050

阿杰同学_8050

2025-11-20

822人浏览

原创

答案:通过媒体查询和:hover实现响应式导航,大屏水平展示,小屏悬停展开。利用flex布局与display切换,在768px以上屏幕隐藏触发器并横向排列,以下屏幕显示菜单按钮,悬停时下拉垂直列表,适配PC与平板;移动端建议禁用hover改用点击或全展,确保兼容性。

css响应式导航菜单折叠_hover与媒体查询结合

实现一个响应式导航菜单,关键在于结合 :hover 伪类与 媒体查询(Media Queries),在不同屏幕尺寸下提供良好的交互体验。尤其在移动端或小屏设备上,通过 hover 触发的折叠效果可以简化操作,避免使用 JavaScript 的复杂性。

1. 响应式布局基础:使用媒体查询控制显示方式

在大屏幕上,导航通常水平排列;当屏幕变窄时,应折叠为垂直列表或隐藏部分内容。通过媒体查询切换样式:

/* 默认小屏下隐藏部分菜单 */
nav ul {
  flex-direction: column;
  display: none;
}
<p>/<em> 大屏显示为横向布局 </em>/
@media (min-width: 768px) {
nav ul {
display: flex;
flex-direction: row;
}
}</p>

2. 使用 :hover 实现无JS折叠展开

在小屏设计中,可设置一个“菜单项”作为触发器,鼠标悬停时展开子菜单。适用于支持 hover 的设备(如平板、PC),在触摸屏上需注意兼容性。

/* 折叠菜单触发项 */
nav .toggle:hover + ul,
nav ul:hover {
  display: flex;
  flex-direction: column;
  position: absolute;
  background: #fff;
  width: 100%;
}

说明:当用户悬停在“toggle”元素上时,其后的

    显示。同时,整个菜单区域保持 hover 状态时也持续可见。

    jm-jsjkxyjs02-zlm-405
    jm-jsjkxyjs02-zlm-405

    使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。

    下载

    3. 移动端适配建议

    纯 CSS 的 hover 在手机浏览器中行为不一致(点击可能触发一次 hover,无法持续)。建议:

    • 仅在桌面端依赖 hover 折叠
    • 使用媒体查询限制 hover 效果只在 min-width: 768px 以上生效
    • 移动端改用点击事件或全展开布局

    4. 完整结构示例

    <nav><div class="toggle">☰ Menu</div>
      <ul>
    <li><a href="#">首页</a></li>
        <li><a href="#">关于</a></li>
        <li><a href="#">联系</a></li>
      </ul></nav>

    CSS 关键代码:

    nav {
      position: relative;
    }
    <p>nav .toggle {
    display: block;
    }</p><p>@media (min-width: 768px) {
    nav .toggle {
    display: none;
    }
    nav ul {
    display: flex;
    position: static;
    }
    }</p><p>@media (max-width: 767px) {
    nav ul {
    display: none;
    flex-direction: column;
    }
    nav .toggle:hover + ul,
    nav ul:hover {
    display: flex;
    }
    }</p>

    基本上就这些。利用媒体查询区分设备类型,再结合 hover 实现简单的交互,可以在不引入 JavaScript 的情况下完成轻量级响应式导航。虽然在纯触屏设备上有局限,但在多平台兼顾的场景中仍具实用价值。

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关专题

    更多
    js正则表达式
    js正则表达式

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

    2023.06.20

    4796

    8

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

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

    2023.07.28

    1415

    5

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

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

    2023.08.03

    1878

    5

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

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

    2023.08.17

    10343

    11

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

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

    2023.09.01

    1020

    4

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

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

    2023.09.04

    3024

    5

    Js中concat和push的区别
    Js中concat和push的区别

    Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

    2023.09.14

    1649

    5

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

    JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

    2023.09.21

    5189

    3

    js生成随机数方法
    js生成随机数方法

    JavaScript生成随机数的方法,包括使用Math.random()方法生成指定范围内的随机整数、生成随机字符串和生成随机颜色。根据具体需求,可以选择适合的方法来生成随机数,以实现各种功能 。

    2023.09.25

    3035

    5

    热门下载

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

    精品课程

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

    共14课时 | 1.6万人学习