字体模块

本 API 参考将帮助您理解如何使用 next/font/googlenext/font/local。关于功能特性及用法,请参阅 优化字体 页面。

字体函数参数

具体用法请查阅 Google 字体本地字体

参数font/googlefont/local类型是否必填
srcCross IconCheck Icon字符串或对象数组
weightCheck IconCheck Icon字符串或数组必填/可选
styleCheck IconCheck Icon字符串或数组-
subsetsCheck IconCross Icon字符串数组-
axesCheck IconCross Icon字符串数组-
displayCheck IconCheck Icon字符串-
preloadCheck IconCheck Icon布尔值-
fallbackCheck IconCheck Icon字符串数组-
adjustFontFallbackCheck IconCheck Icon布尔值或字符串-
variableCheck IconCheck Icon字符串-
declarationsCross IconCheck Icon对象数组-

src

字体文件的路径,可以是字符串或对象数组(类型为 Array<{path: string, weight?: string, style?: string}>),相对于调用字体加载器函数的目录。

用于 next/font/local

  • 必填

示例:

  • src:'./fonts/my-font.woff2':其中 my-font.woff2 位于 app 目录下的 fonts 子目录中
  • src:[{path: './inter/Inter-Thin.ttf', weight: '100',},{path: './inter/Inter-Regular.ttf',weight: '400',},{path: './inter/Inter-Bold-Italic.ttf', weight: '700',style: 'italic',},]
  • 如果在 app/page.tsx 中调用字体加载器函数并使用 src:'../styles/fonts/my-font.ttf',则 my-font.ttf 应位于项目根目录的 styles/fonts

weight

字体的 weight,可选值如下:

  • 字符串,值为特定字体可用的权重或 可变字体 的权重范围
  • 若非 可变 Google 字体,可使用权重值数组。仅适用于 next/font/google

用于 next/font/googlenext/font/local

示例:

  • weight: '400':单个权重值的字符串 - 对于 Inter 字体,可选值为 '100''200''300''400''500''600''700''800''900''variable''variable' 为默认值)
  • weight: '100 900':可变字体在 100900 之间的权重范围字符串
  • weight: ['100','400','900']:非可变字体的 3 个可能权重值数组

style

字体的 style,可选值如下:

  • 字符串 ,默认值为 'normal'
  • 若非 可变 Google 字体,可使用样式值数组。仅适用于 next/font/google

用于 next/font/googlenext/font/local

  • 可选

示例:

  • style: 'italic':字符串 - 对于 next/font/google 可以是 normalitalic
  • style: 'oblique':字符串 - 对于 next/font/local 可以是任何值,但通常来自 标准字体样式
  • style: ['italic','normal']next/font/google 的 2 个值数组 - 可选值为 normalitalic

subsets

字体的 subsets,由字符串数组定义,包含您希望 预加载 的每个子集名称。当 preload 选项为 true(默认值)时,通过 subsets 指定的字体将在头部注入链接预加载标签。

用于 next/font/google

  • 可选

示例:

  • subsets: ['latin']:包含 latin 子集的数组

您可以在 Google Fonts 页面上找到字体的所有子集列表。

axes

某些可变字体具有额外的 axes 可以包含。默认情况下,仅包含字体权重以减小文件大小。axes 的可能值取决于特定字体。

用于 next/font/google

  • 可选

示例:

  • axes: ['slnt']:值为 slnt 的数组,适用于 Inter 可变字体,该字体具有额外的 axes此处 所示。您可以在 Google 可变字体页面 上使用筛选器查找字体的其他 axes 值(除 wght 外)

display

字体的 display,可能的字符串 'auto''block''swap''fallback''optional',默认值为 'swap'

用于 next/font/googlenext/font/local

  • 可选

示例:

  • display: 'optional':分配给 optional 值的字符串

preload

布尔值,指定是否应 预加载 字体。默认为 true

用于 next/font/googlenext/font/local

  • 可选

示例:

  • preload: false

fallback

字体无法加载时使用的回退字体。字符串数组,无默认值。

  • 可选

用于 next/font/googlenext/font/local

示例:

  • fallback: ['system-ui', 'arial']:设置回退字体为 system-uiarial 的数组

adjustFontFallback

  • 对于 next/font/google:布尔值,设置是否使用自动回退字体以减少 累积布局偏移 (CLS)。默认为 true
  • 对于 next/font/local:字符串或布尔值 false,设置是否使用自动回退字体以减少 累积布局偏移 (CLS)。可选值为 'Arial''Times New Roman'false。默认为 'Arial'

用于 next/font/googlenext/font/local

  • 可选

示例:

  • adjustFontFallback: false:用于 next/font/google
  • adjustFontFallback: 'Times New Roman':用于 next/font/local

variable

字符串值,定义在使用 CSS 变量方法 应用样式时要使用的 CSS 变量名。

用于 next/font/googlenext/font/local

  • 可选

示例:

  • variable: '--my-font':声明 CSS 变量 --my-font

declarations

字体 描述符 键值对数组,用于进一步定义生成的 @font-face

用于 next/font/local

  • 可选

示例:

  • declarations: [{ prop: 'ascent-override', value: '90%' }]

应用样式

您可以通过三种方式应用字体样式:

className

返回加载字体的只读 CSS className,可传递给 HTML 元素。

<p className={inter.className}>Hello, Next.js!</p>

style

返回加载字体的只读 CSS style 对象,可传递给 HTML 元素,包括 style.fontFamily 以访问字体家族名称和回退字体。

<p style={inter.style}>Hello World</p>

CSS 变量

如果您希望在外部样式表中设置样式并指定其他选项,请使用 CSS 变量方法。

除了导入字体外,还需导入定义 CSS 变量的 CSS 文件,并按如下方式设置字体加载器对象的 variable 选项:

import { Inter } from 'next/font/google'
import styles from '../styles/component.module.css'

const inter = Inter({
  variable: '--font-inter',
})

要使用字体,请将文本父容器的 className 设置为字体加载器的 variable 值,并将文本的 className 设置为外部 CSS 文件中的 styles 属性。

<main className={inter.variable}>
  <p className={styles.text}>Hello World</p>
</main>

component.module.css CSS 文件中定义 text 选择器类如下:

styles/component.module.css
.text {
  font-family: var(--font-inter);
  font-weight: 200;
  font-style: italic;
}

在上面的示例中,文本 Hello World 使用 Inter 字体和生成的字体回退进行样式设置,并应用 font-weight: 200font-style: italic

使用字体定义文件

每次调用 localFont 或 Google 字体函数时,该字体将作为应用程序中的一个实例托管。因此,如果需要在多个位置使用相同的字体,应在一个地方加载它,并在需要的地方导入相关的字体对象。这可以通过字体定义文件实现。

例如,在应用目录的根目录下创建一个 styles 文件夹,并在其中创建 fonts.ts 文件。

然后,按如下方式指定字体定义:

import { Inter, Lora, Source_Sans_3 } from 'next/font/google'
import localFont from 'next/font/local'

// 定义可变字体
const inter = Inter()
const lora = Lora()
// 定义非可变字体的 2 个权重
const sourceCodePro400 = Source_Sans_3({ weight: '400' })
const sourceCodePro700 = Source_Sans_3({ weight: '700' })
// 定义自定义本地字体,GreatVibes-Regular.ttf 存储在 styles 文件夹中
const greatVibes = localFont({ src: './GreatVibes-Regular.ttf' })

export { inter, lora, sourceCodePro400, sourceCodePro700, greatVibes }

现在可以在代码中使用这些定义,如下所示:

import { inter, lora, sourceCodePro700, greatVibes } from '../styles/fonts'

export default function Page() {
  return (
    <div>
      <p className={inter.className}>使用 Inter 字体的 Hello world</p>
      <p style={lora.style}>使用 Lora 字体的 Hello world</p>
      <p className={sourceCodePro700.className}>
        使用 Source_Sans_3 字体(权重 700)的 Hello world
      </p>
      <p className={greatVibes.className}>Great Vibes 字体的标题</p>
    </div>
  )
}

为了更轻松地在代码中访问字体定义,可以在 tsconfig.jsonjsconfig.json 文件中定义路径别名,如下所示:

tsconfig.json
{
  "compilerOptions": {
    "paths": {
      "@/fonts": ["./styles/fonts"]
    }
  }
}

现在可以按如下方式导入任何字体定义:

import { greatVibes, sourceCodePro400 } from '@/fonts'

版本变更

版本变更内容
v13.2.0@next/font 重命名为 next/font。不再需要安装。
v13.0.0新增 @next/font

On this page