You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建固定且可切换内容的菜单栏?是否需重复编写代码?

实现固定菜单栏(无需重复编写代码)的几种方案

嗨,我懂你想要的那种效果——就像Facebook那样,切换不同页面时,个人主页、首页、消息这些菜单栏选项始终固定显示,只有页面内容更新,而且完全不想在每个页面里重复写菜单代码对吧?当然不用重复写啦,下面给你几种适配不同开发场景的实用方案:

1. 前端路由 + 单页应用(SPA)模式

这是目前实现这类效果最流畅的方案,主流前端框架(React、Vue、Angular)都原生支持。核心思路是:整个应用只加载一个主HTML页面,菜单栏作为独立的固定组件挂载在页面根节点,内容区域则根据路由变化动态渲染对应的页面组件,全程无需刷新浏览器。

举个Vue的简单示例:

<!-- 根组件 App.vue -->
<template>
  <div class="app-container">
    <!-- 固定菜单栏组件,只会渲染一次 -->
    <Navbar />
    <!-- 路由内容出口,切换路由时这里自动替换为对应页面组件 -->
    <router-view />
  </div>
</template>

<script>
import Navbar from './components/Navbar.vue'

export default {
  components: {
    Navbar
  }
}
</script>

如果是原生JavaScript开发,也可以通过history.pushState监听路由变化,手动替换内容区域的HTML,菜单栏始终保持不动。

2. 服务器端模板复用(多页应用场景)

如果你的项目是传统后端渲染的多页应用,那可以利用后端模板引擎的模板继承/片段引入功能,把菜单栏抽成公共模板片段,所有页面都复用这个片段即可。

比如用Node.js的EJS模板引擎:
首先创建一个包含菜单栏的基础布局模板layout.ejs:

<!-- layout.ejs -->
<!DOCTYPE html>
<html>
<head>
  <title><%= pageTitle %></title>
</head>
<body>
  <!-- 公共菜单栏 -->
  <nav class="navbar">
    <a href="/home">首页</a>
    <a href="/profile">个人主页</a>
    <a href="/messages">消息</a>
  </nav>
  <!-- 页面内容占位符 -->
  <main class="content"><%- pageContent %></main>
</body>
</html>

然后其他页面模板继承这个布局,只需要填充自己的内容:

<!-- home.ejs -->
<%- include('layout.ejs', { 
  pageTitle: '首页',
  pageContent: '<h1>欢迎来到首页</h1>' 
}) %>

类似的,PHP Laravel的Blade模板、Java Thymeleaf都有类似的模板复用功能,只需要按照对应框架的语法实现即可,完全不用在每个页面重复写菜单代码。

3. 纯静态页面的复用方案

如果是纯静态HTML项目,没有后端也不想用前端框架,那可以把菜单栏封装成JavaScript模块,在每个页面引入这个模块来动态生成菜单。

比如创建一个navbar.js文件:

// navbar.js
function renderNavbar() {
  const navbar = document.createElement('nav');
  navbar.className = 'navbar';
  navbar.innerHTML = `
    <a href="home.html">首页</a>
    <a href="profile.html">个人主页</a>
    <a href="messages.html">消息</a>
  `;
  // 将菜单插入页面顶部
  document.body.insertBefore(navbar, document.body.firstChild);
}

// 页面加载完成后渲染菜单
window.addEventListener('load', renderNavbar);

然后在每个静态页面的底部引入这个脚本:

<script src="./navbar.js"></script>

这样所有页面都会自动生成相同的菜单栏,后续修改菜单只需要更新navbar.js这一个文件就行。不过这种方式切换页面时浏览器会刷新,如果想要无刷新切换内容,还是得结合前端路由的思路来实现。


内容的提问来源于stack exchange,提问作者pjconcepcion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:41:18