0

0

Next.js 13+ 中集成 Google Fonts 的最佳实践

花韻仙語

花韻仙語

发布时间:2025-10-04 11:20:21

|

896人浏览过

|

来源于php中文网

原创

Next.js 13+ 中集成 Google Fonts 的最佳实践

Next.js 13 及更高版本引入了优化的字体加载机制,彻底改变了 Google Fonts 的集成方式。传统的 标签或 @import 方法不再推荐。本文将详细指导您如何利用 next/font/google 模块,以高性能、无布局偏移的方式在 Next.js 13+ 项目中无缝引入和应用 Google Fonts。

在 next.js 13 之前,开发者通常通过在 _document.js 或 _app.js 文件中添加 标签,或者在全局 css 文件中使用 @import 规则来引入 google fonts。然而,随着 next.js 13 引入 app router 架构以及对性能和用户体验的更高要求,这些传统方法已不再适用或不再推荐。next.js 官方提供了 @next/font 模块,旨在解决字体加载过程中可能出现的布局偏移(cls)问题,并提供更优化的字体加载体验。

Next.js 13+ 推荐方案:使用 @next/font/google

@next/font/google 是 Next.js 13 专为 Google Fonts 设计的内置模块。它会在构建时自动下载字体文件,并将其托管在您的应用程序中,从而消除了对外部网络请求的依赖。此外,它还能够自动处理字体回退,减少布局偏移,并优化字体加载性能。

步骤一:在 app/layout.js 中配置字体

在 Next.js 13 的 App Router 架构中,app/layout.js 是定义全局布局和元数据的地方。我们在这里导入并配置 Google Fonts。

  1. 导入字体: 从 next/font/google 中导入您想要使用的特定 Google Font。例如,要使用 Poppins 字体,您可以这样导入:

    import { Poppins } from 'next/font/google';
  2. 初始化字体对象: 调用导入的字体函数,并传入配置选项。这些选项允许您定义字体的子集、显示方式、权重以及一个 CSS 变量名。

    • subsets: 指定要加载的字体子集,例如 ['latin']。这有助于减小字体文件大小。
    • display: 定义字体加载策略。'swap' 是一个常用选项,它允许浏览器在字体加载完成前使用系统字体作为回退,加载完成后再替换为 Google Font,从而避免文本不可见(FOIT)的问题。
    • variable: 定义一个 CSS 变量名,您可以通过这个变量在 CSS 中引用字体。这是一个非常实用的特性,能够提供更灵活的字体管理。
    • weight: 指定要加载的字体粗细(字重)。您可以提供一个数组来加载多个字重,例如 ['100', '200', ..., '900']。
    const poppins = Poppins({
      subsets: ['latin'],
      display: 'swap',
      variable: '--font-poppins', // 定义一个CSS变量
      weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900']
    });
  3. 将字体变量应用到 html> 标签: 在 RootLayout 组件中,将初始化后的字体对象的 variable 属性值作为 className 添加到 标签上。这样,字体变量将在整个应用程序中全局可用。

    export const metadata = {
      title: '页面标题',
      description: '页面描述',
    }
    
    export default function RootLayout({ children }) {
      return (
        // 将字体变量应用到HTML标签
        
          {children}
        
      )
    }

完整 app/layout.js 示例:

import { Poppins } from 'next/font/google';

// 初始化 Poppins 字体,配置子集、显示方式、CSS变量和字重
const poppins = Poppins({
  subsets: ['latin'],
  display: 'swap',
  variable: '--font-poppins', // 定义CSS变量名
  weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900']
});

export const metadata = {
  title: '我的 Next.js 应用',
  description: '这是一个使用 Next.js 13+ 构建的应用示例',
}

export default function RootLayout({ children }) {
  return (
    // 将字体变量作为 className 添加到  标签
    
      {children}
    
  )
}

步骤二:在 CSS 中使用字体变量

一旦您在 app/layout.js 中配置了字体变量,就可以在任何 CSS 文件(无论是全局 CSS、模块化 CSS 还是 Tailwind CSS)中通过 var() 函数引用它。

/* 例如,在 global.css 或任何组件的 CSS 模块中 */
body {
  font-family: var(--font-poppins), sans-serif; /* 使用定义的CSS变量 */
}

h1 {
  font-family: var(--font-poppins), serif;
  font-weight: 700; /* 可以直接使用字重 */
}

.custom-text {
  font-family: var(--font-poppins);
  font-weight: 500;
  font-style: italic;
}

在上述示例中,var(--font-poppins) 会被 Next.js 自动替换为加载的 Poppins 字体。添加 sans-serif 或 serif 作为回退字体是一个良好的实践,以确保在字体加载失败时页面仍能保持可读性。

注意事项与最佳实践

  • 性能优势: next/font 模块通过在构建时下载字体并将其作为静态资源服务,避免了运行时对 Google Fonts API 的额外网络请求,从而显著提升了页面加载性能。

    人民网AIGC-X
    人民网AIGC-X

    国内科研机构联合推出的AI生成内容检测工具

    下载
  • 布局偏移(CLS)优化: display: 'swap' 选项以及 Next.js 内部的优化机制,能够有效减少字体加载导致的布局偏移,提升用户体验。

  • CSS 变量的灵活性: 使用 CSS 变量 (--font-poppins) 使得在整个项目中管理和切换字体变得非常灵活和方便。

  • 多字体加载: 如果您需要加载多种 Google Fonts,只需在 app/layout.js 中重复导入和初始化过程,为每种字体定义不同的 CSS 变量即可。

  • 本地字体: 对于自定义的本地字体,Next.js 提供了 next/font/local 模块,其使用方式与 next/font/google 类似,可以实现同样的性能优化。

  • Tailwind CSS 集成: 如果您使用 Tailwind CSS,可以在 tailwind.config.js 中扩展主题,将字体变量映射到 Tailwind 的 font-family 实用类中,例如:

    // tailwind.config.js
    /** @type {import('tailwindcss').Config} */
    module.exports = {
      theme: {
        extend: {
          fontFamily: {
            poppins: ['var(--font-poppins)', 'sans-serif'],
          },
        },
      },
      plugins: [],
    };

    然后在组件中就可以这样使用:

    Hello World

总结

Next.js 13+ 通过 @next/font/google 模块提供了一种现代化、高性能且易于管理的 Google Fonts 集成方案。它不仅解决了传统方法中存在的性能和布局偏移问题,还通过 CSS 变量提供了极大的灵活性。遵循本文介绍的步骤,您将能够轻松地在 Next.js 13+ 项目中引入并应用 Google Fonts,为您的用户提供更流畅、更美观的视觉体验。告别繁琐的 标签和 @import 规则,拥抱 Next.js 官方推荐的字体优化策略吧。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5306

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

481

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

218

2023.09.14

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

219

2023.09.21

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 24.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号