这是最经典、最常用的布局,侧边栏固定不动,主内容区可以独立滚动。

bootstrap 左右布局模板
(图片来源网络,侵删)

特点:

  • 侧边栏固定宽度,始终可见,区宽度自适应,内容过长时可滚动。
  • 响应式:在小屏幕上,侧边栏会隐藏,通过汉堡菜单触发。

代码实现:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">Bootstrap 左右布局模板</title>
    <!-- 1. 引入 Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        /* 自定义样式,使侧边栏和主内容区高度一致 */
        html, body {
            height: 100%;
        }
        .wrapper {
            display: flex;
            height: 100%;
        }
        .sidebar {
            width: 250px; /* 侧边栏宽度 */
            background-color: #f8f9fa; /* 背景色 */
            border-right: 1px solid #dee2e6;
            height: 100%;
            position: fixed; /* 固定定位 */
            top: 0;
            left: 0;
            overflow-y: auto; /* 内容过长时滚动 */
        }
        .main-content {
            flex-grow: 1; /* 主内容区占据剩余空间 */
            margin-left: 250px; /* 左边距等于侧边栏宽度 */
            padding: 20px;
            height: 100%;
            overflow-y: auto; /* 主内容区滚动 */
        }
        /* 响应式调整:当屏幕小于 768px 时 */
        @media (max-width: 768px) {
            .sidebar {
                width: 100%;
                margin-left: -100%; /* 默认隐藏 */
                transition: margin-left 0.3s ease-in-out;
            }
            .sidebar.show {
                margin-left: 0; /* 点击菜单后显示 */
            }
            .main-content {
                margin-left: 0; /* 移动端左边距归零 */
            }
        }
    </style>
</head>
<body>
<div class="wrapper">
    <!-- 侧边栏 -->
    <nav id="sidebar" class="sidebar">
        <div class="position-sticky pt-3">
            <ul class="nav flex-column">
                <li class="nav-item">
                    <a class="nav-link active" href="#">
                        <span data-feather="home"></span>
                        首页
                    </a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">
                        <span data-feather="file"></span>
                        文档
                    </a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">
                        <span data-feather="shopping-cart"></span>
                        商店
                    </a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">
                        <span data-feather="users"></span>
                        用户
                    </a>
                </li>
            </ul>
        </div>
    </nav>
    <!-- 主内容区 -->
    <main class="main-content">
        <!-- 顶部导航栏 (移动端显示) -->
        <nav class="navbar navbar-expand-lg navbar-light bg-light d-md-none">
            <div class="container-fluid">
                <a class="navbar-brand" href="#">Logo</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarToggle">
                    <span class="navbar-toggler-icon"></span>
                </button>
            </div>
        </nav>
        <div class="container-fluid">
            <h1>主内容区</h1>
            <p>这里是主要内容,可以滚动。</p>
            <!-- 添加一些占位内容,以便演示滚动效果 -->
            <div style="height: 1500px; background-color: #e9ecef; text-align: center; padding-top: 700px;">
                滚动我试试...
            </div>
        </div>
    </main>
</div>
<!-- 2. 引入 Bootstrap JS 和 Popper.js (必需) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<!-- 3. 引入 Feather Icons (如果使用了图标) -->
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script>
    // 初始化 Feather 图标
    feather.replace();
    // 侧边栏切换逻辑 (纯JS实现,与Bootstrap的Collapse组件无关)
    document.addEventListener('DOMContentLoaded', function () {
        const sidebar = document.getElementById('sidebar');
        const toggleBtn = document.querySelector('.navbar-toggler');
        if (toggleBtn) {
            toggleBtn.addEventListener('click', function () {
                sidebar.classList.toggle('show');
            });
        }
    });
</script>
</body>
</html>

顶部导航栏 + 底部固定侧边栏

这种布局适合主内容区非常短,或者侧边栏信息需要一直展示在页面底部的情况。

特点:

bootstrap 左右布局模板
(图片来源网络,侵删)
  • 顶部导航栏固定。
  • 侧边栏固定在底部,区在中间。

代码实现:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">Bootstrap 顶部+底部布局</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
        body {
            display: flex;
            flex-direction: column;
        }
        .main-content {
            flex-grow: 1; /* 主内容区占据所有可用空间 */
            padding: 20px;
            background-color: #f5f5f5;
        }
        .bottom-sidebar {
            height: 200px; /* 底部侧边栏高度 */
            background-color: #343a40;
            color: white;
            padding: 20px;
        }
        /* 响应式:在小屏幕上,底部侧边栏可能变为顶部 */
        @media (max-width: 768px) {
            body {
                flex-direction: column;
            }
            .bottom-sidebar {
                height: auto;
                order: -1; /* 移动端时将其放在最上面 */
            }
        }
    </style>
</head>
<body>
    <!-- 顶部导航栏 -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container-fluid">
            <a class="navbar-brand" href="#">顶部导航</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav">
                    <li class="nav-item">
                        <a class="nav-link active" href="#">首页</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#">链接</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <!-- 主内容区 -->
    <main class="main-content">
        <div class="container">
            <h1>主内容区</h1>
            <p>这个区域会自动拉伸以填充可用空间。</p>
        </div>
    </main>
    <!-- 底部侧边栏 -->
    <aside class="bottom-sidebar">
        <h5>底部信息栏</h5>
        <p>这里是一些固定显示在底部的内容。</p>
    </aside>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

使用 Flexbox 的现代布局

这是更现代、更灵活的布局方式,主要依赖 CSS Flexbox 而不是固定定位,它对响应式设计非常友好。

特点:

  • 使用 Flexbox 实现三栏布局。
  • 侧边栏和主内容区可以同时滚动。
  • 代码更简洁,易于调整。

代码实现:

bootstrap 左右布局模板
(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">Bootstrap Flexbox 布局</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        /* 移除 body 的默认边距,设置高度为 100% */
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
        /* 使用 Flexbox 布局 */
        .flex-container {
            display: flex;
            height: 100vh; /* 视口高度 */
        }
        /* 左侧边栏 */
        .flex-sidebar-left {
            width: 250px;
            background-color: #e9ecef;
            padding: 20px;
            flex-shrink: 0; /* 防止侧边栏被压缩 */
        }
        /* 右侧边栏 */
        .flex-sidebar-right {
            width: 200px;
            background-color: #f8f9fa;
            padding: 20px;
            flex-shrink: 0; /* 防止侧边栏被压缩 */
        }
        /* 主内容区 */
        .flex-main {
            flex-grow: 1; /* 占据所有剩余空间 */
            padding: 20px;
            background-color: #ffffff;
            overflow-y: auto; /* 内容过长时滚动 */
        }
        /* 响应式:在小屏幕上,侧边栏变为顶部导航 */
        @media (max-width: 768px) {
            .flex-container {
                flex-direction: column; /* 改为垂直排列 */
            }
            .flex-sidebar-left, .flex-sidebar-right {
                width: 100%; /* 宽度占满 */
                height: auto; /* 高度自适应 */
                order: 2; /* 调整顺序,主内容区在中间 */
            }
            .flex-main {
                order: 1; /* 主内容区在最上面 */
            }
        }
    </style>
</head>
<body>
<div class="flex-container">
    <!-- 左侧边栏 -->
    <aside class="flex-sidebar-left">
        <h5>左侧边栏</h5>
        <p>一些导航链接或信息。</p>
    </aside>
    <!-- 主内容区 -->
    <main class="flex-main">
        <h1>主内容区</h1>
        <p>这里是页面的主要内容,宽度自适应。</p>
        <!-- 占位内容 -->
        <div style="height: 800px; background-color: #f0f0f0; text-align: center; padding-top: 400px;">
            滚动主内容区...
        </div>
    </main>
    <!-- 右侧边栏 -->
    <aside class="flex-sidebar-right">
        <h5>右侧边栏</h5>
        <p>一些辅助信息或广告。</p>
    </aside>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

总结与选择建议

模板 布局方式 适用场景 优点 缺点
模板一 固定定位 仪表盘、后台管理系统 经典、侧边栏始终可见,用户导航方便 需要处理滚动条和 z-index
模板二 Flexbox (列) 简单页面、信息展示 结构简单,适合少量内容 区高度可能受限
模板三 Flexbox (行) 现代网站、需要多栏布局 极其灵活,响应式处理简单,代码优雅 需要理解 Flexbox 概念

如何选择?

  • 如果你正在构建一个后台管理系统模板一是最佳选择。
  • 如果你的页面结构很简单,只需要一个固定的顶部和底部模板二足够了。
  • 如果你想要一个现代化、灵活且易于维护的布局,并且可能需要复杂的响应式行为,模板三是首选。

希望这些模板能帮助你快速开始项目!