通用的二级菜单代码(css+javascript)

一、CSS部分

  1. 菜单样式设置

对于菜单样式设置,可以使用以下 CSS 属性:

.menu {
    list-style: none; /* 去掉默认的贡献,使其显示为列表项形式 */
    position: relative; /* 绝对定位父元素,默认隐藏下拉菜单 */
    z-index: 1; /* 只有z-index属性是大于等于1,才算浮动在文档流之上 */
}

.menu > li {
    float: left; /* 将列表项横向排列 */
    position: relative; 
}

.menu > li > a {
    display: block;
    padding: 10px;
    text-decoration: none;
    color: #333;
    background-color: #f2f2f2;
}

.menu > li:hover > a /* 鼠标悬浮时的颜色 */
.menu > li:focus > a /* 获得焦点时的颜色 */
.menu > .current > a /* 当前项的颜色 */
{
    background-color: #ccc;
}
  1. 下拉菜单样式设置

对于下拉菜单,可以设置以下 CSS 属性:

.sub-menu {
    display: none; /* 默认隐藏下拉菜单 */
    position: absolute; /* 绝对定位子元素 */
    top: 100%; /* 将下拉菜单设置在父元素的下方 */
    left: 0; /* 将下拉菜单从左边界对齐 */
    z-index: 2; /* z-index 属性大于父元素,使其浮在父元素之上 */
}

.menu > li:hover > .sub-menu {
    display: block; /* 鼠标悬浮时显示下拉菜单 */
}

二、JavaScript 部分

  1. 获取元素

首先,要获取菜单和下拉菜单的相关元素,可以使用以下代码:

const menu = document.querySelector('.menu'); /* 获取菜单列表 */
const menuItems = Array.from(menu.querySelectorAll('li')); /* 获取所有菜单列表项 */
const subMenus = Array.from(menu.querySelectorAll('.sub-menu')); /* 获取所有下拉菜单 */
  1. 设计交互

接下来,设计与用户的交互效果。

menuItems.forEach((item, index) => {
  const subMenu = subMenus[index];
  item.addEventListener('mouseenter', () => {
    subMenu.classList.add('active');
  });
  item.addEventListener('mouseleave', () => {
    subMenu.classList.remove('active');
  });
});

鼠标移入后,添加一个 active 类名,实现下拉菜单的逐渐出现。鼠标移出后,移除 active 类名,实现下拉菜单的逐渐隐藏。

  1. 完整示例说明

下面给出一个完整的示例:

HTML:

<ul class="menu">
  <li>
    <a href="#">一级菜单1</a>
    <ul class="sub-menu">
      <li><a href="#">二级菜单1-1</a></li>
      <li><a href="#">二级菜单1-2</a></li>
      <li><a href="#">二级菜单1-3</a></li>
    </ul>
  </li>
  <li><a href="#">一级菜单2</a></li>
  <li>
    <a href="#">一级菜单3</a>
    <ul class="sub-menu">
      <li><a href="#">二级菜单3-1</a></li>
      <li><a href="#">二级菜单3-2</a></li>
      <li><a href="#">二级菜单3-3</a></li>
    </ul>
  </li>
</ul>

CSS:

.menu {
    list-style: none; /* 去掉默认的贡献,使其显示为列表项形式 */
    position: relative; /* 绝对定位父元素,默认隐藏下拉菜单 */
    z-index: 1; /* 只有z-index属性是大于等于1,才算浮动在文档流之上 */
}

.menu > li {
    float: left; /* 将列表项横向排列 */
    position: relative; 
}

.menu > li > a {
    display: block;
    padding: 10px;
    text-decoration: none;
    color: #333;
    background-color: #f2f2f2;
}

.menu > li:hover > a /* 鼠标悬浮时的颜色 */
.menu > li:focus > a /* 获得焦点时的颜色 */
.menu > .current > a /* 当前项的颜色 */
{
    background-color: #ccc;
}

.sub-menu {
    display: none; /* 默认隐藏下拉菜单 */
    position: absolute; /* 绝对定位子元素 */
    top: 100%; /* 将下拉菜单设置在父元素的下方 */
    left: 0; /* 将下拉菜单从左边界对齐 */
    z-index: 2; /* z-index 属性大于父元素,使其浮在父元素之上 */
}

.menu > li:hover > .sub-menu {
    display: block; /* 鼠标悬浮时显示下拉菜单 */
}

JavaScript:

const menu = document.querySelector('.menu'); /* 获取菜单列表 */
const menuItems = Array.from(menu.querySelectorAll('li')); /* 获取所有菜单列表项 */
const subMenus = Array.from(menu.querySelectorAll('.sub-menu')); /* 获取所有下拉菜单 */

menuItems.forEach((item, index) => {
  const subMenu = subMenus[index];
  item.addEventListener('mouseenter', () => {
    subMenu.classList.add('active');
  });
  item.addEventListener('mouseleave', () => {
    subMenu.classList.remove('active');
  });
});

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通用的二级菜单代码(css+javascript) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS如何实现手机端输入验证码效果

    为了实现手机端输入验证码效果,可以通过以下步骤来逐步完成: 1. HTML代码 首先,在HTML中添加验证码输入框,可以使用<input type=”text”>标签。结合Bootstrap框架,可以使用form-group和form-control类来实现: <div class="form-group"> &l…

    css 2023年6月10日
    00
  • CSS元素的6种显示类型

    CSS元素显示类型是指一个HTML元素在页面上以什么样的方式呈现。在CSS中,元素显示类型分为以下几种: 块级元素(Block) 块级元素以块的形式展现在页面上,每个块级元素都会自动换行。块级元素可以包含内联元素和其他块级元素。常见的块级元素包括div、h1、p等。 代码示例: <div>This is a block level element…

    Web开发基础 2023年3月20日
    00
  • css3实现wifi信号逐渐增强效果实例

    下面我将为大家详细讲解“CSS3实现WiFi信号逐渐增强效果实例”的完整攻略。 首先,我们要了解到本次实例的主要思路,即利用CSS3的动画效果,实现WiFi信号逐渐增强的动态效果。接下来,我们可以根据以下步骤来实现这个效果。 1. 编写HTML结构 首先,我们需要先编写基础的HTML结构。这里我们假设WiFi信号区域是一个div容器,内部还包含三个div元素…

    css 2023年6月10日
    00
  • CSS相册简单实现方法(功能分析及代码)

    下面详细讲解 “CSS相册简单实现方法(功能分析及代码)”的完整攻略: 功能分析 首先我们需要明确需求和功能,本文实现的相册有以下功能: 点击缩略图弹出对应的大图; 可以左右切换大图; 多张大图间可相互切换; 大图浏览时,“关闭”、“左右切换”、“放大缩小”三个功能按钮; 缩略图上方支持添加文字描述。 代码实现 经过功能分析,我们按照以下步骤实现: 准备所需…

    css 2023年6月10日
    00
  • 响应式Web之流式网格系统

    响应式Web是指网站能够在各种尺寸的设备上自适应地呈现,而流式网格系统是响应式Web设计的重要组成部分,可以通过流式网格系统来实现页面的自适应布局。下面将详细讲解如何构建流式网格系统。 流式网格系统是什么? 流式网格系统是一种响应式Web设计中常用的方法,它可以让网站布局根据不同屏幕尺寸动态地改变。具体而言,流式网格系统是通过将页面上的元素放置在一个基于比例…

    css 2023年6月10日
    00
  • 空心三角形的简单实现(必看篇)

    以下是详细讲解“空心三角形的简单实现(必看篇)”的攻略。 简介 在计算机图形学中,绘制三角形是一个基础的操作。本文将介绍如何用最基础的图形学算法,实现一个空心三角形的绘制。 准备 为了实现绘制空心三角形,需要我们先了解如何使用 Canvas 在网页中绘制图形。以下是一个简单的绘制红色矩形的示例: <!DOCTYPE html> <html&…

    css 2023年6月10日
    00
  • animate.css在vue项目中的使用教程

    下面是关于“animate.css在vue项目中的使用教程”的完整攻略。 1. 下载animate.css库 首先,需要从animate.css的官方Github地址(https://github.com/animate-css/animate.css)下载animate.css的库文件,将下载后的animate.css文件放置在你的Vue项目中的任意目录下…

    css 2023年6月10日
    00
  • 解决移动端1px边框最好的方法(推荐)

    针对网站作者这个身份,我来详细讲解“解决移动端1px边框最好的方法(推荐)”的完整攻略: 什么是1px边框问题 在移动端浏览器上,1px的边框实际渲染会显得比较粗,看上去并不是真正的1px,这是因为手机屏幕的设备像素比(devicePixelRatio)很高,为了适应高像素的屏幕,浏览器会把css像素转换为物理像素,这就会导致设备像素比不是1时,1px的边框…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部