iFluxArt

博客文档导航友链
© 2025 iFluxArt 保留所有权利
文档导航
暂无文档数据
  1. 文档
  2. /组件架构
  3. /布局组件

布局组件

发布于 2025年8月29日
|
全文共计 1420 字
|
预计阅读 6 分钟

布局组件

布局组件负责控制页面的整体结构和布局,提供一致的页面框架和导航体验。

主要布局组件

1. RootLayout (根布局)

整个应用的根布局,包含全局状态和主题管理。

基本结构

// src/app/layout.tsx
import { ClerkProvider } from '@clerk/nextjs';
import { ThemeProvider } from '@/components/theme/theme-provider';

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <ClerkProvider>
      <html lang="zh-CN" suppressHydrationWarning>
        <body>
          <ThemeProvider attribute="class" defaultTheme="system" enableSystem>
            <div className="flex min-h-screen flex-col">
              <MainNavbar />
              <main className="flex-auto">{children}</main>
              <Footer />
            </div>
          </ThemeProvider>
        </body>
      </html>
    </ClerkProvider>
  );
}

功能特性

  • 认证集成: 通过ClerkProvider提供全局认证上下文
  • 主题支持: 使用ThemeProvider管理明暗主题切换
  • 响应式结构: 采用Flexbox布局确保内容区域自适应
  • 全局状态: 提供全局状态管理和样式重置

2. MainNavbar (主导航栏)

页面顶部的主导航栏,包含网站Logo、导航链接和用户认证按钮。

基本结构

// src/components/layout/navbar/main-navbar.tsx
import { NavbarContent } from './navbar-content';

export function MainNavbar() {
  return (
    <header className="sticky top-0 z-50 w-full border-b bg-background/80 backdrop-blur">
      <div className="container flex h-16 items-center justify-between">
        <NavbarContent />
      </div>
    </header>
  );
}

功能特性

  • 响应式设计: 在不同屏幕尺寸下自适应显示
  • 导航链接: 提供主要页面的快速访问
  • 用户认证: 集成认证状态显示
  • 主题切换: 提供明暗主题切换功能

3. Footer (页脚)

页面底部的页脚组件,包含版权信息和相关链接。

基本结构

// src/components/layout/footer.tsx
export function Footer() {
  return (
    <footer className="border-t bg-background">
      <div className="container py-8 md:py-12">
        <div className="grid grid-cols-1 gap-8 md:grid-cols-4">
          <div className="md:col-span-2">
            <FooterLogo />
            <FooterDescription />
          </div>
          <FooterLinks />
          <FooterSocial />
        </div>
        <FooterCopyright />
      </div>
    </footer>
  );
}

功能特性

  • 多列布局: 支持多列信息展示
  • 链接导航: 提供重要页面的快速访问
  • 社交链接: 展示社交媒体账号
  • 版权信息: 显示版权声明和备案信息

页面布局组件

1. PageContainer (页面容器)

标准页面内容容器,提供一致的内边距和最大宽度。

基本用法

import { PageContainer } from '@/components/layout/page-container';

<PageContainer>
  <h1>页面标题</h1>
  <p>页面内容</p>
</PageContainer>

Props说明

属性名类型默认值描述
classNamestring-自定义CSS类名
childrenReact.ReactNode-页面内容

功能特性

  • 响应式内边距: 在不同屏幕尺寸下提供合适的内边距
  • 最大宽度限制: 限制内容区域最大宽度
  • 居中对齐: 在宽屏设备上居中显示内容
  • 可扩展性: 支持自定义样式扩展

2. ThreeColumnLayout (三栏布局)

三栏布局组件,常用于文档和博客页面。

基本用法

import { ThreeColumnLayout } from '@/components/layout/three-column-layout';

<ThreeColumnLayout
  leftSidebar={<DocsSidebar />}
  rightSidebar={<TableOfContents />}
>
  <DocContent />
</ThreeColumnLayout>

Props说明

属性名类型描述
leftSidebarReact.ReactNode左侧边栏内容
rightSidebarReact.ReactNode右侧边栏内容
childrenReact.ReactNode主内容区域

功能特性

  • 响应式布局: 在不同屏幕尺寸下自适应显示
  • 侧边栏控制: 支持显示/隐藏侧边栏
  • 内容优先: 在小屏幕设备上优先显示主内容
  • 可配置性: 支持灵活的侧边栏配置

布局工具组件

1. ResponsiveGrid (响应式网格)

响应式网格布局组件,用于展示卡片列表。

基本用法

import { ResponsiveGrid } from '@/components/layout/responsive-grid';

<ResponsiveGrid>
  <BlogCard />
  <BlogCard />
  <BlogCard />
</ResponsiveGrid>

Props说明

属性名类型默认值描述
classNamestring-自定义CSS类名
childrenReact.ReactNode-网格项内容

功能特性

  • 自适应列数: 根据屏幕宽度自动调整列数
  • 一致间距: 保持网格项之间的一致间距
  • 响应式断点: 在不同断点下调整布局
  • 可扩展性: 支持自定义样式扩展

2. AppGrid (应用网格)

应用页面的网格布局组件,用于展示功能模块。

基本用法

import { AppGrid } from '@/components/layout/app-grid';

<AppGrid>
  <FeatureCard />
  <FeatureCard />
  <FeatureCard />
</AppGrid>

功能特性

  • 模块化布局: 适用于功能模块展示
  • 视觉层次: 提供清晰的视觉层次结构
  • 响应式设计: 在不同设备上自适应显示
  • 一致性: 保持与其他页面的一致性

布局状态管理

1. LayoutStore (布局状态存储)

使用Zustand管理全局布局状态。

基本用法

// src/stores/layout-store.ts
import { create } from 'zustand';

interface LayoutState {
  isSidebarOpen: boolean;
  toggleSidebar: () => void;
  closeSidebar: () => void;
}

export const useLayoutStore = create<LayoutState>((set) => ({
  isSidebarOpen: false,
  toggleSidebar: () => set((state) => ({ isSidebarOpen: !state.isSidebarOpen })),
  closeSidebar: () => set({ isSidebarOpen: false }),
}));

功能特性

  • 状态共享: 在组件间共享布局状态
  • 响应式更新: 状态变化时自动更新相关组件
  • 持久化: 支持状态持久化存储
  • 类型安全: 提供完整的TypeScript类型支持

2. useResponsiveLayout (响应式布局钩子)

自定义钩子用于检测响应式断点。

基本用法

// src/hooks/use-responsive-layout.ts
import { useMedia } from 'react-use';

export function useResponsiveLayout() {
  const isMobile = useMedia('(max-width: 768px)');
  const isTablet = useMedia('(min-width: 769px) and (max-width: 1024px)');
  const isDesktop = useMedia('(min-width: 1025px)');
  
  return { isMobile, isTablet, isDesktop };
}

功能特性

  • 断点检测: 检测不同屏幕尺寸断点
  • 实时更新: 窗口大小变化时实时更新
  • 性能优化: 使用高效的媒体查询检测
  • 类型安全: 提供完整的TypeScript类型支持

布局设计原则

1. 一致性原则

  • 视觉一致性: 保持整个网站的视觉风格统一
  • 交互一致性: 提供一致的用户交互体验
  • 导航一致性: 保持导航结构和位置的一致性
  • 布局一致性: 维持页面布局的基本结构一致

2. 响应式设计

  • 移动优先: 优先考虑移动设备的用户体验
  • 弹性布局: 使用弹性布局适应不同屏幕尺寸
  • 断点设计: 合理设置响应式断点
  • 触摸优化: 优化触摸设备的交互体验

3. 可访问性

  • 键盘导航: 支持完整的键盘导航
  • 屏幕阅读器: 兼容屏幕阅读器设备
  • 对比度: 确保足够的颜色对比度
  • 语义化: 使用语义化的HTML标签

性能优化

1. 布局优化

  • 最小化重排: 减少DOM重排和重绘
  • CSS优化: 使用高效的CSS选择器
  • 懒加载: 延迟加载非关键布局组件
  • 代码分割: 按需加载布局相关代码

2. 加载优化

  • 骨架屏: 提供内容加载时的占位符
  • 预加载: 预加载关键布局资源
  • 缓存策略: 合理使用浏览器缓存
  • 资源压缩: 压缩CSS和JavaScript资源

通过这些布局组件,项目能够构建出结构清晰、响应式良好且用户体验优秀的页面布局。

上一页基础UI组件
下一页MDX渲染组件
目录
主要布局组件
1. RootLayout (根布局)
基本结构
功能特性
2. MainNavbar (主导航栏)
基本结构
功能特性
3. Footer (页脚)
基本结构
功能特性
页面布局组件
1. PageContainer (页面容器)
基本用法
Props说明
功能特性
2. ThreeColumnLayout (三栏布局)
基本用法
Props说明
功能特性
布局工具组件
1. ResponsiveGrid (响应式网格)
基本用法
Props说明
功能特性
2. AppGrid (应用网格)
基本用法
功能特性
布局状态管理
1. LayoutStore (布局状态存储)
基本用法
功能特性
2. useResponsiveLayout (响应式布局钩子)
基本用法
功能特性
布局设计原则
1. 一致性原则
2. 响应式设计
3. 可访问性
性能优化
1. 布局优化
2. 加载优化