字体模块
此 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
的一个包含两个值的数组 - 这些值来自normal
和italic
subsets
由字符串值数组定义的字体 subsets
,其中包含每个您希望 预加载 的子集的名称。当 preload
选项为真(默认为真)时,通过 subsets
指定的字体将在头部注入一个链接预加载标签。
用于 next/font/google
- 可选
示例
subsets: ['latin']
:包含子集latin
的数组
您可以在 Google Fonts 页面上找到您字体的所有子集列表。
axes
一些可变字体具有可以包含的额外 axes
。默认情况下,仅包含字体粗细以减小文件大小。axes
的可能值取决于具体的字体。
用于 next/font/google
- 可选
示例
axes: ['slnt']
:包含值为slnt
的数组,用于Inter
可变字体,该字体具有slnt
作为附加的axes
,如 此处 所示。您可以通过使用 Google 可变字体页面 上的过滤器并查找除wght
之外的轴来找到您字体的可能axes
值。
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
:一个布尔值,用于设置是否应使用自动回退字体以减少 累积布局偏移。默认为true
。 - 对于
next/font/local
:一个字符串或布尔值false
,用于设置是否应使用自动回退字体以减少 累积布局偏移。可能的值为'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 元素。
<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
选择器类,如下所示
.text {
font-family: var(--font-inter);
font-weight: 200;
font-style: italic;
}
在上面的示例中,文本“Hello World”使用 Inter
字体和生成的字体回退进行样式设置,其中 font-weight: 200
和 font-style: italic
。
使用字体定义文件
每次调用 localFont
或 Google 字体函数时,该字体将在您的应用程序中作为单个实例托管。因此,如果您需要在多个位置使用相同的字体,则应在一个位置加载它,并在需要的地方导入相关的字体对象。这可以通过使用字体定义文件来完成。
例如,在应用程序目录根目录下的 styles
文件夹中创建一个 fonts.ts
文件。
然后,按如下方式指定您的字体定义
import { Inter, Lora, Source_Sans_3 } from 'next/font/google'
import localFont from 'next/font/local'
// define your variable fonts
const inter = Inter()
const lora = Lora()
// define 2 weights of a non-variable font
const sourceCodePro400 = Source_Sans_3({ weight: '400' })
const sourceCodePro700 = Source_Sans_3({ weight: '700' })
// define a custom local font where GreatVibes-Regular.ttf is stored in the styles folder
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}>Hello world using Inter font</p>
<p style={lora.style}>Hello world using Lora font</p>
<p className={sourceCodePro700.className}>
Hello world using Source_Sans_3 font with weight 700
</p>
<p className={greatVibes.className}>My title in Great Vibes font</p>
</div>
)
}
为了更容易地在代码中访问字体定义,您可以在 tsconfig.json
或 jsconfig.json
文件中定义路径别名,如下所示
{
"compilerOptions": {
"paths": {
"@/fonts": ["./styles/fonts"]
}
}
}
您现在可以按如下方式导入任何字体定义
import { greatVibes, sourceCodePro400 } from '@/fonts'
版本变更
版本 | 变更 |
---|---|
v13.2.0 | @next/font 重命名为 next/font 。不再需要安装。 |
v13.0.0 | 添加了 @next/font 。 |
这有帮助吗?