🎨 Gestion des polices avec next/font
dans Next.js 13+
Next.js 13+ simplifie l’intégration des polices grâce à next/font
. Cette API optimise les polices pour de meilleures performances :
✅ Chargement optimisé des polices (lazy loading, sous-ensembles automatiques).
✅ Hébergement local sans dépendance externe.
✅ Moins de FOUT (Flash of Unstyled Text).
1️⃣ Installer et utiliser une Google Font
📌 Installation de la police avec @next/font/google
Next.js propose un chargement optimisé des Google Fonts sans passer par un <link>
externe.
import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"] });
export default function RootLayout({ children }) {
return (
<html lang="fr">
<body className={inter.className}>{children}</body>
</html>
);
}
✅ Explication :
Inter({ subsets: ["latin"] })
: Charge la policeInter
en local avec le sous-ensemblelatin
.inter.className
: Ajoute la classe CSS optimisée pour la police.
2️⃣ Charger plusieurs polices Google
Si vous utilisez plusieurs polices, importez-les séparément.
import { Roboto, Lora } from "next/font/google";
const roboto = Roboto({ weight: ["400", "700"], subsets: ["latin"] });
const lora = Lora({ weight: ["400"], subsets: ["latin"] });
export default function RootLayout({ children }) {
return (
<html lang="fr">
<body className={`${roboto.className} bg-gray-100`}>
<header className={lora.className}>Titre en Lora</header>
{children}
</body>
</html>
);
}
✅ Explication :
Roboto
avec plusieurs poids (400
,700
).Lora
pour styliser les titres sans affecter le texte global.
3️⃣ Utiliser des polices locales (next/font/local
)
Pour héberger des polices personnalisées en local sans dépendance externe.
📌 Ajouter une police locale
import localFont from "next/font/local";
export const myFont = localFont({
src: [
{ path: "./fonts/MyFont-Regular.woff2", weight: "400", style: "normal" },
{ path: "./fonts/MyFont-Bold.woff2", weight: "700", style: "bold" },
],
variable: "--font-myfont", // Ajout d'une variable CSS
});
📌 Appliquer la police dans le layout
import { myFont } from "./fonts";
export default function RootLayout({ children }) {
return (
<html lang="fr" className={myFont.variable}>
<body className="bg-white text-gray-900"> {children} </body>
</html>
);
}
✅ Explication :
- Les fichiers de police sont stockés localement (
./fonts/
). variable: "--font-myfont"
permet d’utiliser la police via CSS variables (var(--font-myfont)
).
4️⃣ Appliquer une police via Tailwind CSS
Si vous utilisez Tailwind, ajoutez la police dans tailwind.config.js
:
const { fontFamily } = require("tailwindcss/defaultTheme");
module.exports = {
theme: {
extend: {
fontFamily: {
sans: ["var(--font-myfont)", ...fontFamily.sans],
},
},
},
};
✅ Explication :
var(--font-myfont)
utilise la police locale définie dansfonts.ts
.- S’intègre directement dans Tailwind (
font-sans
).
Intégration des polices avec Tailwind CSS v4
Avec Tailwind CSS v4.0, publié peu avant la rédaction de ce cours, l’intégration des polices est encore plus simple. Il suffit de :
1️⃣ Définir une variable CSS pour la police avec --font-{nomDeLaPolice}
.
2️⃣ Utiliser directement la classe font-{nomDeLaPolice}
dans le code.
📌 Exemple avec une Google Font
import { Inter } from "next/font/google";
export const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
import { inter } from "./fonts";
export default function RootLayout({ children }) {
return <html lang="fr" className={inter.variable}><body>{children}</body></html>;
}
🛠 Utilisation dans un composant
export default function Home() {
return <h1 className="font-inter">Bienvenue sur Next.js</h1>;
}
✅ Avantages : Plus besoin de modifier tailwind.config.ts
, tout est natif et optimisé ! 🚀
🎯 Conclusion
🚀 Avec next/font
, on bénéficie de :
✅ Un chargement rapide et sans dépendances externes.
✅ Une intégration simplifiée pour Google Fonts et polices locales.
✅ Moins de FOUT (Flash of Unstyled Text) pour une meilleure UX.