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

yizhihongxing

一、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日

相关文章

  • CSS3 3D位移translate效果实例介绍

    让我来为您详细讲解“CSS3 3D位移translate效果实例介绍”完整攻略。 简介 CSS3 3D位移translate效果是利用CSS3的transform属性实现的一种动画效果,可以在多维度上改变元素的位置,实现复杂的动画效果,比如折叠、旋转、滑动等。 基本用法 下面的示例演示了如何使用CSS3 3D位移translate效果,将一个div元素向右平…

    css 2023年6月10日
    00
  • JavaSctit 利用FileReader和滤镜上传图片预览功能

    下面就为您详细讲解“JavaScript利用FileReader和滤镜上传图片预览功能”的完整攻略。 简介 在网站开发中,图片上传是一个非常重要的功能,但是大多数情况下,用户只有在上传完成后才能预览图片,这会为用户带来不便。所以,在本文中,我们将为您讲解如何使用JavaScript利用FileReader和滤镜实现上传图片的预览功能。 操作步骤 HTML代码…

    css 2023年6月11日
    00
  • 通过CSS规则禁止选中文字的实现代码

    要禁止选中文字,可以使用CSS中的user-select属性,其控制用户是否能够选择文本区域。下面是实现该效果的代码: -webkit-user-select: none; /* for Chrome, Safari, and Opera */ -moz-user-select: none; /* for Firefox */ -ms-user-select…

    css 2023年6月9日
    00
  • background和background-Color的区别介绍

    当我们为一个元素设置背景时,可以使用两个属性:background 和 background-color。虽然两个属性都用来设置背景颜色,但是它们的含义不同,下面分别来介绍。 background 属性 background 属性用于设置背景的所有相关属性,包括背景颜色、背景图片、背景位置、背景重复、背景尺寸等等。 语法如下: background: bac…

    css 2023年6月9日
    00
  • 如何实现div 图片在DIV内水平居中

    如何实现div图像在div内水平居中有几种方法:使用text-align:center和display:flex;justify-content:center;两种方法。 使用text-align:center实现div图像在div内水平居中 可以通过以下步骤实现: 为包含图片的div元素设置布局方式(display)为block或者inline-block…

    css 2023年6月9日
    00
  • Webpack 中 css import 使用 alias 相对路径的方法

    在使用 Webpack 打包项目时,为了更方便地引用 CSS 样式,我们通常会使用 alias 别名来定义 CSS 文件存放的路径。但是,在使用 alias 别名时,如何在 CSS 中正确引用文件呢?下面来详细介绍一下这个过程。 1. 配置 Webpack 首先,在 Webpack 配置文件中,需要定义别名 alias,以便正确引用 CSS 文件。可以在 w…

    css 2023年6月9日
    00
  • jQuery niceScroll滚动条错位问题的解决方法

    接下来我会分享一下关于“jQuery niceScroll滚动条错位问题的解决方法”的完整攻略,主要包括以下几个部分: 问题描述: 在使用 jQuery niceScroll 插件时,有时候会出现滚动条错位的问题。具体表现为滚动条的位置与内容不匹配,无法正常滚动,影响用户体验。接下来我们将探讨如何解决这个问题。 解决方法: (1)第一种解决方法: 可以通过在…

    css 2023年6月10日
    00
  • css float 解析学习

    CSS Float 解析学习 CSS 中的 float 属性用于设置元素的浮动方式,可以使元素脱离文档流并向左或向右浮动。本文将详细讲解 float 属性的使用方法、取值范围、注意事项和示例说明。 1. 使用方法 float 属性可以应用于块级元素和行内元素。使用方法如下: selector { float: value; } 其中,selector 表示要…

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