如何使用字体
next/font
模块会自动优化您的字体,并消除外部网络请求,以提高隐私和性能。
它包含任何字体文件的内置自托管。这意味着您可以以最佳方式加载网络字体,而不会出现布局偏移。
要开始使用 next/font
,请从 next/font/local
或 next/font/google
导入它,将其作为函数调用并附带适当的选项,然后设置要应用字体的元素的 className
。例如:
app/layout.tsx
import { Geist } from 'next/font/google'
const geist = Geist({
subsets: ['latin'],
})
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<html lang="en" className={geist.className}>
<body>{children}</body>
</html>
)
}
字体作用域仅限于使用它们的组件。要将字体应用于整个应用程序,请将其添加到根布局中。
Google 字体
您可以自动自托管任何 Google 字体。字体作为静态资产存储,并从与您的部署相同的域提供,这意味着当用户访问您的网站时,浏览器不会向 Google 发送任何请求。
要开始使用 Google 字体,请从 next/font/google
导入您选择的字体
app/layout.tsx
import { Geist } from 'next/font/google'
const geist = Geist({
subsets: ['latin'],
})
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en" className={geist.className}>
<body>{children}</body>
</html>
)
}
我们建议使用可变字体以获得最佳性能和灵活性。但是,如果您不能使用可变字体,则需要指定一个字重。
app/layout.tsx
import { Roboto } from 'next/font/google'
const roboto = Roboto({
weight: '400',
subsets: ['latin'],
})
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en" className={roboto.className}>
<body>{children}</body>
</html>
)
}
本地字体
要使用本地字体,请从 next/font/local
导入您的字体,并指定本地字体文件的 src
。字体可以存储在 public
文件夹中,也可以与 app
文件夹并置。例如:
app/layout.tsx
import localFont from 'next/font/local'
const myFont = localFont({
src: './my-font.woff2',
})
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en" className={myFont.className}>
<body>{children}</body>
</html>
)
}
如果要为一个字体系列使用多个文件,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',
},
],
})
这有帮助吗?