通用的二级菜单代码(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日

相关文章

  • Zen Coding 简易快速的HTML编写

    Zen Coding 是 Web 前端开发中最为流行的 HTML/CSS 快捷输入工具之一,它可以帮助开发者减少代码量,提高编写代码的效率。以下是 Zen Coding 的使用攻略: 简介 Zen Coding 是一种使用简单记号来快速编写 HTML 和 CSS 代码的方法。Zen Coding 的核心思想是以简单的方式表示复杂的构建,它通过预定义的缩写将代…

    css 2023年6月9日
    00
  • 通过优化网页页面降低对内存及CPU的占用

    通过优化网页页面降低对内存及CPU的占用是优化网站性能的一个关键步骤,本文将详细讲解如何通过优化网页页面来减少对内存及CPU的消耗。 1. 合理使用图片 大量的图片的加载将会占用大量的内存和CPU资源,因此合理使用图片将有助于减少对内存及CPU的消耗。以下是几个优化图片的技巧: 压缩图片:大图片将占用较多的内存和CPU资源,使用图片压缩工具将有助于减小图片的…

    css 2023年6月11日
    00
  • CSS3近阶段篇之酷炫的3D旋转透视

    CSS3近阶段篇之酷炫的3D旋转透视 简介 本文将讲解如何使用CSS3实现3D旋转透视的效果,使网站更加美观炫酷。本文将分为以下几个部分: 了解3D旋转透视效果的基本概念 使用transform属性实现3D旋转透视 使用perspective属性控制透视效果 案例演示 3D旋转透视的基本概念 3D旋转透视指的是,将一个元素在三维空间内进行旋转,并让它看起来像…

    css 2023年6月10日
    00
  • CSS样式表创建美妙绝伦的网站

    那我就来为大家详细讲解一下“CSS样式表创建美妙绝伦的网站”的完整攻略。 CSS样式表是什么? CSS是一种样式表语言,用于描述网页上的样式和布局。通过在网页中添加CSS样式表,我们可以更加自由地控制网页的样式,使网页的布局、颜色、字体、大小、边框、背景等很多方面更加美观和响应式。 为什么使用CSS样式表? CSS样式表与网页HTML结构代码分离,这意味着我…

    css 2023年6月9日
    00
  • css-sprite使用详解

    CSS Sprite使用详解 CSS Sprite是一种将多个小图片合并成一张大图片的技术,通过CSS的background-position属性来控制显示的位置,从而减少HTTP请求次数,提高页面加载速度。本攻略将详细讲解CSS Sprite的使用方法,包括制作Sprite图、CSS代码的编写、应用Sprite图的方法等,并提供两个示例说明。 1. 制作S…

    css 2023年5月18日
    00
  • 浅谈pc和移动端的响应式的使用

    下面是关于“浅谈PC和移动端响应式的使用”的完整攻略。 什么是响应式设计? 响应式设计是一种设计方法,它能够使网站在不同的设备上展现不同的样式和布局。这种方法可以通过媒体查询、弹性网格布局和图片自适应等方式实现。 响应式设计的原理 响应式设计基于媒体查询,能够让网站在不同的设备上自动适应不同的样式。 媒体查询是CSS3的一个新功能,它根据不同的设备分别应用不…

    css 2023年6月10日
    00
  • 详解css栅格系统在项目中的灵活运用

    详解css栅格系统在项目中的灵活运用 什么是CSS栅格系统? CSS栅格系统是一种基于网格的布局系统,它将页面的整个宽度分为若干个等宽的列,开发者可以选择在其中的某些列来放置内容。CSS栅格系统使页面开发更加简单并且可以适应不同大小的屏幕。 如何使用CSS栅格系统? 在使用CSS栅格系统时,最好使用一些已经成熟的框架,如Bootstrap、Foundatio…

    css 2023年6月11日
    00
  • HTML 无序列表项目符号使用图片的CSS写法

    要使用图片作为HTML无序列表的项目符号,需要使用CSS的list-style-type属性以及background-image属性来实现。 具体步骤如下: 选择一个符合要求的图片作为无序列表项目符号。 在CSS文件中设置ul或ol的list-style-type属性为none,取消默认的项目符号。 针对每个项目单独设置background-image属性,…

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