Problème
`src/components/ui/MarkdownContent.tsx` surcharge `a`, `h2`, `h3`, `pre` mais pas `img`. Résultat : les images inline dans les articles MDX (captures d'écran, diagrammes) rendent en `
` natif sans `loading="lazy"`, sans dimensions, sans `decoding="async"`.
Conséquences :
- CLS (Cumulative Layout Shift) sur les articles avec images inline.
- Chargement eager par défaut → bande passante gaspillée pour les images en bas d'article.
- Pas de `alt` fallback contrôlé.
Solution
Ajouter un handler `img` dans `MarkdownContent.tsx` (ligne 36) :
```tsx
img({ src, alt, title }) {
if (!src) return null;
return (
<img
src={src}
alt={alt ?? ""}
title={title}
loading="lazy"
decoding="async"
className="rounded-md"
/>
);
},
```
Pour les dimensions : idéalement, passer par `remark-images` ou un plugin qui lit les dimensions réelles du fichier au build time et les injecte. Sans ça, réserver une aspect-ratio par défaut via CSS (`aspect-video` par exemple) pour réduire le CLS.
Lier avec l'issue #XXX (images responsive via srcset) pour unifier l'approche.
Problème
`src/components/ui/MarkdownContent.tsx` surcharge `a`, `h2`, `h3`, `pre` mais pas `img`. Résultat : les images inline dans les articles MDX (captures d'écran, diagrammes) rendent en `
` natif sans `loading="lazy"`, sans dimensions, sans `decoding="async"`.
Conséquences :
Solution
Ajouter un handler `img` dans `MarkdownContent.tsx` (ligne 36) :
```tsx
img({ src, alt, title }) {
if (!src) return null;
return (
<img
src={src}
alt={alt ?? ""}
title={title}
loading="lazy"
decoding="async"
className="rounded-md"
/>
);
},
```
Pour les dimensions : idéalement, passer par `remark-images` ou un plugin qui lit les dimensions réelles du fichier au build time et les injecte. Sans ça, réserver une aspect-ratio par défaut via CSS (`aspect-video` par exemple) pour réduire le CLS.
Lier avec l'issue #XXX (images responsive via srcset) pour unifier l'approche.