六维教程

Astro 布局

布局是什么

布局(Layout)是一个「套在页面外面的壳」,通常包含 <html><head>、导航栏、页脚等所有页面共有的部分,业务页面只需写自己的正文,通过插槽塞进布局里。

创建一个基础布局

---
// src/layouts/BaseLayout.astro
import '../styles/global.css';
const { title, description = '' } = Astro.props; // 通过 Astro.props 接收页面传入的 title、description
---
<html lang="zh-CN">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>{title}</title>
    <meta name="description" content={description} />
  </head>
  <body>
    <nav>
      <a href="/">首页</a>
      <a href="/blog">博客</a>
    </nav>
    <main class="container">
      <slot /> <!-- 页面正文会渲染到这里 -->
    </main>
    <footer>© 2026 我的站点</footer>
  </body>
</html>

页面使用布局

---
// src/pages/index.astro
import BaseLayout from '../layouts/BaseLayout.astro';
---
<BaseLayout title="首页" description="欢迎来到我的 Astro 站点">
  <h1>你好,Astro</h1>
  <p>这一节内容由页面提供,外壳由布局提供。</p>
</BaseLayout>

页面剩下的工作就是填正文,导航、页脚都不用重复写。

布局也可以嵌套

复杂站点可以再套一层,比如 BaseLayout 管整体外壳,PostLayout 管文章专属样式(标题、日期、目录)。

---
// src/layouts/PostLayout.astro
import BaseLayout from './BaseLayout.astro';
const { title, date } = Astro.props; // 通过 Astro.props 接收文章页传入的数据
---
<BaseLayout title={title}>
  <article>
    <h1>{title}</h1>
    <time>{date}</time>
    <slot />
  </article>
</BaseLayout>

通过 Props 控制布局

布局能接收任意 Props,用来切换行为,例如是否显示侧边栏。

---
const { title, showSidebar = false } = Astro.props; // 通过 props 控制是否显示侧边栏
---
<BaseLayout title={title}>
  <div class={showSidebar ? 'with-sidebar' : ''}>
    <slot />
  </div>
</BaseLayout>
上一篇
Astro 全局样式
下一篇
Astro 内容集合