跳到内容
App Router入门字体优化

字体优化

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

它为任何字体文件提供了内置的自托管。这意味着你可以以最佳方式加载网络字体,且不会出现布局偏移。

要开始使用 next/font,请从next/font/localnext/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',
    },
  ],
})

API 参考

请参阅 API 参考,了解 Next.js 字体的完整功能集