Создание собственного компонента изображения
Astro предоставляет встроенные компоненты <Image /> и <Picture />. Однако иногда требуются возможности, которые они не поддерживают напрямую. В таких случаях можно использовать функцию getImage() для создания собственного решения.
В этом рецепте мы создадим компонент, который отображает разные исходные изображения в зависимости от размера экрана (медиа-запросов).
Инструкция
Заголовок раздела «Инструкция»-
Создайте новый компонент и импортируйте функцию
getImage():src/components/MyCustomImage.astro ---import { getImage } from "astro:assets";--- -
Определите пропсы (входные параметры). Нам понадобятся URL для мобильной и десктопной версий, а также альтернативный текст.
src/components/MyCustomImage.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;--- -
Подготовьте оптимизированные версии обоих изображений:
src/components/MyCustomImage.astro const mobileImg = await getImage({src: mobileImgUrl,format: "webp",width: 400,height: 400,});const desktopImg = await getImage({src: desktopImgUrl,format: "webp",width: 1200,height: 400,});--- -
Используйте стандартный HTML-тег
<picture>для реализации адаптивности:src/components/MyCustomImage.astro <picture><source media="(max-width: 799px)" srcset={mobileImg.src} /><source media="(min-width: 800px)" srcset={desktopImg.src} /><img src={desktopImg.src} alt={alt} /></picture> -
Используйте ваш новый компонент на любой странице:
---import MyCustomImage from "../components/MyCustomImage.astro";import mobileImg from "../assets/mobile.jpg";import desktopImg from "../assets/desktop.jpg";---<MyCustomImagemobileImgUrl={mobileImg}desktopImgUrl={desktopImg}alt="Пример адаптивного изображения"/>