Layouts
Layouts sind Astro-Komponenten, die verwendet werden, um eine wiederverwendbare UI-Struktur, wie z.B. eine Seitenvorlage, bereitzustellen.
Wir verwenden den Begriff „Layout“ üblicherweise für Astro-Komponenten, die gemeinsame UI-Elemente für alle Seiten bereitstellen, wie z. B. Kopf-, Navigations- und Fußzeilen. Eine typische Astro-Layoutkomponente bietet Astro-, Markdown- oder MDX-Seiten folgendes:
- einer Seitenhülle (
<html>
,<head>
und<body>
Tags) - einen
<Slot />
, um festzulegen, wo einzelne Seiteninhalte eingefügt werden sollen.
Allerdings sind Layoutkomponenten nichts Besonderes! Sie können Props akzeptieren und andere Komponenten importieren und verwenden wie jede andere Astro-Komponente. Sie können UI-Framework-Komponenten und client-seitige Skripte enthalten. Sie müssen nicht einmal eine vollständige Seitenoberfläche bereitstellen, sondern können stattdessen als partielle UI-Vorlagen verwendet werden.
Wenn eine Layoutkomponente jedoch eine Seitenhülle enthält, muss ihr <html>
-Element das übergeordnete Element aller anderen Elemente der Komponente sein. Alle <style>
oder <script>
Elemente müssen von den <html>
Tags umschlossen sein.
Layout-Komponenten werden normalerweise in einem src/layouts
-Verzeichnis in deinem Projekt platziert, aber das ist keine Voraussetzung; du kannst sie überall in deinem Projekt platzieren. Du kannst Layout-Komponenten sogar neben deinen Seiten platzieren, indem du den Layout-Namen ein _
voranstellst.
Beispiel-Layout
Abschnitt betitelt Beispiel-LayoutTypeScript mit Layouts verwenden
Abschnitt betitelt TypeScript mit Layouts verwendenJedes Astro-Layout kann modifiziert werden, um Typensicherheit und Autovervollständigung einzuführen, indem die Typen für deine Eigenschaft bereitgestellt werden:
Markdown Layouts
Abschnitt betitelt Markdown LayoutsSeitenlayouts sind besonders nützlich für einzelne Markdown-Seiten, die sonst keine Seitenformatierung haben würden.
Astro bietet eine spezielle Frontmatter-Eigenschaft layout
, mit der du festlegen kannst, welche .astro
-Komponente als Seitenlayout verwendet werden soll. Standardmäßig kann die angegebene Komponente automatisch auf Daten aus der Markdown-Datei zugreifen.
Ein typisches Layout für eine Markdown-Seite umfasst:
- Die Eigenschaft
frontmatter
für den Zugriff auf das Frontmatter der Markdown-Seite und andere Daten. - Ein Standard-
<slot />
, um anzugeben, wo der Markdown-Inhalt der Seite gerendert werden soll.
Du kannst den Props
-Typ eines Layouts mit dem MarkdownLayoutProps
-Helper setzen:
Markdown Layout Eigenschaften
Abschnitt betitelt Markdown Layout EigenschaftenEin Markdown-Layout hat über Astro.props
Zugriff auf die folgenden Informationen:
file
- Der absolute Pfad zu dieser Datei (z.B./home/user/projects/.../file.md
).url
- Die URL der Seite (z.B./de/guides/markdown-content
).frontmatter
- Alle Frontmatter aus dem Markdown- oder MDX-Dokument.frontmatter.file
- Dasselbe wie die Top-Level-Eigenschaft „file“.frontmatter.url
- Dasselbe wie die Eigenschafturl
der obersten Ebene.
headings
- Eine Liste von Überschriften (h1 -> h6
) im Markdown- oder MDX-Dokument mit zugehörigen Metadaten. Diese Liste folgt dem Typ:{ depth: number; slug: string; text: string }[]
.rawContent()
- Eine Funktion, die das rohe Markdown-Dokument als String zurückgibt.compiledContent()
- Eine Funktion, die das Markdown-Dokument zu einem HTML-String kompiliert zurückgibt.
Ein Markdown-Layout hat Zugriff auf alle verfügbaren Eigenschaften (EN) der Markdown-Datei aus Astro.props
mit zwei wesentlichen Unterschieden:
-
Die Überschrifteninformationen (d.h. die Elemente
h1 -> h6
) sind über das Arrayheadings
verfügbar und nicht über die FunktiongetHeadings()
. -
file
andurl
are also available as nestedfrontmatter
properties (i.e.frontmatter.url
andfrontmatter.file
).
Manuelles Importieren von Layouts (MDX)
Abschnitt betitelt Manuelles Importieren von Layouts (MDX)Du kannst auch die spezielle Markdown-Layout-Eigenschaft im Frontmatter von MDX-Dateien verwenden, um die Eigenschaften frontmatter
und headings
auf die gleiche Weise direkt an eine bestimmte Layoutkomponente zu übergeben.
Um Informationen an dein MDX-Layout zu übergeben, die in deinem Frontmatter nicht vorhanden sind (oder sein können), kannst du stattdessen eine <Layout />
-Komponente importieren und verwenden. Diese funktioniert wie jede andere Astro-Komponente und erhält nicht automatisch Eigenschaften. Übergib ihr alle notwendigen Eigenschaften direkt:
Dann stehen dir deine Werte über Astro.props
in deinem Layout zur Verfügung, und dein MDX-Inhalt wird in die Seite injiziert, in der deine <Slot />
-Komponente geschrieben wird:
Verschachtelte Layouts
Abschnitt betitelt Verschachtelte LayoutsLayout-Komponenten müssen nicht unbedingt eine ganze Seite mit HTML enthalten. Du kannst deine Layouts in kleinere Komponenten aufteilen und Layoutkomponenten kombinieren, um noch flexiblere Seitenvorlagen zu erstellen. Dieses Muster ist nützlich, wenn du einen Teil des Codes für mehrere Layouts verwenden willst.
Eine Layoutkomponente BlogPostLayout.astro
könnte zum Beispiel den Titel, das Datum und den Autor eines Beitrags gestalten. Ein seitenweites BaseLayout.astro
könnte dann den Rest deiner Seitenvorlage übernehmen, wie Navigation, Fußzeilen, SEO-Meta-Tags, globale Stile und Schriftarten. Du kannst auch Requisiten, die du von deinem Beitrag erhalten hast, an ein anderes Layout weitergeben, genau wie jede andere verschachtelte Komponente.