字体模块
本 API 参考将帮助您理解如何使用 next/font/google
和 next/font/local
。关于功能特性及用法,请参阅 优化字体 页面。
字体函数参数
参数 | font/google | font/local | 类型 | 是否必填 |
---|---|---|---|---|
src | 字符串或对象数组 | 是 | ||
weight | 字符串或数组 | 必填/可选 | ||
style | 字符串或数组 | - | ||
subsets | 字符串数组 | - | ||
axes | 字符串数组 | - | ||
display | 字符串 | - | ||
preload | 布尔值 | - | ||
fallback | 字符串数组 | - | ||
adjustFontFallback | 布尔值或字符串 | - | ||
variable | 字符串 | - | ||
declarations | 对象数组 | - |
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/google
和 next/font/local
- 如果使用的字体不是 可变字体,则为必填
示例:
weight: '400'
:单个权重值的字符串 - 对于Inter
字体,可选值为'100'
、'200'
、'300'
、'400'
、'500'
、'600'
、'700'
、'800'
、'900'
或'variable'
('variable'
为默认值)weight: '100 900'
:可变字体在100
到900
之间的权重范围字符串weight: ['100','400','900']
:非可变字体的 3 个可能权重值数组
style
字体的 style
,可选值如下:
- 字符串 值,默认值为
'normal'
- 若非 可变 Google 字体,可使用样式值数组。仅适用于
next/font/google
用于 next/font/google
和 next/font/local
- 可选
示例:
style: 'italic'
:字符串 - 对于next/font/google
可以是normal
或italic
style: 'oblique'
:字符串 - 对于next/font/local
可以是任何值,但通常来自 标准字体样式style: ['italic','normal']
:next/font/google
的 2 个值数组 - 可选值为normal
和italic
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/google
和 next/font/local
- 可选
示例:
display: 'optional'
:分配给optional
值的字符串
preload
布尔值,指定是否应 预加载 字体。默认为 true
。
用于 next/font/google
和 next/font/local
- 可选
示例:
preload: false
fallback
字体无法加载时使用的回退字体。字符串数组,无默认值。
- 可选
用于 next/font/google
和 next/font/local
示例:
fallback: ['system-ui', 'arial']
:设置回退字体为system-ui
或arial
的数组
adjustFontFallback
- 对于
next/font/google
:布尔值,设置是否使用自动回退字体以减少 累积布局偏移 (CLS)。默认为true
。 - 对于
next/font/local
:字符串或布尔值false
,设置是否使用自动回退字体以减少 累积布局偏移 (CLS)。可选值为'Arial'
、'Times New Roman'
或false
。默认为'Arial'
。
用于 next/font/google
和 next/font/local
- 可选
示例:
adjustFontFallback: false
:用于next/font/google
adjustFontFallback: 'Times New Roman'
:用于next/font/local
variable
字符串值,定义在使用 CSS 变量方法 应用样式时要使用的 CSS 变量名。
用于 next/font/google
和 next/font/local
- 可选
示例:
variable: '--my-font'
:声明 CSS 变量--my-font
declarations
字体 描述符 键值对数组,用于进一步定义生成的 @font-face
。
用于 next/font/local
- 可选
示例:
declarations: [{ prop: 'ascent-override', value: '90%' }]
应用样式
您可以通过三种方式应用字体样式:
className
返回加载字体的只读 CSS className
,可传递给 HTML 元素。
style
返回加载字体的只读 CSS style
对象,可传递给 HTML 元素,包括 style.fontFamily
以访问字体家族名称和回退字体。
CSS 变量
如果您希望在外部样式表中设置样式并指定其他选项,请使用 CSS 变量方法。
除了导入字体外,还需导入定义 CSS 变量的 CSS 文件,并按如下方式设置字体加载器对象的 variable
选项:
要使用字体,请将文本父容器的 className
设置为字体加载器的 variable
值,并将文本的 className
设置为外部 CSS 文件中的 styles
属性。
在 component.module.css
CSS 文件中定义 text
选择器类如下:
在上面的示例中,文本 Hello World
使用 Inter
字体和生成的字体回退进行样式设置,并应用 font-weight: 200
和 font-style: italic
。
使用字体定义文件
每次调用 localFont
或 Google 字体函数时,该字体将作为应用程序中的一个实例托管。因此,如果需要在多个位置使用相同的字体,应在一个地方加载它,并在需要的地方导入相关的字体对象。这可以通过字体定义文件实现。
例如,在应用目录的根目录下创建一个 styles
文件夹,并在其中创建 fonts.ts
文件。
然后,按如下方式指定字体定义:
现在可以在代码中使用这些定义,如下所示:
为了更轻松地在代码中访问字体定义,可以在 tsconfig.json
或 jsconfig.json
文件中定义路径别名,如下所示:
现在可以按如下方式导入任何字体定义:
版本变更
版本 | 变更内容 |
---|---|
v13.2.0 | @next/font 重命名为 next/font 。不再需要安装。 |
v13.0.0 | 新增 @next/font 。 |