Aller au contenu

Créer votre première mise en page

Préparez-vous à…

  • Refactoriser les éléments communs dans une mise en page
  • Utiliser un élément <slot /> d’Astro pour placer le contenu de la page dans une mise en page
  • Transmettre des valeurs spécifiques à la page en tant que props à sa mise en page

Vous avez toujours certains composants Astro qui sont rendus de manière répétée sur chaque page. Il est temps de restructurer à nouveau pour créer une mise en page partagée !

  1. Créez un nouveau fichier à l’emplacement src/layouts/BaseLayout.astro. (Vous devrez d’abord créer un nouveau dossier layouts.)

  2. Copiez l’intégralité du contenu de index.astro dans votre nouveau fichier, BaseLayout.astro.

    src/layouts/BaseLayout.astro
    ---
    import Header from '../components/Header.astro';
    import Footer from '../components/Footer.astro';
    import '../styles/global.css';
    const pageTitle = "Page d'accueil";
    ---
    <html lang="fr">
    <head>
    <meta charset="utf-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width" />
    <meta name="generator" content={Astro.generator} />
    <title>{pageTitle}</title>
    </head>
    <body>
    <Header />
    <h1>{pageTitle}</h1>
    <Footer />
    <script>
    import "../scripts/menu.js";
    </script>
    </body>
    </html>

Utiliser votre mise en page dans une page

Titre de la section Utiliser votre mise en page dans une page
  1. Remplacez le code dans src/pages/index.astro par ce qui suit :

    src/pages/index.astro
    ---
    import BaseLayout from '../layouts/BaseLayout.astro';
    const pageTitle = "Page d'accueil";
    ---
    <BaseLayout>
    <h2>Mon sous-titre de blog génial</h2>
    </BaseLayout>
  2. Vérifiez à nouveau l’aperçu du navigateur pour remarquer ce qui a (ou, spoiler : n’a pas !) changé.

  3. Ajoutez un élément <slot /> à src/layouts/BaseLayout.astro juste au-dessus du composant de pied de page, puis vérifiez l’aperçu du navigateur de votre page d’accueil et remarquez ce qui a vraiment changé cette fois-ci !

    src/layouts/BaseLayout.astro
    ---
    import Header from '../components/Header.astro';
    import Footer from '../components/Footer.astro';
    import '../styles/global.css';
    const pageTitle = "Page d'accueil";
    ---
    <html lang="fr">
    <head>
    <meta charset="utf-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport" content="width=device-width" />
    <meta name="generator" content={Astro.generator} />
    <title>{pageTitle}</title>
    </head>
    <body>
    <Header />
    <h1>{pageTitle}</h1>
    <slot />
    <Footer />
    <script>
    import "../scripts/menu.js";
    </script>
    </body>
    </html>

Le <slot /> vous permet d’injecter (ou “insérer”) du contenu enfant écrit entre les balises d’ouverture et de fermeture <Component></Component> dans n’importe quel fichier Component.astro.

Transmettre les valeurs spécifiques de la page en tant que props

Titre de la section Transmettre les valeurs spécifiques de la page en tant que props
  1. Transmettez le titre de la page à votre composant de mise en page depuis index.astro en utilisant un attribut de composant :

    src/pages/index.astro
    ---
    import BaseLayout from '../layouts/BaseLayout.astro';
    const pageTitle = "Page d'accueil";
    ---
    <BaseLayout pageTitle={pageTitle}>
    <h2>Mon sous-titre de blog génial</h2>
    </BaseLayout>
  2. Modifiez le script de votre composant de mise en page BaseLayout.astro pour recevoir un titre de page via Astro.props au lieu de le définir comme une constante.

    src/layouts/BaseLayout.astro
    ---
    import Header from '../components/Header.astro';
    import Footer from '../components/Footer.astro';
    import '../styles/global.css';
    const pageTitle = "Page d'accueil";
    const { pageTitle } = Astro.props;
    ---
  3. Consultez l’aperçu de votre navigateur pour vérifier que le titre de votre page n’a pas changé. Il a la même valeur, mais il est désormais affiché dynamiquement. Et maintenant, chaque page individuelle peut spécifier son propre titre à la mise en page.

Essayer par vous-même - Utiliser votre mise en page partout

Titre de la section Essayer par vous-même - Utiliser votre mise en page partout

Refactorisez vos autres pages (blog.astro et about.astro) pour qu’elles utilisent votre nouveau composant <BaseLayout> pour afficher les éléments communs de la page.

N’oubliez pas de :

  • Transmettre un titre de page en tant que props via un attribut de composant.

  • Laisser la mise en page être responsable du rendu HTML de tous les éléments communs.

  • Déplacer toutes les balises <style> existantes dans la balise <head> de la page avec les styles que vous souhaitez conserver dans le modèle HTML de la page.

  • Supprimer de chaque page individuelle tout ce qui est désormais géré par la mise en page, y compris :

    • les éléments HTML
    • les composants et leurs importations
    • les règles CSS dans une balise <style> (par exemple, <h1> dans votre page À propos)
    • les balises <script>
  1. Un composant Astro (fichier .astro) peut fonctionner comme :

  2. Pour afficher un titre sur la page, vous pouvez :

  3. Les informations peuvent être transmises d’un composant à un autre :

Contribuer Communauté Parrainer