创建一个响应式导航栏(完整代码在后面)
响应式导航栏效果图:
目录
步骤
在 Web 开发中,导航栏是网站中非常重要的组成部分。一个简洁、美观、响应式的导航栏可以提升用户体验。今天,我们将一起学习如何使用 HTML、CSS 和 JavaScript(不使用任何框架)来构建一个响应式的导航栏,实现移动端的菜单折叠和展开功能。
一、新建一个 HTML 项目
首先,创建一个新的 HTML 文件,命名为 index.html
。你可以使用任何代码编辑器,如 VSCode、Sublime Text 或 Notepad++。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>响应式导航栏示例</title>
</head>
<body>
</body>
</html>
二、创建基本结构
在 <body>
标签中,添加导航栏的基本结构,包括 Logo、导航菜单和移动端的菜单按钮。
<body>
<header>
<nav class="navbar">
<div class="logo">My Website</div>
<ul class="nav-links">
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">服务</a></li>
<li><a href="#">联系</a></li>
</ul>
<div class="menu-icon" id="menu-icon">
<span></span>
<span></span>
<span></span>
</div>
</nav>
</header>
</body>
.logo
:网站的 Logo 或名称。.nav-links
:导航链接列表。.menu-icon
:移动端的菜单按钮(汉堡菜单)。
三、使用 CSS 美化页面
在 <head>
标签中,添加 <style>
标签,编写导航栏的样式。
<head>
<meta charset="UTF-8">
<title>响应式导航栏示例</title>
<style>
/* 重置样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 导航栏样式 */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #34495e;
padding: 10px 20px;
color: #ecf0f1;
}
.logo {
font-size: 24px;
font-weight: bold;
}
.nav-links {
list-style: none;
display: flex;
}
.nav-links li {
margin-left: 20px;
}
.nav-links a {
text-decoration: none;
color: #ecf0f1;
font-size: 18px;
}
.nav-links a:hover {
color: #bdc3c7;
}
/* 移动端菜单按钮 */
.menu-icon {
display: none;
flex-direction: column;
cursor: pointer;
}
.menu-icon span {
width: 25px;
height: 3px;
background-color: #ecf0f1;
margin: 4px;
transition: 0.3s;
}
/* 响应式设计 */
@media screen and (max-width: 768px) {
.nav-links {
position: fixed;
right: -100%;
top: 60px;
flex-direction: column;
background-color: #34495e;
width: 200px;
height: calc(100% - 60px);
transition: 0.3s;
}
.nav-links li {
margin: 20px 0;
text-align: center;
}
.menu-icon {
display: flex;
}
}
/* 菜单展开时的样式 */
.nav-active {
right: 0;
}
</style>
</head>
- 使用
@media
查询,实现响应式布局。 - 在屏幕宽度小于 768px 时,导航菜单变为侧边栏,菜单按钮显示。
四、添加交互功能
为了实现点击菜单按钮时导航菜单的展开和收起,我们需要添加 JavaScript 代码。
在 <body>
底部,添加 <script>
标签,编写交互逻辑。
<body>
<!-- 上面的代码 -->
<!-- ... -->
<!-- JavaScript 部分 -->
<script>
const menuIcon = document.getElementById('menu-icon');
const navLinks = document.querySelector('.nav-links');
menuIcon.addEventListener('click', () => {
navLinks.classList.toggle('nav-active');
// 菜单动画
menuIcon.classList.toggle('toggle');
});
</script>
</body>
同时,为了实现菜单按钮的动画效果,更新 CSS 样式:
/* 菜单按钮动画 */
.menu-icon.toggle span:nth-child(1) {
transform: rotate(-45deg) translate(-5px, 6px);
}
.menu-icon.toggle span:nth-child(2) {
opacity: 0;
}
.menu-icon.toggle span:nth-child(3) {
transform: rotate(45deg) translate(-5px, -6px);
}
完整代码
将以上部分组合在一起,得到完整的代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>响应式导航栏示例</title>
<style>
/* 重置样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 导航栏样式 */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #34495e;
padding: 10px 20px;
color: #ecf0f1;
}
.logo {
font-size: 24px;
font-weight: bold;
}
.nav-links {
list-style: none;
display: flex;
}
.nav-links li {
margin-left: 20px;
}
.nav-links a {
text-decoration: none;
color: #ecf0f1;
font-size: 18px;
}
.nav-links a:hover {
color: #bdc3c7;
}
/* 移动端菜单按钮 */
.menu-icon {
display: none;
flex-direction: column;
cursor: pointer;
}
.menu-icon span {
width: 25px;
height: 3px;
background-color: #ecf0f1;
margin: 4px;
transition: 0.3s;
}
/* 响应式设计 */
@media screen and (max-width: 768px) {
.nav-links {
position: fixed;
right: -100%;
top: 60px;
flex-direction: column;
background-color: #34495e;
width: 200px;
height: calc(100% - 60px);
transition: 0.3s;
}
.nav-links li {
margin: 20px 0;
text-align: center;
}
.menu-icon {
display: flex;
}
}
/* 菜单展开时的样式 */
.nav-active {
right: 0;
}
/* 菜单按钮动画 */
.menu-icon.toggle span:nth-child(1) {
transform: rotate(-45deg) translate(-5px, 6px);
}
.menu-icon.toggle span:nth-child(2) {
opacity: 0;
}
.menu-icon.toggle span:nth-child(3) {
transform: rotate(45deg) translate(-5px, -6px);
}
</style>
</head>
<body>
<header>
<nav class="navbar">
<div class="logo">My Website</div>
<ul class="nav-links">
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">服务</a></li>
<li><a href="#">联系</a></li>
</ul>
<div class="menu-icon" id="menu-icon">
<span></span>
<span></span>
<span></span>
</div>
</nav>
</header>
<!-- JavaScript 部分 -->
<script>
const menuIcon = document.getElementById('menu-icon');
const navLinks = document.querySelector('.nav-links');
menuIcon.addEventListener('click', () => {
navLinks.classList.toggle('nav-active');
// 菜单动画
menuIcon.classList.toggle('toggle');
});
</script>
</body>
</html>
结语
通过本篇教程,我们学习了如何使用 HTML、CSS 和 JavaScript 构建一个响应式的导航栏。这个导航栏在桌面端展示为水平菜单,在移动端则变为侧边栏菜单,并且包含了菜单按钮的动画效果。希望通过本次实践,大家对前端开发有了更深入的了解。
提示:在实际项目中,您可以根据需要,调整导航栏的样式,添加更多的菜单项,或者集成到您的网站中。
版权声明:本文为原创文章,转载请注明出处。