Créer un composant image personnalisé
Astro fournit deux composants intégrés que vous pouvez utiliser pour afficher et optimiser vos images. Le composant <Picture>
vous permet d’afficher des images réactives et de travailler avec différents formats et tailles. Le composant <Image>
optimisera vos images et vous permettra de passer dans différents formats et propriétés de qualité.
Lorsque vous avez besoin d’options que les composants <Picture>
et <Image>
ne supportent pas actuellement, vous pouvez utiliser la fonction getImage()
pour créer un composant personnalisé.
Dans cette recette, vous utiliserez la fonction getImage()
(EN) pour créer votre propre composant image personnalisé qui affiche différentes images sources en fonction des requêtes média.
Recette
Titre de la section Recette-
Créez un nouveau composant Astro et importez la fonction
getImage()
.src/components/MyCustomImageComponent.astro ---import { getImage } from "astro:assets";--- -
Créez un nouveau composant pour votre image personnalisée.
MyCustomComponent.astro
recevra troisprops
(paramètres) deAstro.props
. Les propsmobileImgUrl
etdesktopImgUrl
sont utilisés pour créer votre image en différentes tailles d’affichage. La propriétéalt
est utilisée pour le texte alternatif de l’image. Ces props seront passés à chaque fois que vous effectuerez le rendu de vos composants d’image personnalisés. Ajoutez les imports suivants et définissez les props que vous utiliserez dans votre composant. Vous pouvez également utiliser TypeScript pour typer les props.src/components/MyCustomImageComponent.astro ---import type { ImageMetadata } from "astro";import { getImage } from "astro:assets";interface Props {mobileImgUrl: string | ImageMetadata;desktopImgUrl: string | ImageMetadata;alt: string;}const { mobileImgUrl, desktopImgUrl, alt } = Astro.props;--- -
Définissez chacune de vos images réactives en appelant la fonction
getImage()
avec les propriétés souhaitées.src/components/MyCustomImageComponent.astro ---import type { ImageMetadata } from "astro";import { getImage } from "astro:assets";interface Props {mobileImgUrl: string | ImageMetadata;desktopImgUrl: string | ImageMetadata;alt: string;}const { mobileImgUrl, desktopImgUrl, alt } = Astro.props;const mobileImg = await getImage({src: mobileImgUrl,format: "webp",width: 200,height: 200,});const desktopImg = await getImage({src: desktopImgUrl,format: "webp",width: 800,height: 200,});--- -
Créez un élément
<picture>
qui génère unsrcset
avec vos différentes images affichées en fonction de la taille de l’écran.src/components/MyCustomImageComponent.astro ---import type { ImageMetadata } from "astro";import { getImage } from "astro:assets";interface Props {mobileImgUrl: string | ImageMetadata;desktopImgUrl: string | ImageMetadata;alt: string;}const { mobileImgUrl, desktopImgUrl, alt } = Astro.props;const mobileImg = await getImage({src: mobileImgUrl,format: "webp",width: 200,height: 200,});const desktopImg = await getImage({src: desktopImgUrl,format: "webp",width: 800,height: 200,});---<picture><source media="(max-width: 799px)" srcset={mobileImg.src} /><source media="(min-width: 800px)" srcset={desktopImg.src} /><img src={desktopImg.src} alt={alt} /></picture> -
Importez et utilisez
<MyCustomImageComponent />
dans n’importe quel fichier.astro
. Assurez-vous de passer les accessoires nécessaires à la génération de deux images différentes selon la taille de l’écran :src/pages/index.astro ---import MyCustomImageComponent from "../components/MyCustomImageComponent.astro";import mobileImage from "../images/mobile-profile-image.jpg";import desktopImage from "../images/desktop-profile-image.jpg";---<MyCustomImageComponentmobileImgUrl={mobileImage}desktopImgUrl={desktopImage}alt="image du profil de l'utilisateur"/>
Plus de méthodes
-
Partage d'État
Apprenez à partager l'état entre les composants du framework avec les Nano Stores.
-
Ajouter un flux RSS
Ajoutez un flux RSS à votre site Astro pour permettre aux utilisateurs de s'abonner à votre contenu.
-
Installation d'un plugin Vite ou Rollup
Découvrez comment vous pouvez importer des données YAML en ajoutant un plugin Rollup à votre projet.
-
Créer un composant image personnalisé
Apprendre à construire un composant image personnalisé qui supporte les requêtes média en utilisant la fonction getImage.
-
Construire des formulaires avec des routes API
Apprendre à utiliser JavaScript pour envoyer les soumissions de formulaires à une route API.
-
Créer des formulaires HTML dans Astro Pages
Apprenez à construire des formulaires HTML et à gérer les soumissions dans votre frontmatter.
-
Use Bun with Astro
Learn how to use Bun with your Astro site.
-
Call endpoints from the server
Learn how to call endpoints from the server in Astro.
-
Vérifier un Captcha
Apprenez à créer une route API et à la récupérer auprès du client.
-
Construisez votre site Astro avec Docker
Apprendre à construire votre site Astro en utilisant Docker.
-
Dynamically Import Images
Learn how to dynamically import images using Vite's import.meta.glob function
-
Ajouter des icônes aux liens externes
Apprendre à installer un plugin rehype pour ajouter des icônes aux liens externes dans vos fichiers Markdown.
-
Add i18n features
Use dynamic routing and content collections to add internationalization support to your Astro site.
-
Ajouter l'heure de la dernière modification
Construire un plugin Remark pour ajouter l'heure de la dernière modification à votre Markdown et MDX.
-
Ajout du temps de lecture
Construire un plugin remark pour ajouter le temps de lecture à vos fichiers Markdown ou MDX.
-
Partage d'état entre composants Astro
Apprendre à partager des états entre composants Astro avec Nano Stores.
-
Utilisation de la diffusion en continu pour améliorer les performances des pages
Apprendre à utiliser la diffusion en continu pour améliorer les performances des pages.
-
Styliser le rendu Markdown avec la typographie Tailwind
Apprenez à utiliser @tailwind/typography pour styliser votre rendu Markdown.