基于HTML、CSS与JavaScript的下拉菜单实现方案

作者:像素猫

时间:2026-10-25

浏览:218

本文详解如何利用HTML构建导航结构,结合CSS定位与JavaScript事件监听实现鼠标悬停下拉菜单效果。通过设置相对定位与绝对定位控制层级,利用display属性切换显示状态,提供完整源码供参考学习。

文章目录

下拉菜单实现概述

本文提供了使用HTML、CSS和JavaScript技术栈实现下拉菜单功能的完整代码示例,旨在为开发者提供可直接参考的实现方案。

实现思路与逻辑

核心实现逻辑如下:

在HTML结构层面,导航栏的每个列表项(<li>)内部需包含链接元素(<a>)及子菜单列表(<ul>)。布局上,将父级<li>设置为相对定位,子级<ul>设置为绝对定位,并初始隐藏(display: none)。交互逻辑由JavaScript驱动:为每个导航项绑定事件监听器,当鼠标移入<li>时,将子菜单的display属性修改为block以显示菜单;当鼠标移出时,将其重置为none以隐藏菜单。

效果演示

具体运行效果如下图所示:

下拉菜单实现概述

源代码示例

完整源代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>下拉菜单</title>
    <style>   
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            background-color: #ffb900;
        }
        a {
            cursor: default;
            text-decoration: none;
            font-size: 20px;
            font-weight: 700;
            color: #fff;
            letter-spacing: 3px;
        }
        li {
            list-style: none;
            cursor: default;
        }
        .container {
            position: absolute;
            top: 30%;
            left:50%;
            transform: translate(-50%, -50%);
            box-shadow: 0 10px 10px rgba(10, 20, 20, .20), 0 0 10px rgba(10, 20, 20, .20);
            font-size: 0;
        }
        .container .nav {
            display: inline-block;
            position: relative;
            width: 150px;
            height: 50px;
            background-color: #505050;
            text-align: center;
            line-height: 50px;
        }
        .container .nav:hover {
            background-color: #3e3e3e;
        }
        .container .nav ul {
            display: none;
            position: absolute;
            top: 50px;
            width: 100%;
            box-shadow: 0 10px 10px rgba(10, 20, 20, .20), 0 0 10px rgba(10, 20, 20, .20);
            background-color: #fff;
            text-align: center;
        }
        .container .nav ul li a {
            display: block;
            color: #505050;
        }
        .container .nav ul li a:hover {
            background-color: #e1e1e1;
        }
    </style>
</head>
<body>
    <ul class="container">
        <li class="nav">
            <a href="#">水果</a>
            <ul>
                <li><a href="#">西瓜</a></li>
                <li><a href="#">香蕉</a></li>
                <li><a href="#">哈密瓜</a></li>
                <li><a href="#">橙子</a></li>
            </ul>
        </li>
        <li class="nav">
            <a href="#">蔬菜</a>
            <ul>
                <li><a href="#">西红柿</a></li>
                <li><a href="#">土豆</a></li>
                <li><a href="#">小白菜</a></li>
                <li><a href="#">黄花菜</a></li>
            </ul>
        </li>
        <li class="nav">
            <a href="#">酒水</a>
            <ul>
                <li><a href="#">啤酒</a></li>
                <li><a href="#">橙汁</a></li>
                <li><a href="#">可乐</a></li>
                <li><a href="#">雪碧</a></li>
            </ul>
        </li>
        <li class="nav">
            <a href="#">零食</a>
            <ul>
                <li><a href="#">饼干</a></li>
                <li><a href="#">面包</a></li>
                <li><a href="#">辣条</a></li>
                <li><a href="#">沙琪玛</a></li>
            </ul>
        </li>
    </ul>
    <script>
        let nav = document.querySelectorAll('.nav');
        for(let i=0; i<nav.length; i++) {
            nav[i].addEventListener('mouseover', function() {
                this.children[1].style.display = "block";
            });
            nav[i].addEventListener('mouseout', function() {
                this.children[1].style.display = "none";
            });
        }
    </script>
</body>
</html>

以上即为该下拉菜单功能的完整实现内容,希望能为读者的技术学习提供有益帮助,欢迎持续关注本站获取更多资源。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章