JS+CSS相对定位实现的下拉菜单

JS+CSS相对定位实现的下拉菜单是网页制作中比较常用的一种效果,它可以让页面菜单更加美观、实用。下面是它的完整攻略。

第一步:HTML布局

首先,需要定义一个下拉菜单触发器和下拉菜单的容器,代码如下:

<div class="dropdown">
  <button class="dropdown-trigger">下拉菜单</button>
  <div class="dropdown-menu">
    <a href="#">选项1</a>
    <a href="#">选项2</a>
    <a href="#">选项3</a>
  </div>
</div>

其中,.dropdown是下拉菜单容器的类名,.dropdown-trigger是触发下拉菜单的按钮的类名,.dropdown-menu是下拉菜单的类名,里面的<a>标签是下拉菜单中的选项。

第二步:CSS样式

接下来,需要给这个下拉菜单容器和相应的元素设置 CSS 样式,让它显示出效果,代码如下:

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1;
  display: none;
}

.dropdown-menu a {
  display: block;
  padding: 8px 20px;
}

其中,.dropdown.dropdown-menuposition 都是 relativeabsolute,表示相对定位和绝对定位。.dropdowndisplayinline-block,让按钮和下拉菜单在同一行,并且具有块级元素的样式表现。.dropdown-menutopleft 表示下拉菜单的位置,z-index 表示在堆叠层叠区域内的元素显示层的层级,display 表示下拉菜单不可见,等待 JS 控制。

第三步:JS脚本

最后,通过 js 控制触发器,使点击之后下拉菜单显示或隐藏。代码如下:

const dropdownTrigger = document.querySelector('.dropdown-trigger');
const dropdownMenu = document.querySelector('.dropdown-menu');

dropdownTrigger.addEventListener('click', function() {
    dropdownMenu.style.display = dropdownMenu.style.display === 'none' ? 'block' : 'none';
});

其中,通过 querySelector 方法获取到触发器和下拉菜单容器的元素对象。使用 addEventListener 方法监听触发器的点击事件,点击时如果下拉菜单不可见,设置 displayblock,下拉菜单就会显示出来。

示例说明

接下来,我们通过两个简单的示例,说明如何使用 JS+CSS 实现下拉菜单效果。

示例一:普通下拉菜单

HTML 布局:

<div class="dropdown">
  <button class="dropdown-trigger">菜单</button>
  <div class="dropdown-menu">
    <a href="#">选项1</a>
    <a href="#">选项2</a>
    <a href="#">选项3</a>
  </div>
</div>

CSS 样式:

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1;
  display: none;
}

.dropdown-menu a {
  display: block;
  padding: 8px 20px;
}

JS 脚本:

const dropdownTrigger = document.querySelector('.dropdown-trigger');
const dropdownMenu = document.querySelector('.dropdown-menu');

dropdownTrigger.addEventListener('click', function() {
    dropdownMenu.style.display = dropdownMenu.style.display === 'none' ? 'block' : 'none';
});

在浏览器中打开这个页面,点击菜单按钮可以看到下拉菜单的弹出和隐藏。

示例二:多级下拉菜单

对于多级下拉菜单,只需要在菜单选项中再嵌套一个下拉菜单容器即可,代码如下:

<div class="dropdown">
  <button class="dropdown-trigger">菜单</button>
  <div class="dropdown-menu">
    <a href="#">选项1</a>
    <a href="#">选项2</a>
    <div class="dropdown">
      <a href="#">选项3</a>
      <div class="dropdown-menu">
        <a href="#">子选项1</a>
        <a href="#">子选项2</a>
        <a href="#">子选项3</a>
      </div>
    </div>
    <a href="#">选项4</a>
  </div>
</div>

在 CSS 样式和 JS 脚本中不需要做太多的改变,只需要把新添加的 .dropdown.dropdown-menu 节点加入 CSS 样式中,并且在 JS 脚本中修改触发器和下拉菜单容器的选择器即可。

这就是使用 JS+CSS 相对定位实现的下拉菜单的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS+CSS相对定位实现的下拉菜单 - Python技术站

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

相关文章

  • IE7下父元素及子元素的隐藏顺序不当带来的display:none出现BUG

    在IE7浏览器中,当父元素使用display:none属性隐藏,子元素也使用display:none属性隐藏且先于父元素隐藏,再显示的时候会出现BUG,即子元素无法显示。要解决这个问题,可以执行以下步骤: 使用visibility:hidden代替display:none 在IE7浏览器下,使用visibility:hidden代替display:none能…

    css 2023年6月10日
    00
  • css重绘与重排的方法

    当我们在开发网站时,如果使用了CSS样式表进行样式布局,那么在浏览器渲染页面时,会按照以下流程进行渲染: 解析HTML文档,创建DOM树; 解析CSS样式,生成CSS规则树; 将DOM树和CSS规则树合并,生成渲染树; 对渲染树进行布局,计算每个元素的大小和位置等信息; 对渲染树进行绘制,将元素渲染到页面上。 在这个过程中,当我们修改了DOM树或者CSS样式…

    css 2023年6月9日
    00
  • css动画模拟太阳地球月球运动轨迹示例

    CSS动画可以通过优雅的代码实现复杂的效果展示,如太阳系的运动轨迹。以下是实现CSS动画模拟太阳、地球、月球运动轨迹的攻略。 实现思路 在HTML结构中定义太阳、地球、月球的标签。 使用CSS设置容器的位置和大小,并设置其为相对定位。 设置每个太阳系实体的大小、颜色、位置和运动轨迹等各项属性。 在动画中使用CSS的关键帧(@keyframes)实现运动效果。…

    css 2023年6月9日
    00
  • 使用Vue 控制元素显示隐藏的方法和区别

    使用Vue.js可以很方便地控制元素的显示和隐藏。常用的方法包括使用v-show和v-if指令。虽然这两者都可以实现元素的显示隐藏,但是它们之间还是有一些区别的。 使用v-show指令 v-show指令控制元素的显示和隐藏,主要的区别在于当元素被隐藏时,依然保留它的DOM节点和状态,只是将其样式设置为display: none。因此,当v-show指令切换元…

    css 2023年6月10日
    00
  • CSS网页布局入门教程2:一列自适应宽度

    下面我将详细讲解“CSS网页布局入门教程2:一列自适应宽度”的完整攻略。 一、前言 在网站开发中,网页布局是一个必须要掌握的技能。CSS网页布局有很多种方式,其中一列自适应宽度是最为基础和最为常见的一种,也是我们在网站开发中经常会用到的一种。本文将从以下几个方面详细讲解一列自适应宽度的实现方法。 二、一列自适应宽度 一列自适应宽度是指网页的主要内容与网页容器…

    css 2023年6月10日
    00
  • css 优先级关系

    CSS 优先级关系决定了当多个 CSS 规则同时作用于同一个元素时,哪一条 CSS 规则会被优先应用。具体来说,CSS 优先级关系是根据优先级值进行比较的,优先级值越大的 CSS 规则越具有优先权。下面我将一步步为您介绍 CSS 优先级关系的完整攻略。 一、优先级值的计算规则 优先级值是由选择器中的各个组成部分共同组成的。下面是各个部分的优先级值: 选择器部…

    css 2023年6月10日
    00
  • BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法

    BootStrap.css 在手机端滑动时右侧出现空白的原因 问题描述 在使用BootStrap.css布局的网站,当在手机端滑动页面时,经常会出现右侧出现空白的问题,这个问题通常出现在使用了container或container-fluid类的元素上。这是因为在手机端,页面宽度比较小,而BootStrap.css默认使用的栅格(Grid System)是基…

    css 2023年6月10日
    00
  • js原生瀑布流插件制作

    下面我将详细讲解制作 JavaScript 原生瀑布流插件的攻略。 1. 瀑布流布局 瀑布流布局是一种常见的网页布局形式,它的主要特点是多列等宽的布局,每一列中的元素高度可以不同,元素按顺序从上到下排列。这种布局形式可以很好地展示图片、文章等内容。 实现瀑布流布局的方式有很多种,其中一种常见的方式是使用 JavaScript 代码动态计算元素的位置和大小。下…

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