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

如何用html和css写一个下拉菜单

轻明姑娘_8476

轻明姑娘_8476

发布时间:2026-02-13 19:03:09

|

213人浏览过

|

来源于php中文网

原创

纯 CSS 下拉菜单用 :hover 即可实现桌面端悬停展开,但移动端必须用 JavaScript;定位偏移需给触发按钮父容器设 position: relative;显隐控制推荐 visibility: hidden + opacity 过渡;移动端闪退主因是事件冒泡,需 stopPropagation 或用 closest 判断。

如何用html和css写一个下拉菜单

下拉菜单必须用 :hover 还是得靠 JavaScript?

纯 CSS 下拉菜单在现代浏览器里完全可行,:hover 就够用——但仅限鼠标悬停;移动端点击展开必须加 JavaScript。别硬套“纯 CSS 万能”思路,否则在 iOS Safari 上点一下没反应,用户以为菜单坏了。

  • 桌面端:用 :hover 触发 display: block 或 opacity/visibility 动画最轻量
  • 移动端::hover 不稳定(iOS 会延迟触发甚至不触发),得监听 click 或用 details/summary 原生语义化方案
  • 无障碍要求高时,focus 和 keydown(如 Enter / 空格)也得支持,光靠 :hover 不够

position: absolute 的菜单定位为什么总偏移?

下拉项脱离文档流后,top 和 left 的参照物是最近的「已定位祖先元素」(即 position 为 relative、absolute 或 fixed 的父级)。如果忘了给菜单父容器加 position: relative,它就会往上一直找,最终相对 定位,导致飘走。

  • 必须给触发按钮的直接父容器设 position: relative
  • 避免用 margin-top 把菜单“推”到正确位置——这属于 hack,响应式下极易错乱
  • 若父容器本身有 transform(比如用了 scale 或 translate),它也会成为新的 containing block,可能造成意外偏移

用 display: none 还是 visibility: hidden 控制显隐?

二者行为差异直接影响可访问性和动画效果:display: none 彻底移出渲染树,屏幕阅读器读不到,也无法做 opacity 过渡;visibility: hidden 保留占位和语义,但看不见也点不了。

CSS工具箱(专业版)
CSS工具箱(专业版)

全功能 CSS 工程手册,覆盖性能优化、无障碍、设计系统与跨浏览器兼容。

下载
  • 要过渡淡入淡出:用 visibility: hidden + opacity: 0 组合,再配合 transition
  • 要节省渲染开销、且不需要动画:display: none 更干净
  • 用 aria-hidden="true" 配合 display: none,确保屏幕阅读器同步忽略隐藏菜单
  • 别只切 opacity 而不改 visibility 或 display——透明但可聚焦、可点击,会破坏交互逻辑

移动端点击后菜单闪退,是什么原因?

典型表现是:点一下菜单弹出,立刻又收回去。根本原因是点击事件冒泡到了 或其他监听了全局 click 关闭菜单的逻辑上,而你的菜单还没来得及阻止默认或停止传播。

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

  • 给菜单容器的 click 事件加 e.stopPropagation()
  • 在 document 级关闭逻辑里,用 e.target.closest(".dropdown") 判断点击是否在菜单内外,而不是简单 if (!e.target.matches('.dropdown-trigger'))
  • 避免在 touchstart 和 click 上重复绑定——移动端 click 有 300ms 延迟,容易误判两次
  • 更稳妥的做法:用 focusout + setTimeout 延迟关闭,给用户留出移入子菜单的时间

真正麻烦的从来不是写出来,而是让 hover、focus、click、touch、键盘、屏幕阅读器全走对同一套状态逻辑。漏掉任意一种,菜单就在某个场景下“失灵”。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

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

咔片AIPPT

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

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

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

切问学术

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

豆包大模型

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

UP简历
UP简历 Hot

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

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

352

2023.11.23

margin在css中是啥意思
margin在css中是啥意思

在CSS中,margin是一个用于设置元素外边距的属性。想了解更多margin的相关内容,可以阅读本专题下面的文章。

877

2023.12.18

css3transition
css3transition

css3transition属性用于指定如何从一个CSS样式过渡到另一个CSS样式,本专题为大家提供transition相关的文章、相关下载和相关课程,大家可以免费体验。

1990

2023.06.27

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

20

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

40

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

20

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

40

2026.11.04

热门下载

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

精品课程

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

共14课时 | 1.6万人学习

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

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