版面
版面是一種 Astro 元件,用來建立可重複使用的 UI 結構,例如頁面模板。
我們習慣以「版面」稱呼在不同頁面共用的 Astro 元件,例如頁首、導覽列、頁尾這種 UI 元素。典型的 Astro 版面元件為 Astro、Markdown 或 MDX 頁面提供:
- 頁面殼層 (
<html>
、<head>
和<body>
標籤) - 供頁面內容嵌入的插槽
<slot />
但其實版面元件沒什麼特別的!它們和其他 Astro 元件一樣,可以接受參數、匯入並使用其他元件,也能包含 UI 框架元件 (EN)和客戶端腳本 (EN)。甚至可當作局部 UI 模板,不需要提供整個頁面。
然而,如果版面元件有包含頁面殼層,它的 <html>
元素必須是元件裡其他元素的父元素。
版面元件通常放在專案的 src/layouts
目錄,但這不是強制規定,可以自由選擇要放在哪裡。你甚至可以把它們跟頁面放在一起,只要在版面名稱加上 _
前綴 (EN)即可。
---import BaseHead from '../components/BaseHead.astro';import Footer from '../components/Footer.astro';const { title } = Astro.props;---<html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <BaseHead title={title}/> </head> <body> <nav> <a href="#">Home</a> <a href="#">Posts</a> <a href="#">Contact</a> </nav> <h1>{title}</h1> <article> <slot /> <!-- 你的內容會嵌在這裡 --> </article> <Footer /> </body> <style> h1 { font-size: 2rem; } </style></html>