Composants Layout
Les Layouts (ou « mise-en-pages » en français) sont des composants Astro utilisés pour fournir une structure d’interface utilisateur réutilisable, comme un modèle de page.
Par convention, nous utilisons le terme « mise en page » pour les composants Astro qui fournissent des éléments d’interface utilisateur communs à toutes les pages, tels que les en-têtes, les barres de navigation et les pieds de page. Un composant de mise en page typique d’Astro fournit aux pages Astro, Markdown ou MDX les éléments suivants :
- une coquille de page (
balises <html>
,<head>
et<body>
) - un
<slot />
pour spécifier où le contenu de chaque page doit être injecté.
Mais, un composant de mise en page n’a rien de spécial ! Ils peuvent accepter des props et importer et utiliser d’autres composants comme n’importe quel autre composant Astro. Ils peuvent inclure des composants de frameworks d’interface utilisateur et des scripts côté client. Ils ne sont même pas obligés de fournir une coquille de page complète, et peuvent plutôt être utilisés comme des modèles d’interface utilisateur partielle.
Cependant, si un composant de mise en page contient une enveloppe de page, son élément <html>
doit être le parent de tous les autres éléments du composant. Tous les éléments <style>
ou <script>
doivent être entourés par les balises <html>
.
Les composants de mise en pages sont généralement placés dans un dossier src/layouts
dans votre projet pour l’organisation, mais ce n’est pas une obligation ; vous pouvez choisir de les placer n’importe où dans votre projet. Vous pouvez même placer des composants de mise en page à côté de vos pages en préfixant les noms de mise en page par _
.
Exemple de composant de mise en page
Titre de la section Exemple de composant de mise en pageUtiliser TypeScript avec des mises en page
Titre de la section Utiliser TypeScript avec des mises en pageToute présentation Astro peut être modifiée pour introduire la sécurité des types et l’autocomplétion en fournissant les types de vos props :
Mises en page Markdown
Titre de la section Mises en page MarkdownLes mises en page sont particulièrement utiles pour les pages Markdown individuelles qui, autrement, n’auraient pas de formatage de page.
Astro fournit une propriété spéciale layout
frontmatter destinée aux fichiers .md
individuels situés dans src/pages/
utilisant un routage basé sur les fichiers pour spécifier quel composant .astro
utiliser comme layout de la page. Ce composant vous permet de fournir du contenu <head>
comme des balises méta (par exemple <meta charset="utf-8">
) et des styles pour la page Markdown. Par défaut, ce composant spécifié peut accéder automatiquement aux données du fichier Markdown.
Ceci n’est pas reconnu comme une propriété spéciale lors de l’utilisation de content collections pour interroger et rendre votre contenu.
Une mise en page typique pour les pages Markdown inclut :
- La propriété
frontmatter
pour accéder au frontmatter et aux autres données de la page Markdown. - Un
<slot />
par défaut pour indiquer où le contenu Markdown de la page doit être rendu.
Vous pouvez définir le type Props
d’une mise en page, avec le type utilitaire MarkdownLayoutProps
:
Props de mise en page Markdown
Titre de la section Props de mise en page MarkdownUne mise en page Markdown aura accès aux informations suivantes via Astro.props
:
file
- Le chemin absolu de ce fichier (exemple :/home/user/projects/.../file.md
).url
- L’URL de cette page (exemple :/fr/guides/markdown-content
).frontmatter
- Tous les éléments frontmatter du document Markdown ou MDX.frontmatter.file
- Identique à la propriétéfile
de premier niveau.frontmatter.url
- Identique à la propriétéurl
de premier niveau.
headings
- Une liste de titre (h1 -> h6
) dans le document Markdown ou MDX avec les métadonnées associées. Cette liste suit le type :{ depth: number; slug: string; text: string }[]
.rawContent()
- Une fonction qui renvoie le document Markdown brut sous forme de chaine de caractères.compiledContent()
- Une fonction asynchrone qui renvoie le document Markdown compilé en tant que chaine de caractères HTML.
Une mise en page Markdown aura accès à toutes les propriétés disponibles du fichier Markdown depuis Astro.props
avec deux différences essentielles :
-
Informations sur l’en-tête (c.-à-d. les éléments
h1 -> h6
) sont disponibles via le tableauheadings
, plutôt qu’une fonctiongetHeadings()
. -
file
eturl
sont aussi disponibles comme propriétésfrontmatter
imbriquées (c.-à-d.frontmatter.url
etfrontmatter.file
).
Importation manuelle de mises en page (MDX)
Titre de la section Importation manuelle de mises en page (MDX)Vous pouvez également utiliser la propriété spéciale layout
de Markdown dans le frontmatter des fichiers MDX pour transmettre les props frontmatter
et headings
directement à un composant de mise en page spécifié de la même manière.
Pour passer à votre layout MDX des informations qui n’existent pas (ou ne peuvent pas exister) dans votre frontmatter, vous pouvez importer et utiliser un composant <Layout />
. Ce composant fonctionne comme n’importe quel autre composant Astro, et ne recevra pas de props automatiquement. Passez-lui directement les props nécessaires :
Ensuite, vos valeurs sont disponibles à travers Astro.props
dans votre mise en page, et votre contenu MDX va être injecté dans la page où votre composant <slot />
est écrit :
Lorsque vous utilisez une mise en page (que ce soit via la propriété layout
de frontmatter ou en important une mise en page), vous devez inclure la balise <meta charset="utf-8">
dans votre mise en page car Astro ne l’ajoutera plus automatiquement à votre page MDX.
Imbrication de mises en page
Titre de la section Imbrication de mises en pageLes composants de mise en page ne doivent pas nécessairement contenir une page entière de code HTML. Vous pouvez diviser vos mises en page en composants plus petits et combiner les composants de mise en page pour créer des modèles de page encore plus flexibles. Ce modèle est utile lorsque vous souhaitez partager du code entre plusieurs mises en page.
Par exemple, un composant de mise en page BlogPostLayout.astro
pourrait styliser le titre, la date et l’auteur d’un article. Ensuite, un BaseLayout.astro
au niveau du site pourrait gérer le reste de votre modèle de page, comme la navigation, les pieds de page, les balises méta SEO, les styles globaux et les polices de caractères. Vous pouvez également passer les props reçues de votre article à un autre layout, comme n’importe quel autre composant imbriqué.