如何使用字体

next/font 模块能自动优化您的字体,并移除外部网络请求以提升隐私性和性能。

它包含内置的自托管功能,适用于任何字体文件。这意味着您可以无布局偏移地最优加载网页字体。

要开始使用 next/font,请从 next/font/localnext/font/google 导入,调用该函数并传入适当的选项,然后为您想要应用字体的元素设置 className。例如:

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>
  )
}

字体作用域限定于它们所使用的组件。要将字体应用于整个应用程序,请将其添加到 根布局 (Root Layout)

Google 字体

您可以自动自托管任何 Google 字体。字体作为静态资源存储,并从与您的部署相同的域名提供服务,这意味着用户访问您的网站时,浏览器不会向 Google 发送任何请求。

要开始使用 Google 字体,请从 next/font/google 导入您选择的字体:

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>
  )
}

我们推荐使用 可变字体 (variable fonts) 以获得最佳性能和灵活性。但如果无法使用可变字体,您需要指定一个权重:

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 文件夹中。例如:

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',
    },
  ],
})

On this page