book/layout.tsx - 书籍布局

book/layout.tsx - 书籍布局

基本信息

属性
路径src/app/book/layout.tsx
类型Next.js 布局组件
功能书籍页面的共享布局(侧边栏 + 内容区)

功能描述

为书籍相关页面提供两栏布局:左侧固定宽度的章节导航侧边栏,右侧可滚动的内容区域。

代码实现

import { BookSidebar } from "@/components/book/sidebar";

export default function BookLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <div className="container py-6 lg:py-8">
      <div className="flex flex-col lg:flex-row gap-8">
        <BookSidebar />
        <div className="flex-1 min-w-0 lg:mr-64">
          <div className="max-w-3xl mx-auto">
            {children}
          </div>
        </div>
      </div>
    </div>
  );
}

布局结构

Container
└── Flex Container (responsive)
    ├── BookSidebar (sticky on desktop)
    └── Content Area
        └── max-w-3xl centered content

响应式行为

断点布局
Mobile (< lg)单列,侧边栏隐藏或折叠
Desktop (lg:)双列,侧边栏固定左侧

桌面布局

┌──────────────────────────────────────────────────┐
│  ┌────────────┐  ┌────────────────────────────┐  │
│  │            │  │                            │  │
│  │  Sidebar   │  │      Content (max-w-3xl)   │  │
│  │  (sticky)  │  │                            │  │
│  │            │  │                            │  │
│  └────────────┘  │                            │  │
│                  └────────────────────────────┘  │
└──────────────────────────────────────────────────┘
         ↑gap-8↑

移动端布局

┌──────────────────────┐
│      Sidebar         │  ← 可能折叠为按钮
├──────────────────────┤
│                      │
│      Content         │
│                      │
└──────────────────────┘

CSS 类说明

类名作用
container限制最大宽度并居中
py-6 lg:py-8垂直内边距(响应式)
flex flex-col lg:flex-row移动端垂直,桌面端水平
gap-8子元素间距
flex-1内容区占据剩余空间
min-w-0允许内容区收缩
lg:mr-64桌面端右边距(为固定侧边栏预留)
max-w-3xl mx-auto内容最大宽度并居中

组件引用

组件来源用途
BookSidebar@/components/book/sidebar章节导航侧边栏

应用范围

此布局应用于 /book 路由下的所有页面:

路由页面
/book书籍首页
/book/[slug]章节页面

技术说明

  • 使用 min-w-0 防止 flex 子元素溢出
  • lg:mr-64 为固定定位的侧边栏预留空间
  • 内容区域使用 max-w-3xl 保证阅读体验
  • 响应式内边距 py-6lg:py-8

相关文件

  • src/components/book/sidebar.tsx - 侧边栏组件
  • src/app/book/page.tsx - 书籍首页
  • src/app/book/[slug]/page.tsx - 章节页面
← 返回目录