next/font оновчлол
Вэб хуудас ачаалах үед фонт хожим татагдаж ирэхэд текст эхлээд системийн фонтоор харагдаад дараа нь өөрчлөгддөг — энэ нь FOUT (Flash of Unstyled Text) гэгддэг. Хэрэглэгчид эвгүй. next/font энэ асуудлыг бүрэн шийддэг.
next/font/google — Google Fonts оновчлол
next/font/google нь Google Fonts-г build хийх үед татаж аваад дотроо хадгалдаг. Хэрэглэгчийн хөтөч Google-н сервер рүү хүсэлт илгээхгүй — маш хурдан, нууцлал сайн.
// app/layout.tsx
import { Geist, Geist_Mono } from 'next/font/google';
import './globals.css';
const geistSans = Geist({
subsets: ['latin'],
variable: '--font-geist-sans', // CSS variable болгон ашиглана
});
const geistMono = Geist_Mono({
subsets: ['latin'],
variable: '--font-geist-mono',
});
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="mn" className={`${geistSans.variable} ${geistMono.variable}`}>
<body>{children}</body>
</html>
);
}
variable тохиргоо нь фонтыг CSS custom property болгон хадгалдаг. Тэгснээр Tailwind CSS дотор font-sans, font-mono ашиглах боломжтой болно.
Tailwind-тэй холбох
globals.css дотор @theme директив ашиглан фонтын variable-г Tailwind-д бүртгэнэ:
/* app/globals.css */
@import "tailwindcss";
@theme {
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
Одоо component дотор font-mono class ашиглахад Geist Mono автоматаар хэрэглэгдэнэ:
// components/lesson/CodeBlock.tsx
export default function CodeBlock({ code }: { code: string }) {
return (
<pre className="font-mono bg-[#0f172a] text-[#f1f5f9] p-4 rounded-lg overflow-x-auto">
<code>{code}</code>
</pre>
);
}
next/font/local — локал фонт
Google Fonts ашиглахгүйгээр public/fonts/ директор дотор фонт файл хадгалж next/font/local-г ашиглаж болно:
// app/layout.tsx
import localFont from 'next/font/local';
const mongolianFont = localFont({
src: [
{
path: '../public/fonts/mongolian-regular.woff2',
weight: '400',
style: 'normal',
},
{
path: '../public/fonts/mongolian-bold.woff2',
weight: '700',
style: 'normal',
},
],
variable: '--font-mongolian',
});
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="mn" className={mongolianFont.variable}>
<body>{children}</body>
</html>
);
}
.woff2 формат нь вэбэд хамгийн оновчтой фонт формат — файлын хэмжээ жижиг, татах хурд хурдан.
display: 'swap' — FOUT шийдэх
Фонт ачаалагдах хүртэл системийн фонт харуулаад дараа нь солих тохиргоо:
const geistSans = Geist({
subsets: ["latin"],
variable: "--font-geist-sans",
display: "swap", // ← системийн фонт → Geist болж солигдоно
});
display: 'swap' нь next/font дотор анхнаасаа тохируулагдсан байдаг тул ихэвчлэн гараар нэмэх шаардлагагүй — гэхдээ мэдэж байх нь чухал.
Дараагийн хичээлд:
Environment Variable ашиглан API key, database URL зэрэг нууц мэдээллийг кодоос тусад нь хэрхэн хадгалж, NEXT_PUBLIC_ prefix-тэй болон серверийн variable-г ялгахыг ойлгоно.