feat: use `Image` component

finxol.io 0bdc45ec d03907e1

verified
Changed files
+42 -26
src
assets
styles
layouts
pages
en
projects
fr
+4 -2
src/assets/styles/index.css
···
z-index: 1;
}
-
& > :not(picture) {
margin: 0 var(--spacing);
padding: 0;
}
-
& > picture {
grid-area: img;
width: 100%;
}
& > h3 {
···
z-index: 1;
}
+
& > :not(img) {
margin: 0 var(--spacing);
padding: 0;
}
+
& > img {
grid-area: img;
width: 100%;
+
height: auto;
+
display: block;
}
& > h3 {
+3 -6
src/assets/styles/projects/karr.css
···
font-size: 1.2rem;
}
-
& > picture,
& > img {
grid-area: img;
align-self: center;
justify-self: center;
-
-
&,
-
img {
-
border-radius: var(--radius);
-
}
}
& > p.description {
···
font-size: 1.2rem;
}
& > img {
grid-area: img;
align-self: center;
justify-self: center;
+
border-radius: var(--radius);
+
height: auto;
+
width: auto;
}
& > p.description {
+1 -2
src/assets/styles/reset.css
···
}
/* Make images easier to work with */
-
img,
-
picture {
max-width: 100%;
display: block;
}
···
}
/* Make images easier to work with */
+
img {
max-width: 100%;
display: block;
}
+13 -5
src/layouts/Layout.astro
···
import "@/assets/styles/main.css";
import "@/assets/styles/reset.css";
import { Icon } from "astro-icon/components";
import { config } from "@/config.ts";
import colinPng from "@/assets/img/colin.png";
-
import colinWebp from "@/assets/img/colin.webp";
const path = Astro.originPathname.replace(/\/(fr|en)\//, "/");
const locale = Astro.currentLocale;
···
</head>
<body>
<header>
-
<picture class="container">
<source srcset={colinWebp.src} type="image/webp" />
<img src={colinPng.src} alt="Colin Ozanne" />
-
</picture>
<h1 class="container">Colin <br class="desktop-only" /> Ozanne</h1>
<p class="container">{subtitle}</p>
</header>
···
width: 100%;
padding: var(--spacing, 1rem);
-
picture {
aspect-ratio: auto;
height: auto;
padding: 0;
margin: 0;
overflow: hidden;
}
h1 {
···
"title title";
gap: var(--spacing);
-
picture {
grid-area: img;
width: var(--img-size);
height: var(--img-size);
···
import "@/assets/styles/main.css";
import "@/assets/styles/reset.css";
import { Icon } from "astro-icon/components";
+
import { Image } from "astro:assets";
import { config } from "@/config.ts";
import colinPng from "@/assets/img/colin.png";
const path = Astro.originPathname.replace(/\/(fr|en)\//, "/");
const locale = Astro.currentLocale;
···
</head>
<body>
<header>
+
<Image
+
class="container"
+
src={colinPng}
+
alt="Colin Ozanne"
+
width={256}
+
height={256}
+
/>
+
<!-- <picture class="container">
<source srcset={colinWebp.src} type="image/webp" />
<img src={colinPng.src} alt="Colin Ozanne" />
+
</picture> -->
<h1 class="container">Colin <br class="desktop-only" /> Ozanne</h1>
<p class="container">{subtitle}</p>
</header>
···
width: 100%;
padding: var(--spacing, 1rem);
+
img {
aspect-ratio: auto;
height: auto;
padding: 0;
margin: 0;
overflow: hidden;
+
--container-color: var(--rose-500);
}
h1 {
···
"title title";
gap: var(--spacing);
+
img {
grid-area: img;
width: var(--img-size);
height: var(--img-size);
+1 -1
src/pages/en/projects/karr.astro
···
import { Image } from "astro:assets";
import karrJpg from "@/assets/img/karr_demo.jpg";
-
import karrWebp from "@/assets/img/karr_demo.webp";
const homepage = Astro.url;
homepage.pathname = "/";
···
src={karrJpg}
alt="Karr"
style="view-transition-name: karr-img"
/>
<p class="description">
···
import { Image } from "astro:assets";
import karrJpg from "@/assets/img/karr_demo.jpg";
const homepage = Astro.url;
homepage.pathname = "/";
···
src={karrJpg}
alt="Karr"
style="view-transition-name: karr-img"
+
width={2300}
/>
<p class="description">
+10 -7
src/pages/fr/index.astro
···
import Layout from "@/layouts/Layout.astro";
import "@/assets/styles/index.css";
import { Icon } from "astro-icon/components";
import karrJpg from "@/assets/img/karr_demo.jpg";
-
import karrWebp from "@/assets/img/karr_demo.webp";
const projects = [
{
name: "Karr",
slug: "karr",
description: "Plateforme de covoiturage fédérée",
-
imgs: {
-
jpg: karrJpg,
-
webp: karrWebp,
-
},
tags: ["Next.js", "Hono", "OpenAuth", "CI"],
},
];
···
{
projects.map((project) => (
<div class="project">
-
<picture style="view-transition-name: karr-img">
<source
srcset={project.imgs.webp.src}
type="image/webp"
···
src={project.imgs.jpg.src}
alt={project.name}
/>
-
</picture>
<h3>
<a href={`/projects/${project.slug}`}>
{project.name}
···
import Layout from "@/layouts/Layout.astro";
import "@/assets/styles/index.css";
import { Icon } from "astro-icon/components";
+
import { Image } from "astro:assets";
import karrJpg from "@/assets/img/karr_demo.jpg";
const projects = [
{
name: "Karr",
slug: "karr",
description: "Plateforme de covoiturage fédérée",
+
img: karrJpg,
tags: ["Next.js", "Hono", "OpenAuth", "CI"],
},
];
···
{
projects.map((project) => (
<div class="project">
+
<Image
+
src={project.img}
+
alt={project.name}
+
style="view-transition-name: karr-img"
+
width={1100}
+
/>
+
<!-- <picture style="view-transition-name: karr-img">
<source
srcset={project.imgs.webp.src}
type="image/webp"
···
src={project.imgs.jpg.src}
alt={project.name}
/>
+
</picture> -->
<h3>
<a href={`/projects/${project.slug}`}>
{project.name}
+10 -3
src/pages/fr/projects/karr.astro
···
import Layout from "@/layouts/Layout.astro";
import "@/assets/styles/projects/karr.css";
import { Icon } from "astro-icon/components";
import karrJpg from "@/assets/img/karr_demo.jpg";
-
import karrWebp from "@/assets/img/karr_demo.webp";
const homepage = Astro.url;
homepage.pathname = "/";
···
Plateforme de covoiturage fédérée pour entreprises
</p>
-
<picture style="view-transition-name: karr-img">
<source srcset={karrWebp.src} type="image/webp" />
<img src={karrJpg.src} alt="Karr" />
-
</picture>
<p class="description">
Ce projet entrepreneurial a été porté pendant 5 mois avec
···
import Layout from "@/layouts/Layout.astro";
import "@/assets/styles/projects/karr.css";
import { Icon } from "astro-icon/components";
+
import { Image } from "astro:assets";
import karrJpg from "@/assets/img/karr_demo.jpg";
const homepage = Astro.url;
homepage.pathname = "/";
···
Plateforme de covoiturage fédérée pour entreprises
</p>
+
<Image
+
src={karrJpg}
+
alt="Karr"
+
style="view-transition-name: karr-img"
+
width={2300}
+
/>
+
+
<!-- <picture style="view-transition-name: karr-img">
<source srcset={karrWebp.src} type="image/webp" />
<img src={karrJpg.src} alt="Karr" />
+
</picture> -->
<p class="description">
Ce projet entrepreneurial a été porté pendant 5 mois avec