第一步:基础结构 - HTML
无论你想要什么样式的导航,都离不开一个清晰的 HTML 结构,最常用的是无序列表 (<ul>),因为导航项之间是并列关系。

<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">产品服务</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
<nav>: HTML5 语义化标签,专门用于导航区域。<ul>: 无序列表,代表导航菜单。<li>: 列表项,代表每一个导航项。<a>: 锚点标签,用于链接到不同的页面或部分。
第二步:CSS 样式 - 从水平到垂直
我们用 CSS 来美化这个列表,让它看起来像一个导航栏。
水平导航栏 (最常见)
这是最常见的导航栏样式,链接项从左到右排列。
目标:
- 去掉列表的默认样式(小圆点和缩进)。
- 让
<li>元素水平排列。 - 让
<a>元素看起来像按钮。
CSS 代码:

/* 1. 重置和基础样式 */
nav ul {
list-style: none; /* 去掉列表项前面的小圆点 */
margin: 0; /* 去掉外边距 */
padding: 0; /* 去掉内边距 */
background-color: #333; /* 给导航栏加个背景色 */
}
/* 2. 让列表项水平排列 */
nav li {
display: inline-block; /* 关键:将块级元素转为行内块,使其水平排列 */
}
/* 3. 美化链接 */
nav a {
display: block; /* 关键:让链接充满整个 li 的区域,方便点击 */
color: white; /* 文字颜色 */
text-align: center; /* 文字居中 */
padding: 14px 20px; /* 上下 14px, 左右 20px 的内边距,形成按钮效果 */
text-decoration: none; /* 去掉下划线 */
}
/* 4. 鼠标悬停效果 */
nav a:hover {
background-color: #555; /* 鼠标放上去时改变背景色 */
}
完整代码示例 (水平导航):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">水平导航栏示例</title>
<style>
body {
font-family: Arial, sans-serif;
}
nav {
background-color: #333;
}
nav ul {
list-style: none;
margin: 0;
padding: 0;
}
nav li {
display: inline-block;
}
nav a {
display: block;
color: white;
text-align: center;
padding: 14px 20px;
text-decoration: none;
}
nav a:hover {
background-color: #555;
}
</style>
</head>
<body>
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">产品服务</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</body>
</html>
垂直导航栏 (常用于侧边栏)
垂直导航栏的列表项从上到下排列。
CSS 修改:
只需要将 display: inline-block; 改回默认的 display: block; 即可。
/* 只需要修改这一行 */
nav li {
display: block; /* 恢复为块级元素,每个 li 占据一行 */
}
/* 可以调整一下宽度,让它看起来更美观 */
nav a {
width: 200px; /* 给链接一个固定宽度 */
}
带下拉菜单的导航栏
这是更复杂一些的导航,鼠标悬停在某个菜单项上时,会展开一个子菜单。

HTML 结构:
需要在父级 <li> 内部再嵌套一个 <ul>。
<nav>
<ul>
<li><a href="#">首页</a></li>
<li>
<a href="#">产品服务</a>
<!-- 下拉菜单开始 -->
<ul class="dropdown">
<li><a href="#">网站开发</a></li>
<li><a href="#">移动应用</a></li>
<li><a href="#">UI/UX 设计</a></li>
</ul>
<!-- 下拉菜单结束 -->
</li>
<li><a href="#">关于我们</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
CSS 代码:
核心思路是:默认隐藏下拉菜单 (display: none;),当鼠标悬停在父级 <li> 上时,再显示出来 (display: block;)。
/* 基础样式同上... */
/* 下拉菜单的样式 */
.dropdown {
list-style: none;
margin: 0;
padding: 0;
position: absolute; /* 关键:脱离文档流,相对于父级定位 */
background-color: #444;
display: none; /* 默认隐藏下拉菜单 */
}
/* 当鼠标悬停在包含下拉菜单的 li 上时 */
nav li:hover .dropdown {
display: block; /* 显示下拉菜单 */
}
/* 下拉菜单中的链接样式 */
.dropdown li {
display: block; /* 垂直排列 */
}
.dropdown a {
width: 200px; /* 可以设置和父级一样的宽度 */
}
关键点:
position: absolute;:将下拉菜单<ul>从正常的文档流中脱离,这样它就不会占据空间,可以覆盖在其他内容上。nav li:hover .dropdown:这是后代选择器,只有当鼠标悬停在<nav>下的<li>元素上时,才选择这个<li>内部的.dropdown元素。
固定在顶部的导航栏
这种导航栏在用户滚动页面时始终保持在视口的顶部。
CSS 修改:
只需要给 <nav> 元素添加 position: fixed; 和 top: 0;。
nav {
position: fixed; /* 关键:固定定位 */
top: 0; /* 距离顶部 0 */
left: 0;
width: 100%; /* 宽度 100% */
z-index: 1000; /* 确保它在最上层 */
/* 其他样式... */
}
注意:
因为 position: fixed; 会脱离文档流,可能会导致页面内容被“遮挡”在导航栏下方,通常需要在 <body> 的开头添加一个空的 <div>,并给它设置一个与导航栏高度相等的 margin-top 来解决这个问题。
<body>
<div class="spacer"></div> <!-- 这个空 div 用来撑开空间 -->
<nav>
<!-- 导航内容 -->
</nav>
<!-- 页面其他内容... -->
</body>
<style>
.spacer {
height: 50px; /* 高度需要和 nav 的高度一致 */
}
</style>
总结与进阶
| 类型 | 关键 CSS 技术 | 适用场景 |
|---|---|---|
| 水平导航 | list-style: none; display: inline-block; display: block; (给 a 标签) |
网站主导航 |
| 垂直导航 | display: block; (给 li 标签) |
侧边栏、子导航 |
| 下拉菜单 | position: absolute; display: none; / display: block; (配合 hover) |
复杂的多级导航 |
| 固定导航 | position: fixed; top: 0; width: 100%; |
长页面、需要随时访问的导航 |
进阶技巧:
- Flexbox 布局: 对于现代导航栏,使用 Flexbox 会更灵活、更强大。
nav ul { display: flex; /* 一行搞定水平排列 */ justify-content: center; /* 居中对齐 */ } - Grid 布局: 也可以使用 CSS Grid 来创建复杂的导航布局。
- 响应式设计: 使用媒体查询 (
@media),让导航栏在小屏幕设备上(如手机)自动变成“汉堡包”图标,点击后展开,这是现代网站的必备功能。
希望这个详细的指南能帮助你掌握用 CSS 制作导航栏的技巧!从简单的水平导航开始,逐步尝试下拉菜单和固定定位,你很快就能熟练运用了。
