最简单的纯CSS下拉菜单

这个例子非常基础,不依赖JavaScript,仅用CSS实现,优点是代码少,缺点是交互体验可能不是最完美的(在手机上点击菜单项后,下拉列表可能不会自动收起)。

简单手机网页下拉菜单导航html
(图片来源网络,侵删)

特点:

  • 纯CSS实现。
  • 结构清晰。
  • 适合快速实现。

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">简单CSS下拉菜单</title>
    <style>
        /* 重置和基础样式 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
            background-color: #f4f4f4;
        }
        .container {
            max-width: 480px; /* 模拟手机屏幕宽度 */
            margin: 0 auto;
            background-color: #fff;
            min-height: 100vh;
        }
        /* 导航栏样式 */
        .navbar {
            background-color: #333;
            padding: 0;
        }
        .navbar ul {
            list-style: none;
            display: flex;
        }
        .navbar li {
            position: relative; /* 为下拉菜单定位 */
        }
        .navbar a {
            display: block;
            color: white;
            text-decoration: none;
            padding: 15px 20px;
        }
        /* 下拉菜单内容 - 默认隐藏 */
        .navbar ul ul {
            position: absolute;
            left: 0;
            background-color: #444;
            min-width: 200px; /* 下拉菜单宽度 */
            display: none; /* 关键:默认隐藏 */
            z-index: 1000;
        }
        /* 鼠标悬停或点击时显示下拉菜单 */
        /* 在手机上,我们用 :focus-within 来模拟点击后的效果 */
        .navbar li:hover > ul,
        .navbar li:focus-within > ul {
            display: block; /* 关键:显示下拉菜单 */
        }
        /* 下拉菜单里的链接样式 */
        .navbar ul ul li {
            width: 100%;
        }
        .navbar ul ul a {
            padding: 10px 20px;
        }
        /* 页面内容 */
        .content {
            padding: 20px;
        }
        h1 {
            color: #333;
        }
        p {
            line-height: 1.6;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="container">
        <nav class="navbar">
            <ul>
                <li><a href="#">首页</a></li>
                <li>
                    <!-- 父级菜单,点击这里会触发下拉 -->
                    <a href="#" tabindex="0">产品分类 <span>▼</span></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><a href="#">关于我们</a></li>
                <li><a href="#">联系方式</a></li>
            </ul>
        </nav>
        <div class="content">
            <h1>欢迎访问</h1>
            <p>这是一个使用纯CSS实现的手机端下拉菜单导航示例,点击“产品分类”可以查看下拉选项。</p>
            <p>注意:在手机上,你需要点击“产品分类”来触发下拉,但点击子菜单项后,下拉列表可能不会自动关闭。</p>
        </div>
    </div>
</body>
</html>

更实用的JavaScript下拉菜单(推荐)

这个例子结合了HTML、CSS和JavaScript,提供了更好的用户体验,点击菜单标题时,下拉菜单会展开;再次点击或点击页面其他地方时,菜单会收起。

特点:

简单手机网页下拉菜单导航html
(图片来源网络,侵删)
  • 交互体验好(点击展开/收起)。
  • 使用JavaScript控制,逻辑更灵活。
  • 点击子菜单项后,下拉列表会自动关闭。

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">实用JS下拉菜单</title>
    <style>
        /* 重置和基础样式 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
            background-color: #f4f4f4;
        }
        .container {
            max-width: 480px;
            margin: 0 auto;
            background-color: #fff;
            min-height: 100vh;
        }
        /* 导航栏样式 */
        .navbar {
            background-color: #2c3e50; /* 深色背景 */
        }
        .navbar ul {
            list-style: none;
            display: flex;
            flex-wrap: wrap; /* 允许在小屏幕上换行 */
        }
        .navbar li {
            position: relative;
            flex: 1; /* 让菜单项平均分配宽度 */
        }
        .navbar a {
            display: block;
            color: white;
            text-decoration: none;
            padding: 15px;
            text-align: center;
        }
        .navbar a.toggle::after {
            content: '▼'; /* 箭头图标 */
            font-size: 0.7em;
            margin-left: 5px;
        }
        .navbar a.active.toggle::after {
            content: '▲'; /* 展开时的箭头 */
        }
        /* 下拉菜单内容 - 默认隐藏 */
        .navbar ul ul {
            position: absolute;
            top: 100%; /* 定位在父级菜单下方 */
            left: 0;
            background-color: #34495e; /* 比父级稍亮的背景 */
            width: 100%; /* 宽度和父级一样 */
            display: none; /* 关键:默认隐藏 */
            box-shadow: 0 8px 16px rgba(0,0,0,0.1);
            z-index: 1000;
        }
        /* 当添加 .show 类时,显示下拉菜单 */
        .navbar ul ul.show {
            display: block;
        }
        /* 下拉菜单里的链接样式 */
        .navbar ul ul li {
            width: 100%;
        }
        .navbar ul ul a {
            text-align: left; /* 左对齐 */
            padding: 12px 15px;
        }
        /* 页面内容 */
        .content {
            padding: 20px;
        }
        h1 {
            color: #333;
            margin-bottom: 15px;
        }
        p {
            line-height: 1.6;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="container">
        <nav class="navbar">
            <ul>
                <li><a href="#">首页</a></li>
                <li>
                    <!-- 父级菜单,添加 .toggle 类用于JavaScript识别 -->
                    <a href="#" class="toggle">产品分类</a>
                    <ul>
                        <li><a href="#">智能手机</a></li>
                        <li><a href="#">笔记本电脑</a></li>
                        <li><a href="#">平板电脑</a></li>
                        <li><a href="#">智能手表</a></li>
                        <li><a href="#">耳机音响</a></li>
                    </ul>
                </li>
                <li><a href="#">关于我们</a></li>
                <li><a href="#">联系方式</a></li>
            </ul>
        </nav>
        <div class="content">
            <h1>欢迎访问</h1>
            <p>这是一个结合了JavaScript的手机端下拉菜单示例,点击“产品分类”可以展开或收起下拉菜单。</p>
            <p>这种交互方式在手机上非常常见和实用。</p>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // 获取所有带有 .toggle 类的链接
            const toggleLinks = document.querySelectorAll('.navbar a.toggle');
            toggleLinks.forEach(link => {
                link.addEventListener('click', function(e) {
                    e.preventDefault(); // 阻止链接的默认跳转行为
                    // 获取当前链接的父级元素 <li>
                    const parentLi = this.parentElement;
                    // 获取当前链接的下一个兄弟元素 <ul> (即下拉菜单)
                    const dropdown = parentLi.querySelector('ul');
                    // 切换下拉菜单的显示状态
                    dropdown.classList.toggle('show');
                    // 切换当前链接的 active 类,以改变箭头样式
                    this.classList.toggle('active');
                });
            });
            // 可选:点击页面其他地方关闭下拉菜单
            document.addEventListener('click', function(e) {
                // 如果点击的不是导航栏内的元素
                if (!e.target.closest('.navbar')) {
                    // 关闭所有下拉菜单
                    const allDropdowns = document.querySelectorAll('.navbar ul ul');
                    allDropdowns.forEach(dropdown => {
                        dropdown.classList.remove('show');
                    });
                    // 移除所有 active 类
                    const allActiveLinks = document.querySelectorAll('.navbar a.toggle.active');
                    allActiveLinks.forEach(link => {
                        link.classList.remove('active');
                    });
                }
            });
        });
    </script>
</body>
</html>

如何使用这些代码

  1. 复制代码:将您选择的示例代码(HTML、CSS、JS)全部复制下来。
  2. 创建文件:创建一个名为 index.html 的文件。
  3. 粘贴保存:将复制的代码粘贴到 index.html 文件中,然后保存该文件。
  4. 在手机上查看
    • index.html 文件传输到您的手机上。
    • 使用手机浏览器(如 Chrome、Safari、Firefox)打开这个文件。
    • 您也可以将代码上传到任何网络服务器,然后用手机访问对应的网址。

总结与选择建议

  • 示例一 (纯CSS):适合对交互要求不高,希望代码极致简单的场景,它的核心是 hoverfocus-within 伪类。
  • 示例二 (JavaScript)强烈推荐,它提供了现代移动应用常见的点击展开/收起交互,用户体验更好,代码结构也更清晰,易于扩展和维护。

对于绝大多数手机网页项目,示例二是更好的起点。

简单手机网页下拉菜单导航html
(图片来源网络,侵删)