最基础的 HTML5 语义化导航

这是最简单、最基础的实现,使用了 HTML5 的 <nav> 标签来定义导航区域。

网页菜单导航代码html5
(图片来源网络,侵删)

代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">基础导航菜单</title>
    <style>
        /* 基础样式,让菜单看起来更好看 */
        body {
            font-family: Arial, sans-serif;
            margin: 0;
        }
        nav {
            background-color: #333;
            overflow: hidden; /* 清除浮动 */
        }
        nav ul {
            list-style-type: none; /* 移除列表前的点 */
            margin: 0;
            padding: 0;
        }
        nav li {
            float: left; /* 让列表项水平排列 */
        }
        nav li a {
            display: block; /* 让链接可以设置宽高和内边距 */
            color: white;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none; /* 移除下划线 */
        }
        nav li a:hover {
            background-color: #111;
        }
    </style>
</head>
<body>
    <header>
        <h1>我的网站</h1>
    </header>
    <nav>
        <ul>
            <li><a href="#home">首页</a></li>
            <li><a href="#about">关于我们</a></li>
            <li><a href="#services">服务</a></li>
            <li><a href="#portfolio">作品集</a></li>
            <li><a href="#contact">联系我们</a></li>
        </ul>
    </nav>
    <main>
        <p>这里是网站的主要内容...</p>
    </main>
</body>
</html>

代码解析

  1. <!DOCTYPE html>: 声明这是一个 HTML5 文档。
  2. <nav>: HTML5 语义化标签,专门用于定义导航链接的部分,这对屏幕阅读器等辅助技术非常重要。
  3. <ul><li>: 使用无序列表来组织菜单项,这是最符合语义化的方式。
  4. <a>: 菜单中的每个项目都是一个超链接。
  5. CSS:
    • list-style-type: none;: 移除了默认的列表项前缀(小圆点)。
    • float: left;: 这是实现水平排列的经典方法,但现代布局更推荐使用 Flexbox 或 Grid(见方案二)。
    • display: block;: 让 <a> 元素变成块级元素,可以设置宽度、高度和内外边距,让整个可点击区域变大,用户体验更好。

现代响应式导航栏(Flexbox + 汉堡菜单)

这是目前最流行、最推荐的做法,它使用 Flexbox 实现灵活的水平布局,并通过媒体查询在移动设备上显示汉堡菜单,以节省空间。

代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">响应式导航栏</title>
    <style>
        /* --- 基础样式 --- */
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            font-family: 'Helvetica Neue', Arial, sans-serif;
            line-height: 1.6;
        }
        .navbar {
            background-color: #333;
            color: #fff;
        }
        .navbar .container {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 1rem;
        }
        .navbar .logo a {
            color: #fff;
            text-decoration: none;
            font-size: 1.5rem;
            font-weight: bold;
        }
        .navbar .nav-links {
            display: flex;
            list-style: none;
        }
        .navbar .nav-links li a {
            color: #fff;
            text-decoration: none;
            padding: 0.5rem 1rem;
            transition: background-color 0.3s ease;
        }
        .navbar .nav-links li a:hover {
            background-color: #555;
        }
        /* --- 汉堡菜单按钮 (默认隐藏) --- */
        .navbar .hamburger {
            display: none;
            flex-direction: column;
            cursor: pointer;
        }
        .navbar .hamburger span {
            width: 25px;
            height: 3px;
            background-color: #fff;
            margin: 3px 0;
            transition: 0.3s;
        }
        /* --- 响应式设计 (媒体查询) --- */
        @media (max-width: 768px) {
            .navbar .nav-links {
                /* 默认隐藏菜单,准备JS切换 */
                display: none;
                position: absolute;
                top: 100%;
                left: 0;
                width: 100%;
                background-color: #333;
                flex-direction: column;
            }
            .navbar .nav-links.active {
                display: flex; /* JS切换时显示 */
            }
            .navbar .hamburger {
                display: flex; /* 在小屏幕上显示汉堡按钮 */
            }
        }
    </style>
</head>
<body>
    <nav class="navbar">
        <div class="container">
            <div class="logo">
                <a href="#">Logo</a>
            </div>
            <ul class="nav-links">
                <li><a href="#home">首页</a></li>
                <li><a href="#about">关于我们</a></li>
                <li><a href="#services">服务</a></li>
                <li><a href="#portfolio">作品集</a></li>
                <li><a href="#contact">联系我们</a></li>
            </ul>
            <div class="hamburger">
                <span></span>
                <span></span>
                <span></span>
            </div>
        </div>
    </nav>
    <main class="container">
        <p>这里是网站的主要内容,在移动设备上,导航菜单会变成一个汉堡图标。</p>
    </main>
    <script>
        // 简单的 JavaScript 来切换汉堡菜单
        document.querySelector('.hamburger').addEventListener('click', function() {
            document.querySelector('.nav-links').classList.toggle('active');
        });
    </script>
</body>
</html>

代码解析

  1. <div class="container">: 一个包裹层,用于居中内容并控制宽度。
  2. Flexbox 布局:
    • .navbar .container 设置为 display: flex,使其子元素(Logo 和 导航链接)可以灵活排列。
    • justify-content: space-between: 将 Logo 放在左边,导航链接放在右边。
    • align-items: center: 让 Logo 和链接在垂直方向上居中对齐。
  3. 汉堡菜单:
    • .hamburger: 一个 div 包含三个 span,用于显示三条横线。
    • @media (max-width: 768px): 当屏幕宽度小于 768px 时,应用此样式。
    • .nav-links: 在小屏幕上,我们将其设置为 display: none 并改为垂直排列。
    • .hamburger: 在小屏幕上设置为 display: flex,使其可见。
  4. JavaScript:
    • 为汉堡按钮添加了点击事件监听器。
    • 点击时,通过 classList.toggle('active') 来切换 .nav-linksactive 类。
    • CSS 中,.nav-links.active 会覆盖 display: none,让菜单显示出来。

带下拉菜单的导航栏

这是一个更复杂的导航,其中某些菜单项包含子菜单。

代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">带下拉菜单的导航栏</title>
    <style>
        body {
            font-family: sans-serif;
            margin: 0;
        }
        nav {
            background-color: #444;
            color: white;
        }
        nav ul {
            list-style: none;
            margin: 0;
            padding: 0;
            display: flex; /* 使用 Flexbox 水平排列 */
        }
        nav ul li {
            position: relative; /* 为下拉菜单定位提供参考 */
        }
        nav ul li a {
            display: block;
            padding: 15px 20px;
            color: white;
            text-decoration: none;
            text-align: center;
        }
        nav ul li a:hover {
            background-color: #333;
        }
        /* 下拉菜单样式 */
        .dropdown-content {
            display: none; /* 默认隐藏 */
            position: absolute; /* 绝对定位,相对于父 li */
            background-color: #f9f9f9;
            min-width: 160px;
            box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
            z-index: 1;
        }
        .dropdown-content a {
            color: #333;
            padding: 12px 16px;
            text-decoration: none;
            display: block;
            text-align: left;
        }
        .dropdown-content a:hover {
            background-color: #ddd;
        }
        /* 当鼠标悬停在父 li 上时,显示下拉菜单 */
        .dropdown:hover .dropdown-content {
            display: block;
        }
    </style>
</head>
<body>
    <nav>
        <ul>
            <li><a href="#home">首页</a></li>
            <li><a href="#about">关于我们</a></li>
            <li class="dropdown">
                <a href="#services">服务 ▼</a>
                <div class="dropdown-content">
                    <a href="#web">网站开发</a>
                    <a href="#app">App 开发</a>
                    <a href="#seo">SEO 优化</a>
                </div>
            </li>
            <li><a href="#portfolio">作品集</a></li>
            <li><a href="#contact">联系我们</a></li>
        </ul>
    </nav>
    <main style="padding: 20px;">
        <p>将鼠标悬停在“服务”菜单上,可以看到下拉子菜单。</p>
    </main>
</body>
</html>

代码解析

  1. HTML 结构:
    • 包含下拉菜单的 <li> 需要一个类名,class="dropdown"
    • 下拉菜单本身是一个新的 <div>,类名为 dropdown-content,里面包含了子菜单的 <a> 链接。
  2. CSS 关键点:
    • position: relative;: 在父 <li> 上设置,这是为了让下拉菜单(position: absolute)能够相对于这个 <li> 进行定位。
    • .dropdown-content:
      • display: none;: 默认情况下下拉菜单是隐藏的。
      • position: absolute;: 使其脱离正常的文档流,并相对于最近的 position: relative 祖先元素定位。
    • .dropdown:hover .dropdown-content: 这是实现下拉效果的核心,当鼠标悬停(hover)在拥有 dropdown 类的 <li> 上时,选择其内部的 .dropdown-content 并将其 display 设置为 block,从而显示出来。

总结与选择建议

方案 优点 缺点 适用场景
基础导航 简单、快速、兼容性好。 不够灵活,响应式实现麻烦。 非常简单的静态页面,或作为学习基础。
响应式导航 现代、灵活、用户体验好,是行业标准。 需要少量 JavaScript,CSS 稍复杂。 绝大多数现代网站,特别是 PC 和移动端都需要适配的网站。
下拉菜单 功能性强,可以组织复杂的导航层级。 在移动端体验不佳,通常需要额外的 JS 来处理。 内容分类较多、有子级分类的网站,如电商、企业官网的服务介绍等。

推荐:直接从 方案二 开始学习和使用,它结合了 HTML5 语义化、现代 CSS (Flexbox) 和响应式设计,是构建专业导航栏的最佳实践,如果需要下拉功能,可以在方案二的基础上进行扩展。

网页菜单导航代码html5
(图片来源网络,侵删)