前端:纯HTML、CSS和JS菜单样式

实现了一个多级折叠菜单系统,使用纯HTML、CSS和JavaScript(无任何框架)

一、二级菜单展开

1、实现效果

初始状态-展示全部一级菜单

选中共状态,一级标题选中共为蓝色背景色,二级标题选中共为蓝色文字,展开右侧图标为-,后缩状态右侧图标为+

2、实现

​HTML结构​

<ul class="menu"><li class="menu-item"><div class="menu-header"><a href="#" class="menu-link">一级标题</a><span class="toggle">+</span></div><ul class="submenu"><li><a href="#" class="submenu-link">子菜单项</a></li><!-- 更多子项... --></ul></li><!-- 更多一级菜单... -->
</ul>
  • ​层级关系​​:menu > menu-item > menu-header + submenu
  • ​关键元素​​:
    • .menu-header - 可点击的菜单标题区域
    • .toggle - 控制展开/折叠的"+"/-"按钮
    • .submenu - 默认隐藏的子菜单容器

CSS样式​

.menu-header {display: flex; /* Flex布局实现水平排列 */align-items: center; /* 垂直居中 */justify-content: space-between; /* 左右分散对齐 */background-color: #76787b; /* 灰色背景 */transition: background-color 0.3s ease; /* 悬停动画 */
}.submenu {display: none; /* 初始隐藏子菜单 */padding-left: 30px; /* 缩进效果 */background-color: #f1f1f1; /* 浅灰色背景 */
}.active .menu-header {background-color: #0096c7; /* 选中状态蓝色高亮 */
}
  • ​布局特点​​:
    • 使用Flexbox实现菜单标题和切换按钮的完美对齐
    • 子菜单默认隐藏(display: none
    • 通过缩进(padding-left)实现层级视觉区分

​JavaScript交互​

function toggleSubmenu(item) {const submenu = item.querySelector('.submenu');const toggle = item.querySelector('.toggle');if (submenu.style.display === 'block') {// 折叠逻辑submenu.style.display = 'none';toggle.textContent = '+';} else {// 展开逻辑submenu.style.display = 'block';toggle.textContent = '-';}
}
  • ​核心功能​​:

    1. ​点击菜单头​​时切换子菜单显示状态
    2. ​自动关闭其他菜单​​(保持单开模式)
    3. ​视觉反馈​​:
      • 切换"+"和"-"图标
      • 添加.active类改变背景色

​关键实现技巧​

  • ​纯CSS隐藏/显示​​:通过display: none/block控制子菜单显隐
  • ​状态管理​​:用.active类标记当前展开的菜单项
  • ​事件委托​​:直接给每个菜单头绑定点击事件(适合简单结构)
  • ​视觉层次​​:通过背景色和缩进区分不同级别菜单

实现代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Multi-Level Menu with Flexbox</title><style>/* styles.css */body {font-family: Arial, sans-serif;margin: 0;padding: 0;}.menu-container {padding: 20px;}.menu {list-style-type: none;padding: 0;margin: 0;width:400px;}.menu-header {display: flex;/* 使用 Flexbox 布局 */align-items: center;/* 垂直居中对齐 */justify-content: space-between;/* 图标和文字之间的间距 */padding: 10px 20px;background-color: #76787b;color: white;cursor: pointer;transition: background-color 0.3s ease;border:1px solid #fff;}.menu-header:hover {background-color: #444;}.toggle {font-size: 20px;color: white;}.menu-link {color: white;text-decoration: none;flex-grow: 1;/* 让链接占据剩余空间 */}.submenu {list-style-type: none;padding-left: 30px;display: none;/* 初始状态下隐藏子菜单 */background-color: #f1f1f1;}.submenu-link {display: block;padding: 5px 0;colo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos8 安装 Docker

yum 更换国内源 1. 备份原 yum 配置 cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/2. 下载新 yum 配置&#xff08;阿里源&#xff09; wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo3. 替换源中的系统版本变量 sed -…

AI测试工具Testim——告别自动化测试维护难题

随着人工智能技术的快速发展&#xff0c;AI测试工具正在成为提升软件研发效能的关键。每款AI的特性各有差异&#xff0c;今天&#xff0c;我们就给大家介绍一款专注于Web和移动应用的端到端的AI测试工具--Testim。 Testim的简介 官网地址&#xff1a;https://www.testim.io/ 简…

【默子AI】万字长文:MCP与A2A协议详解

【默子AI】万字长文&#xff1a;MCP与A2A协议详解 引言&#xff1a; 让一个大模型凭空解决所有问题&#xff0c;就像让一个书呆子不借助工具就去修汽车 即便他脑子里装满了理论知识&#xff0c;也缺少实践的“手脚”。 长期以来&#xff0c;AI助手&#xff08;尤其是LLM&#x…

LeNet5 神经网络的参数解析和图片尺寸解析

1.LeNet-5 神经网络 以下是针对 LeNet-5 神经网络的详细参数解析和图片尺寸变化分析&#xff0c;和原始论文设计&#xff0c;通过分步计算说明各层的张量变换过程。 经典的 LeNet-5架构简化版&#xff08;原始论文输入为 32x32&#xff0c;MNIST 常用 28x28 需调整&#xff09…

第二节:文件系统

理论知识 文件系统的基本概念&#xff1a;文件系统是操作系统中负责管理持久数据的子系统&#xff0c;它将数据组织成文件和目录的形式&#xff0c;方便用户存储和访问数据。Linux文件系统的类型&#xff1a;常见的 Linux 文件系统类型有 Ext2、Ext3、Ext4、XFS、Btrfs 等。Ex…

Python数据结构与算法(5)——动态规划

Python数据结构与算法(5)——动态规划 0. 学习目标1. 动态规划的基本概念1.1 什么是动态规划1.2 动态规划的核心思想1.3 动态规划的适用条件2. 动态规划的实现思路2.1 自顶向下:备忘录法 (Memoization)2.2 自底向上:表格法(Tabulation)3. 0/1 背包问题4. 最长公共子序列5…

【JAVA ee初阶】多线程(3)

一、出现线程安全的原因 1.【根本原因】线程的调度执行时随机的&#xff08;抢占式执行&#xff09;->罪魁祸首 2.多个线程同时修改同一个变量 如果是一个线程修改一个变量 或者 多个线程读取同一个变量 或者 多个线程修改不同变量 这些都没事。 3.修改操作不是原子的&a…

Halcon 3D 表面匹配基于形状

文章目录 prepare_object_model_3d 准备 3D 物体模型read_shape_model_3d — 读取3D匹配模型create_shape_model_3d 准备要匹配的3D模型find_shape_model_3d ——发现匹配模型project_shape_model_3d 将三维形状模型的边缘投影到图像坐标中。示例ignore_part_polarity&#xff…

【Linux】Java 开发者的 Linux 常用命令指南

Java 开发者的 Linux 常用命令指南 目录标题 Java 开发者的 Linux 常用命令指南1. Linux 目录结构2. 系统信息命令3. 服务管理系统服务防火墙管理 4. 文本编辑 (vi/vim)常用模式 5. 文件和目录操作查看与导航创建与删除查看文件内容查找文件 6. 用户管理7. 压缩和解压8. 权限管…

每日c/c++题 备战蓝桥杯(P1252洛谷 马拉松接力赛)

洛谷P1060 马拉松接力赛题解&#xff1a;贪心算法在资源分配中的巧妙应用 题目描述 P1060 马拉松接力赛是一道结合贪心策略与动态规划思想的资源分配问题。题目要求将25公里的马拉松接力赛合理分配给5名选手&#xff0c;使得总耗时最短。每位选手可跑1-10公里的整数距离&…

Nginx 中间件

Nginx&#xff08;发音为 "engine-x"&#xff09;是一款开源的高性能 HTTP 服务器和反向代理服务器&#xff0c;最初由 Igor Sysoev 开发。 它以其高性能、稳定性、丰富的功能集和低资源消耗而闻名&#xff0c;广泛应用于全球的 Web 服务架构中。 作为中间件&#…

Neo4j在win下安装教程(docker环境)

1. 安装命令 1.1 基于正式neo4j安装–不用 docker run --name neo4j-container -p 7474:7474 -p 7687:7687 -d neo4j1.2 基于community安装 需要部署两个Neo4j&#xff0c;一个正式库prod&#xff0c;一个测试库dev。 neo4j默认监听7474&#xff08;HTTP-也就是浏览器端口&…

kylin v10 + argo + ascend 310p多机多卡 pytorch distributed 训练

最近接了个模型训练编排多机多卡的改造需求&#xff0c;要求使用argo dag task启动多个节点&#xff0c;同时多个节点能实现 torch.distributed.launch 这样多机多卡的训练模式 简述技术 torch.distributed.launch命令介绍 我们在训练分布式时候&#xff0c;会使用到 torch.d…

[Mac] 使用homebrew安装miniconda

使用虚拟环境可以对不同项目的依赖进行隔离。可以使用venv或者conda来创建和使用虚拟环境。 venv是Python内置的虚拟环境管理模块&#xff0c;适合纯Python项目以及快速轻量级的开发和部署。conda具备更强大的版本管理能力&#xff0c;但是占用较大的磁盘空间。 考虑到我基本不…

CMU-15445(1)——环境搭建

前言 最近在找完暑期实习之后&#xff0c;终于有了一些干项目外的空余时间学习新的知识&#xff0c;在这么多轮面试中&#xff0c;数据库的考察非常多&#xff0c;但孱弱的数据库基础导致我有很多次面试被问住&#xff0c;因此我希望在学习CMU-15445&#xff08;Fall 2024&…

CSS元素动画篇:基于当前位置的变换动画(四)

基于当前位置的变换动画&#xff08;四&#xff09; 前言透明效果类元素动画闪烁动画效果效果预览代码实现 淡入动画效果效果预览代码实现 淡出动画效果效果预览代码实现 结语 前言 CSS元素动画一般分为两种&#xff1a;一种是元素基于当前位置的变换动画&#xff0c;通过不明…

STM32驱动AD5318配置8通道DA详细讲解

目录 1. AD5318 芯片特性 2、AD5318寄存器概述 3、SPI数据帧格式 3.1 控制位(Bit15) 3.2 地址位(Bit14-Bit12,3 位) 3.3 数据 / 控制码(Bit11-Bit0) 4、控制功能寄存器(控制位 = 1 时激活) 4.1 参考与增益配置(MM = 00) 4.2. LDAC模式(MM = 01) 4.3 掉…

如何搭建spark yarn 模式的集群集群

以下是搭建Spark YARN模式集群的一般步骤&#xff1a; 准备工作 - 确保集群中各节点安装了Java环境&#xff0c;并配置好 JAVA_HOME 环境变量。 - 各节点间能通过SSH免密登录。 - 安装并配置好Hadoop集群&#xff0c;YARN作为Hadoop的资源管理器&#xff0c;Spark YARN模式需要…

SpringMVC处理请求映射路径和接收参数

目录 springmvc处理请求映射路径 案例&#xff1a;访问 OrderController类的pirntUser方法报错&#xff1a;java.lang.IllegalStateException&#xff1a;映射不明确 核心错误信息 springmvc接收参数 一 &#xff0c;常见的字符串和数字类型的参数接收方式 1.1 请求路径的…

在 Windows 系统上升级 Node.js

一、查询电脑端已经安装的 Node.js 版本 1、通过【winR】 键&#xff0c;输入 cmd&#xff0c;点击【确定】按钮打开 cmd 窗口 2、命令行界面输入 node -v 查看目前 Node.js 版本 3、命令行界面输入 npm -v 查看目前 npm 版本 二、进入官网地址下载安装包 1、官网地址&#x…