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

(图片来源网络,侵删)
代码
<!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>
代码解析
<!DOCTYPE html>: 声明这是一个 HTML5 文档。<nav>: HTML5 语义化标签,专门用于定义导航链接的部分,这对屏幕阅读器等辅助技术非常重要。<ul>和<li>: 使用无序列表来组织菜单项,这是最符合语义化的方式。<a>: 菜单中的每个项目都是一个超链接。- 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>
代码解析
<div class="container">: 一个包裹层,用于居中内容并控制宽度。- Flexbox 布局:
.navbar .container设置为display: flex,使其子元素(Logo 和 导航链接)可以灵活排列。justify-content: space-between: 将 Logo 放在左边,导航链接放在右边。align-items: center: 让 Logo 和链接在垂直方向上居中对齐。
- 汉堡菜单:
.hamburger: 一个div包含三个span,用于显示三条横线。@media (max-width: 768px): 当屏幕宽度小于 768px 时,应用此样式。.nav-links: 在小屏幕上,我们将其设置为display: none并改为垂直排列。.hamburger: 在小屏幕上设置为display: flex,使其可见。
- JavaScript:
- 为汉堡按钮添加了点击事件监听器。
- 点击时,通过
classList.toggle('active')来切换.nav-links的active类。 - 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>
代码解析
- HTML 结构:
- 包含下拉菜单的
<li>需要一个类名,class="dropdown"。 - 下拉菜单本身是一个新的
<div>,类名为dropdown-content,里面包含了子菜单的<a>链接。
- 包含下拉菜单的
- 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) 和响应式设计,是构建专业导航栏的最佳实践,如果需要下拉功能,可以在方案二的基础上进行扩展。

(图片来源网络,侵删)
