下拉菜单的两种实现方式:CSS和JS

如何使用原生js来实现下拉菜单 下拉菜单在页面中存在无非就是显示和隐藏的效果,鼠标滑动到标题显示下拉菜单,离开的使用关闭下拉菜单,但是在显示隐藏的时候会有一个小条件,就是控制鼠标移入移出事件的标签必须是包裹这个标题和下拉列表的,否则就会出现移入标题标签能够显示,但是移除标题标签就直接隐藏了,而我们要的效果是移入标题标签显示下拉菜单,而且移除标题标签,但是鼠标在下拉标签中,下拉菜单是显示的,所以在编写事件的时候,需要注意是由大盒子来控制里面的显示隐藏效果! 阅读详情

本文的下拉菜单核心是通过改变DISPLAY的值,来改变菜单的出现和隐藏.

在此简单介绍DISPLAY:

display:[参数] 属性定义:设置元素如何显示。

参数:默认为inline,具体参数如下表。

值 描述
none 此元素不会被显示。
block 此元素将显示为块级元素,此元素前后会带有换行符。
inline 默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block 行内块元素。(CSS2.1 新增的值)
list-item 此元素会作为列表显示。
run-in 此元素会根据上下文作为块级元素或内联元素显示。
compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
table 此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
inline-table 此元素会作为内联表格来显示(类似 <table>),表格前后没有换行符。
table-row-group 此元素会作为一个或多个行的分组来显示(类似 <tbody>)。
table-header-group 此元素会作为一个或多个行的分组来显示(类似 <thead>)。
table-footer-group 此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。
table-row 此元素会作为一个表格行显示(类似 <tr>)。
table-column-group 此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。
table-column 此元素会作为一个单元格列显示(类似 <col>)
table-cell 此元素会作为一个表格单元格显示(类似 <td> 和 <th>)
table-caption 此元素会作为一个表格标题显示(类似 <caption>)
inherit 规定应该从父元素继承 display 属性的值。

上表参考:http://www.w3school.com.cn/cssref/pr_class_display.asp

较常用的参数有:inline、none、inline-block、block等,

其中:

inline:常用于无序列表ul,通常列表会默认列式排列(排成一列),使用inline后便可以行式排列(排成一行),也就是元素后面不带换行符;高,行高及顶和底边距不可改变;宽度就是它的文字或图片的宽度,不可改变。 

block:高度,行高以及顶和底边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度 PS:会使元素后面带一个换行符;
inline-block:综合上述两点,使用它的同级元素会排成一行,并且拥有它父元素的宽度;

一、通过CSS实现下拉菜单

源代码:index.css

*{
    margin:0;
    padding: 0;
}
#nav{
    width: 600px;
    height: 50px;
    margin: 0 auto;
    background-color: #eee;
    color: #fff;
}
ul{
    list-style: none;
}
#nav ul li{
    width:100px;
    text-align: center;
    line-height: 50px;
    float: left;
}
#nav ul li ul li{
    float:none;
    background-color: #eee;
    display:none;
}
#nav ul li a{
    display:block;
}
#nav ul li a:hover{
    background-color:#ee0;
}
#nav ul li:hover ul li{
    display:block;
}




源代码:index.html

*{
    margin:0;
    padding: 0;
}
#nav{
    width: 600px;
    height: 50px;
    margin: 0 auto;
    background-color: #eee;
    color: #fff;
}
ul{
    list-style: none;
}
#nav ul li{
    width:100px;
    text-align: center;
    line-height: 50px;
    float: left;
}
#nav ul li ul li{
    float:none;
    background-color: #eee;
    display:none;
}
#nav ul li a{
    display:block;
}
#nav ul li a:hover{
    background-color:#ee0;
}
#nav ul li:hover ul li{
    display:block;
}



通过改变当鼠标没有放在导航栏中时,二级列表display属性为none,否则为block;


二、JS实现下拉列表

index.css

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>下拉菜单</title>
    <link rel="stylesheet" href="index.css">
</head>
<body>
    <div id="nav">
        <ul>
            <li><a href="">首页</a></li>
            <li><a href="">简介</a>
                <ul>
                    <li><a href="">名称</a></li>
                    <li><a href="">获奖详情</a></li>
                </ul>
            </li>
            <li><a href="">历史</a></li>
            <li><a href="">机构</a></li>
            <li><a href="">新闻</a></li>
            <li><a href="">关于我们</a></li>
        </ul>
    </div>
</body>
</html>
源代码:script.js

window.onload=initAll;
function initAll(){
    var menu=document.getElementById('li');
    var subMenu=document.getElementById('subnav');
    var subMenuLi=document.getElementById('subnav').getElementsByTagName('li');
    menu.onmouseover=over;
    subMenu.onmouseover=over;
    menu.onmouseout=out;
    subMenu.onmouseout=out;
    function over(){
        for(var i=0;i<subMenuLi.length;i++){
            subMenuLi[i].style.display="block";
        }
    }
    function out(){
        for(var i=0;i<subMenuLi.length;i++){
            subMenuLi[i].style.display="none";
        }
    }
}


源代码:index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>下拉菜单</title>
    <link rel="stylesheet" href="index.css">
    <script src="script.js"></script>
</head>
<body>
    <div id="nav">
        <ul>
            <li><a href="">首页</a></li>
            <li><a href="" id="li">简介</a>
                <ul id="subnav">
                    <li><a href="">名称</a></li>
                    <li><a href="">获奖详情</a></li>
                </ul>
            </li>
            <li><a href="">历史</a></li>
            <li><a href="">机构</a></li>
            <li><a href="">新闻</a></li>
            <li><a href="">关于我们</a></li>
        </ul>

    </div>
</body>
</html>
这里的主要问题在于JS文件中的
    menu.onmouseover=over;		//鼠标在一级列表上面时,显示
    subMenu.onmouseover=over;		//鼠标在二级列表上面时,显示
    menu.onmouseout=out;		//鼠标在一级列表上面时,不显示
    subMenu.onmouseout=out;		//鼠标在二级列表上面时,不显示

如果没有第二行和第四行,就会出现不能点击二级列表的问题,也就是一旦鼠标离开一级列表,二级列表马上消失。
















前端必知必会-CSS下拉菜单 本文介绍了的CSS下拉菜单使用,如有问题欢迎私信和评论。 阅读详情

相关推荐

JS练习之JS/CSS点击下拉菜单

一、效果图 先上效果图: 点击按钮后 二、代码篇 HTML代码: <h2>可点击的下拉菜单</h2> <p>点击按钮显示下拉菜单</p> <div class="dropdown"> <button onclick="myFunction()" class="dropbtn">下拉菜单</button> ...

qq_36882054的博客 1404

【JS】模拟下拉菜单

鼠标点击时,下拉菜单出现鼠标划过或按键盘上下箭头时,选中的菜单背景色变化,选项内容显示在输入框内鼠标点击或按下回车或空格键时,对应的内容显示在输入框内且下拉菜单消失。

xxxxxwxx的博客 1156

原生JS实现点击下拉菜单

接上一篇博文,这里实现点击下拉菜单。 与悬停不同的是,悬停的操作都是hover,直接写入CSS即可,这里需要将静态和动态样式分离,再JS添加点击事件,使用排他法绑定给目标元素特定的样式。 具体实现见下,其中需要注意的地方包括。 添加点击事件注意添加到父盒子section上,点击section,head和menu都会产生动态的样式变化(其实head可以添加点击事件来改变head的样式,但是head的点击事件无法改变menu的样式,所以这里统一选择绑定点击事件给父盒子section)。 其中sectio

waiwai1010的博客 4958

HTML、css、javascript的区别

3.JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。可以这么理解,有动画的,有交互的一般都是用。1.html是用来描述网页的一种语言,它不是一种编程语言,而是一种标记语言(标记标签),总的来说,html使用标记标签来描述网页。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。,但是一直未理解这三者的区别,现在回过头做一下区别。

好好学java 1184

[HTML] CSS + JS 多级下拉菜单

多级下拉菜单 //显示子菜单里的内容 function displaySubMenu(li) { var subMenu = li.getElementsByTagName("ul")[0]; subMenu.style.display = "block"; }

ShanHaiyang 7930

简洁实用的JS下拉菜单实现

下拉菜单是一种常见的网页元素,允许用户通过点击一个按钮或链接来展开一个列表。它的核心功能是节省页面空间,同时提供丰富的交互选择。在网页设计中,它们常被用于导航栏、表单选择器和配置菜单等多种场景。在Web开发中,仅仅实现功能是不够的,页面的外观和用户体验同样重要。本章将探讨如何使用CSS(层叠样式表)来定义和增强下拉菜单的样式与布局。

weixin_30789053的博客 1101

HTML和CSS+JS创建手风琴式菜单

HTML部分(含JS) CSS部分(选择器部分和阿里图标库部分) 如下所示的简易手风琴菜单 HTML部分 我是在JSP页面上写的 注:JavaScript的代码是我直接找的别人的,我并没有学过JS所以也不懂 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!doctype html> <html> <head> <me

Aruko的博客 1460

CSS与JavaScript协同打造动态下拉菜单

引入第三方JavaScript库(如jQuery)可以让动画实现变得更简单快捷,但使用原生JavaScript也可以达到类似的效果。原生JavaScript实现动画不需要额外加载库文件,有助于减小页面的加载时间。但使用库如jQuery则代码更为简洁,并且库中的方法通常更为健壮,支持更多的动画类型和更复杂的交互。// 使用原生JavaScript实现淡入淡出效果} else {}, 50);// 为触发元素添加点击事件监听器fadeIn()

weixin_35995661的博客 780

JavaScript实现鼠标悬停展开下拉菜单效果

最基础也是最关键的一步是创建一个名为的函数,用于处理单个菜单项的展开/收起动作。该函数接收一个参数——触发事件的目标元素(通常是父级<li>或其内部的<button>),然后查找其关联的子菜单(通常为.submenu),并通过方法切换显示状态。if (!// 切换类名// 同步 ARIA 状态选择合适的延迟时间对于交互质量至关重要。太短(如50ms)难以避免误触;太长(如800ms)则会让用户感觉“卡顿”或“无响应”。延迟时间(ms)用户感知描述。

weixin_33660045的博客 1053

解决国内网页无法加载reCaptcha的方法

科普: reCaptcha是Google公司的验证码服务,方便快捷,改变了传统验证码需要输入n位失真字符的特点。reCaptcha在使用的时候是这样的: 只需要点一下复选框,Google会收集一些鼠标轨迹、网络信息、浏览器信息等等,依靠后端的神经网络判断是机器还是人,绝大多数验证会一键通过,无需像传统验证码一样。但是reCaptcha使用了google.com的域名,这个域名在国内是被墙的。所以,也就导致了官网上无法注册/登录的问题,挡住了不少人入正的脚步。 解决办法: 【第一步】安装fir

调皮李小怪博客 25万+

下拉菜单的若干种实现方法

先说比较普遍的就是滑动的下拉菜单,可以通过CSS来做,也可以用JS做 都挺简单的,主要是通过父元素触发,然后在子元素能够保持住父元素的状态。 都是用原生写的。 CSS实现方法: <style> /* 下拉按钮样式 */ .dropbtn { background-color: #4CAF50; color: white; padding: 16px; ...

weixin_30426957的博客 430

告别CAPL编程!用Matlab/Simulink+CANoe实现复杂ECU仿真的5个技巧

本文介绍了如何利用Matlab/Simulink与CANoe进行联合仿真,以替代复杂的CAPL编程,高效实现复杂ECU仿真。文章分享了5个核心技巧,涵盖信号映射、模型编译集成、实时参数调整、性能优化及数据分析,帮助算法工程师构建稳定强大的仿真环境,显著提升开发与测试效率。

rgv234567的博客 296

js和jQuery写简单下拉菜单

1.jQuery写法 <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>下拉菜单</title> <script type="text/javascript" src="jquery-1.11.2.min....

weixin_30755709的博客 146

使用TensorFlow Lite Micro流程记录(带源码)

记录如何使用tensorflow lite micro,以及期间解决的问题

ZhaoDongyu_AK47的博客 6216

VSCode CMake 安装与配置详解

概述 在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。 所需工具: VSCode (需要安装以下插件) C/C++ C++ Intellisense CMake CMake tools CMake Tools Helper CMake MinGW 安装CMake 下载链接:...

Markus 8万+

分别用html/css、javascript、jQuery实现下拉菜单的显示和隐藏

一、html/css实现下拉菜单的显示和隐藏 简单来说就是通过对css样式的控制来实现下拉菜单的显示和隐藏 具体代码示例如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=d...

HuLuWa1997的博客 4762

GeoScene Pro教程(002):GeoScenePro基础操作

GeoScenePro基础操作介绍。

WwLK123的博客 2460

如何使用CSS实现一个下拉菜单

在现代网页设计中,下拉菜单(Dropdown Menu)是一个常见的UI组件,用于提供额外的导航选项或功能,而无需占用过多的屏幕空间。通过CSS,我们可以轻松地创建一个美观且功能齐全的下拉菜单。本文将详细介绍如何使用CSS来实现一个基本的下拉菜单,并通过多个示例帮助读者理解和应用这些技术。下拉菜单通常包含两个主要部分:首先,我们需要构建一个基本的下拉菜单结构: 代码解释 :包含整个导航菜单的标签。 :代表整个菜单列表。 :包含下拉菜单的菜单项。 :触发下拉菜单的链接。 :包含下拉菜单项的列表。 示例二:

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 4484

2026年医疗AI的可信革命全栈实现(上)

医疗AI可信化:贝叶斯网络与向量数据库的协同架构 本文探讨2026年医疗AI发展的关键转折点——从追求生成能力转向构建可信决策系统。核心观点认为,医疗AI下一阶段的竞争焦点在于不确定性量化和错误传播约束,而非单纯的问答流畅度。研究提出以Python为开发语言、结合向量数据库与贝叶斯网络的混合架构: 技术分层 语言层(LLM):处理自然语言交互与工具调用 证据层(Milvus/Qdrant):实现可审计的临床知识检索 概率层(pgmpy/PyMC):执行贝叶斯推理与风险路由 治理层:确保权限控制与人工复核机制

AllenLV的博客 1149

STM32实战开发(120):基于STM32的智能pH值检测系统开发

pH值检测:通过pH传感器实时检测溶液的酸碱度。数据采集与处理:STM32单片机通过模拟信号采集并进行数字化处理。数据显示与控制:通过LCD或OLED屏幕实时显示pH值。数据存储与上传:将数据保存在本地SD卡,或通过Wi-Fi模块上传至云平台。低功耗设计:适合长时间运行,减少能源消耗。本文介绍了如何基于STM32单片机开发智能pH值检测系统,涉及硬件设计、软件开发及应用实现。该系统可以实时检测pH值,并将数据展示、存储、上传至云平台,适用于环境监测、农业、水处理等多个领域。

2201_76125393的博客 1816

html下拉菜单几种方式,html下拉菜单的实现方式

**方法一:纯css实现下拉菜单**Document*{margin: 0;padding:0;}#nav{/*置父容器高度,宽度,背景颜色,容器水平居中*/background: #eee;width: 600px;height: 40px;margin: 0 auto;}#nav ul{/*去掉点点*/list-style: none;}#nav ul li{/*每一个li左浮动形成横排,高...

weixin_35993844的博客 6283

YOLO11改进 | 卷积模块 | 轻量化GSConv替换普通的conv

yolo11,GSConv,卷积模块

kay_545 3955

html纵向下拉菜单怎么做,html下拉菜单的实现方式

**方法一:纯css实现下拉菜单**Document*{margin: 0;padding:0;}#nav{/*置父容器高度,宽度,背景颜色,容器水平居中*/background: #eee;width: 600px;height: 40px;margin: 0 auto;}#nav ul{/*去掉点点*/list-style: none;}#nav ul li{/*每一个li左浮动形成横排,高...

weixin_34362937的博客 2080

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

CSS、javascript、jquery三种方法实现下拉菜单

1、纯CSS制作 &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;html+css实现下拉菜单&lt;/title&gt; &lt;style type="text/css"&gt;

weixin_43264322的博客 465

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

CSS 下拉菜单

下面是关于的完整中文讲解,包括原理、结构、常用样式和响应式建议,不使用 JavaScript 也能实现基本的交互效果。

likuoelie的博客 693

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

下一篇: JavaScript DOM 如何区分元素节点、属性节点和文本节点?
七点起床俱乐部
博客等级 码龄9年 9粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值