تحسين الخطوط
next/font
سيقوم تلقائيًا بتحسين خطوطك (بما في ذلك الخطوط المخصصة) وإزالة طلبات الشبكة الخارجية لتحسين الخصوصية والأداء.
🎥 شاهد: تعلم المزيد حول كيفية استخدام
next/font
→ YouTube (6 دقائق).
يتضمن next/font
استضافة ذاتية تلقائية مدمجة لأي ملف خط. هذا يعني أنه يمكنك تحميل خطوط الويب بشكل مثالي دون أي تغيير في التخطيط، بفضل خاصية CSS size-adjust
المستخدمة.
نظام الخطوط الجديد هذا يسمح لك أيضًا باستخدام جميع خطوط جوجل بسهولة مع مراعاة الأداء والخصوصية. يتم تنزيل ملفات CSS والخطوط في وقت البناء واستضافتها ذاتيًا مع باقي مواردك الثابتة. لا يتم إرسال أي طلبات إلى جوجل من المتصفح.
خطوط جوجل
استضف أي خط من خطوط جوجل ذاتيًا تلقائيًا. يتم تضمين الخطوط في النشر وتقديمها من نفس النطاق كنشرك. لا يتم إرسال أي طلبات إلى جوجل من المتصفح.
ابدأ باستيراد الخط الذي ترغب في استخدامه من next/font/google
كدالة. نوصي باستخدام الخطوط المتغيرة للحصول على أفضل أداء ومرونة.
لاستخدام الخط في جميع صفحاتك، أضفه إلى ملف _app.js
تحت /pages
كما هو موضح أدناه:
import { Inter } from 'next/font/google'
// إذا كنت تحمل خطًا متغيرًا، لا تحتاج إلى تحديد وزن الخط
const inter = Inter({ subsets: ['latin'] })
export default function MyApp({ Component, pageProps }) {
return (
<main className={inter.className}>
<Component {...pageProps} />
</main>
)
}
إذا لم تتمكن من استخدام خط متغير، ستحتاج إلى تحديد وزن:
import { Roboto } from 'next/font/google'
const roboto = Roboto({
weight: '400',
subsets: ['latin'],
})
export default function MyApp({ Component, pageProps }) {
return (
<main className={roboto.className}>
<Component {...pageProps} />
</main>
)
}
يمكنك تحديد أوزان و/أو أنماط متعددة باستخدام مصفوفة:
const roboto = Roboto({
weight: ['400', '700'],
style: ['normal', 'italic'],
subsets: ['latin'],
display: 'swap',
})
جيد أن تعرف: استخدم شرطة سفلية (_) لأسماء الخطوط التي تحتوي على كلمات متعددة. على سبيل المثال،
Roboto Mono
يجب استيرادها كـRoboto_Mono
.
تطبيق الخط في <head>
يمكنك أيضًا استخدام الخط بدون غلاف و className
عن طريق حقنه داخل <head>
كما يلي:
import { Inter } from 'next/font/google'
const inter = Inter({ subsets: ['latin'] })
export default function MyApp({ Component, pageProps }) {
return (
<>
<style jsx global>{`
html {
font-family: ${inter.style.fontFamily};
}
`}</style>
<Component {...pageProps} />
</>
)
}
استخدام في صفحة واحدة
لاستخدام الخط في صفحة واحدة، أضفه إلى الصفحة المحددة كما هو موضح أدناه:
import { Inter } from 'next/font/google'
const inter = Inter({ subsets: ['latin'] })
export default function Home() {
return (
<div className={inter.className}>
<p>مرحبًا بالعالم</p>
</div>
)
}
تحديد مجموعة فرعية
يتم تقسيم خطوط جوجل تلقائيًا. هذا يقلل من حجم ملف الخط ويحسن الأداء. ستحتاج إلى تحديد أي من هذه المجموعات الفرعية تريد تحميلها مسبقًا. إذا فشلت في تحديد أي مجموعات فرعية بينما preload
مضبوط على true
، سيؤدي ذلك إلى تحذير.
يمكن القيام بذلك عن طريق إضافته إلى استدعاء الدالة:
const inter = Inter({ subsets: ['latin'] })
اطلع على مرجع واجهة برمجة التطبيقات للخط لمزيد من المعلومات.
استخدام خطوط متعددة
يمكنك استيراد واستخدام خطوط متعددة في تطبيقك. هناك طريقتان يمكنك اتباعهما.
الطريقة الأولى هي إنشاء دالة مساعدة تصدر خطًا، تستورده، وتطبق className
الخاص به حيثما دعت الحاجة. هذا يضمن تحميل الخط مسبقًا فقط عند عرضه:
import { Inter, Roboto_Mono } from 'next/font/google'
export const inter = Inter({
subsets: ['latin'],
display: 'swap',
})
export const roboto_mono = Roboto_Mono({
subsets: ['latin'],
display: 'swap',
})
import { Inter, Roboto_Mono } from 'next/font/google'
export const inter = Inter({
subsets: ['latin'],
display: 'swap',
})
export const roboto_mono = Roboto_Mono({
subsets: ['latin'],
display: 'swap',
})
في المثال أعلاه، سيتم تطبيق Inter
عالميًا، ويمكن استيراد Roboto Mono
وتطبيقه حسب الحاجة.
بدلاً من ذلك، يمكنك إنشاء متغير CSS واستخدامه مع حل CSS المفضل لديك:
html {
font-family: var(--font-inter);
}
h1 {
font-family: var(--font-roboto-mono);
}
في المثال أعلاه، سيتم تطبيق Inter
عالميًا، وسيتم تنسيق أي علامات <h1>
باستخدام Roboto Mono
.
توصية: استخدم خطوط متعددة بحذر لأن كل خط جديد هو مورد إضافي يجب على العميل تنزيله.
الخطوط المحلية
استورد next/font/local
وحدد src
لملف الخط المحلي الخاص بك. نوصي باستخدام الخطوط المتغيرة للحصول على أفضل أداء ومرونة.
import localFont from 'next/font/local'
// يمكن وضع ملفات الخطوط داخل `pages`
const myFont = localFont({ src: './my-font.woff2' })
export default function MyApp({ Component, pageProps }) {
return (
<main className={myFont.className}>
<Component {...pageProps} />
</main>
)
}
إذا كنت ترغب في استخدام ملفات متعددة لعائلة خط واحدة، يمكن أن يكون src
مصفوفة:
const roboto = localFont({
src: [
{
path: './Roboto-Regular.woff2',
weight: '400',
style: 'normal',
},
{
path: './Roboto-Italic.woff2',
weight: '400',
style: 'italic',
},
{
path: './Roboto-Bold.woff2',
weight: '700',
style: 'normal',
},
{
path: './Roboto-BoldItalic.woff2',
weight: '700',
style: 'italic',
},
],
})
اطلع على مرجع واجهة برمجة التطبيقات للخط لمزيد من المعلومات.
مع Tailwind CSS
يمكن استخدام next/font
مع Tailwind CSS من خلال متغير CSS.
في المثال أدناه، نستخدم الخط Inter
من next/font/google
(يمكنك استخدام أي خط من جوجل أو الخطوط المحلية). قم بتحميل خطك باستخدام خيار variable
لتعريف اسم متغير CSS الخاص بك وعيّنه إلى inter
. ثم استخدم inter.variable
لإضافة متغير CSS إلى مستند HTML الخاص بك.
import { Inter } from 'next/font/google'
const inter = Inter({
subsets: ['latin'],
variable: '--font-inter',
})
export default function MyApp({ Component, pageProps }) {
return (
<main className={`${inter.variable} font-sans`}>
<Component {...pageProps} />
</main>
)
}
أخيرًا، أضف متغير CSS إلى إعدادات Tailwind CSS:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./pages/**/*.{js,ts,jsx,tsx}',
'./components/**/*.{js,ts,jsx,tsx}',
'./app/**/*.{js,ts,jsx,tsx}',
],
theme: {
extend: {
fontFamily: {
sans: ['var(--font-inter)'],
mono: ['var(--font-roboto-mono)'],
},
},
},
plugins: [],
}
يمكنك الآن استخدام فئات الأداة font-sans
و font-mono
لتطبيق الخط على عناصرك.
التحميل المسبق
عند استدعاء دالة خط في صفحة من موقعك، لا يكون الخط متاحًا عالميًا ولا يتم تحميله مسبقًا على جميع المسارات. بدلاً من ذلك، يتم تحميل الخط مسبقًا فقط على المسار/المسارات ذات الصلة بناءً على نوع الملف الذي يتم استخدامه فيه:
- إذا كانت صفحة فريدة، يتم تحميلها مسبقًا على المسار الفريد لتلك الصفحة
- إذا كانت في التطبيق المخصص، يتم تحميلها مسبقًا على جميع مسارات الموقع تحت
/pages
إعادة استخدام الخطوط
في كل مرة تستدعي فيها دالة الخط localFont
أو خط جوجل، يتم استضافة هذا الخط كنسخة واحدة في تطبيقك. لذلك، إذا قمت بتحميل نفس دالة الخط في ملفات متعددة، يتم استضافة عدة نسخ من نفس الخط. في هذه الحالة، يوصى بما يلي:
- استدعاء دالة محمل الخط في ملف مشترك واحد
- تصديره كمتغير ثابت
- استيراد المتغير في كل ملف ترغب في استخدام هذا الخط فيه