Next.js 字体优化:添加自定义字体和 Google 字体

我们在 Web 项目中加载字体的方式可以成就或破坏用户体验。使用系统字体,我们可以保证文本将尽早呈现。但我们可能并不想要这些字体类型,更重要的是,它们在操作系统之间并不一致。

另一方面,Web 字体允许我们保持一致的外观。添加网络字体可以是一项简单的任务。但是,如果我们关心性能优化,它也会变得乏味。

与由 Google Fonts 等字体交付服务托管的网络字体相关的一个问题是外部网络请求的成本。虽然我们可以通过自托管字体来大大降低产生的成本,如何在 JPEG / GIF 或 PNG 图像中隐藏文件但我们也有布局转移的问题需要处理。

Next.js v13 引入了一个名为帮助抽象优化字体的复杂性的字体系统。本课介绍如何使用此字体系统在 Next.js 项目中添加自定义字体和 Google 字体如何使用 TrueCrypt 加密计算机数据,以及如何优化字体加载体验。@next/font

跳跃前进:

  • 在 Next.js 中添加字体

  • 系统如何帮助 Next.js 中的字体优化@next/font

  • 添加谷歌字体@next/font

  • 在 Next.js 中添加自定义字体

  • 使用 Tailwind CSS 将字体添加到 Next.js

  • Chrome 浏览器中的一个问题display: optional

请在此处查看演示项目。Kiwi 是一款很酷的应用程序监控软件和自动化工具您可以与项目交互以查看页面元素如何呈现不同的字体。这是项目源代码

现在,让我们开始吧。

在 Next.js 中添加字体

在 Next.js 应用程序中添加诸如 Google Fonts 之类的 Web 字体就像<link>将字体交付服务生成的标签嵌入到文件Head的组件中一样简单。如何清除 Windows Vista 和 Windows 7 中的当前打印队列pages/_document.js

创建您的项目

如果您没有 Next.js 项目,请先使用以下命令创建一个:

npx create-next-app@latest nextjs-fonts 
cd nextjs-fonts

然后,使用npm run dev.

Home现在,在文件中添加以下组件:pages/index.js

export default function Home() {
  return (
    <div>
      <h1>Home page</h1>
    </div>
  );
}

让我们通过将字体交付服务提供的标签添加到文件的组件中来实现来自 Google Fonts 的名为“ Dancing Script ”的可变字体,如何解决我的电脑缺少 CD 或 DVD 驱动器的问题如下所示:<link>Headpages/_document.js

<Head>
  {/* preconnect scripts... */}
  <link
    href="https://fonts.googleapis.com/css2?family=Dancing+Script:[email protected]&display=swap"
    rel="stylesheet"
  />
</Head>

之后,我们将更新字体系列:styles/globals.css

body {
  /* ... */
  font-family: 'Dancing Script', cursive;
}

输出如下所示:

这很容易,对吧?让我们在下一节中看看这个实现的问题。

字体渲染过程

理想情况下,当网络字体应用于网络文档时如何在 Windows 计算机中备份驱动程序浏览器将在解析 HTML 后开始下载字体。这发生在文本呈现之前。

虽然我们希望字体能够快速加载和呈现,如何在 Windows 和 Mac OS 上查找计算机名称但情况并非总是如此。加载字体可能需要额外几秒钟,尤其是当它涉及外部请求时,例如 Google 字体。

请参阅下面的请求 URL:

因此,在字体下载完成之前,浏览器会退回到使用系统字体。

正如我们在 Google 字体中看到的那样使用 Windows 任务计划程序安排磁盘清理URL 中的参数将触发指示浏览器使用后备字体的命令。网络字体完全下载后,它会交换字体。display=swapfont-display: swap

当字体改变时,那个切换时刻会导致文本布局发生变Belarc Advisor 生成详细的 PC 报告。这种效果称为无样式文本的闪现,也称为 FOUT。

我们可以使用三种策略来改善加载体验:

  1. 通过从我们的域本地提供字体来消除外部网络请求

  1. 用于防止布局偏移,同时还预加载字体font-display: optional

  1. 在字体之间切换时使用 CSS属性减少布局偏移size-adjust

尽管我们可以手动实施这些优化策略,如何使用 AVG Rescue CD 清除病毒和间谍软件我们将了解 Next.js 13 如何通过系统简化流程。@next/font

系统如何帮助 Next.js 中的字体优化@next/font

该系统是 Next.js 13 中引入的众多强大功能之一。该字体系统显着简化了字体优化。它通过将 Google 字体与其他 Web 组件(如 HTML 和 CSS 文件)一起部署,自动托管任何 Google 字体。@next/font

由于浏览器不涉及外部请求,因此加载时间更快。它实施了一种策略,可防止布局偏移或使用CSS属性显着降低影响。size-adjust

安装@next/font

在 Next.js 中作为单独的包出现,因此它不会膨胀核心。让我们在我们的项目中安装它:@next/font

npm install @next/font

请确保您使用的是 Next.js v13 或更新版本。

添加谷歌字体@next/font

Web 字体,包括来自 Google Fonts 的字体在 Windows 中使用键盘快捷键启动 Chrome – 指导技术可以是可变字体或非可变字体。可变字体具有将多种字体变体集成到单个文件中的优点。Next.js 推荐这种类型的字体而不是非可变类型。那么,让我们从这里开始吧。

在单个页面上添加字体

来自 Google Fonts 的 Dancing Script是一种可变字体。如何使用个人重命名器高效地批量重命名文件如果您之前在我们讨论<link>标签方法时将此字体添加到您的项目中,请确保在继续之前将其删除。

现在,让我们使用系统加载 Dancing Script。在文件中,让我们将字体作为函数导入并创建它的新实例:@next/fontpages/index.js@next/font/google

import { Dancing_Script } from '@next/font/google';
const dancingScript = Dancing_Script();
console.log(dancingScript);

export default function Home() {
  return (
    // ...
  );
}

在代码中,我们将字体实例分配给一个dancingScript变量并记录它以查看它返回的内容。如果我们保存文件并重新加载页面使用 JPGFileBinder 轻松隐藏 JPEG 图像中的文件我们应该会在浏览器开发人员工具面板和终端中看到返回的对象:

字体加载器返回一个对象,其中包含我们可以用来应用字体样式的选项。

应用字体样式

如上所示,返回的对象包含className属性和一个style我们可以用来应用字体的对象。使用className大伸展提醒提示您从计算机上休息一下我们可以将字体应用于元素,如下所示:

export default function Home() {
  return (
    <div>
      <h1 className={dancingScript.className}>Home page</h1>
    </div>
  );
}

我们可以保存文件并重新启动开发服务器。

如果我们检查前端,我们应该看到应用的字体。通用查看器:所有文件扩展名的高级文件查看器但是,由于 Google Chrome 的行为方式,可能会应用后备字体。

出于优化目的,每种字体都应用了一个属性。默认情况下,应用到系统字体的值是. 这意味着如果字体在短时间内不可用,如何解决 Windows 7 中的睡眠问题将使用后备字体并且不会发生交换。font-display@next/fontfont-display:optional

我们可以指定一个值以在完成加载后立即切换到字体,如下所示:font-display:swap

const dancingScript = Dancing_Script({ display: 'swap' });

这应该工作。但是,在某些情况下,我们可能会注意到轻微的变化。

出于这个原因,我们将使用默认属性,在 Windows 中更改外部 USB 的驱动器号同时预加载字体,这样我们就可以省略转换。这种方法产生最有效的结果。display: optional

要预加载字体,我们必须将其子集化为所需的字符——例如,latin. 所以,让我们通过subsets选项添加一个子集:

const dancingScript = Dancing_Script({ subsets: ['latin'] });

此选项将从网络字体中去除不需要的语言,使用 ReadyBoost 增强您的 Windows 内存并加速 PC并确保在元素中添加所需语言的预加载链接<head>。如果我们保存文件,我们应该看到注入的链接:

预加载提示浏览器应该安排字体提前下载,Next.js 将确保资源可供使用。

有了这个添加,如何使用 Syncback 备份、同步和恢复数据字体现在应该也适用于 Chrome 浏览器。下图还显示请求是在我们的基础架构内,而不是来自交付服务:

请记住,有时,默认设置可能会导致 Chrome 浏览器出现问题。应用的字体可能会在导航离开后恢复为回退,直到我们手动刷新 chrome 选项卡使用 Syncback 同步 PC 上的文件和文件夹我们将在本课稍后讨论这个问题,并学习如何克服它。display: optional@next/font

添加多种字体

使用添加多个 Next.js Wizmouse 可让您在任何窗口上滚动而无需单击它字体就像定义多个字体实例并将自动生成的类应用于文档元素一样简单:@next/font

import { Dancing_Script, Oswald } from '@next/font/google';

const dancingScript = Dancing_Script({ subsets: ['latin'] });
const oswald = Oswald({ subsets: ['latin'] });

export default function Home() {
  return (
    <div className={oswald.className}>
      <h1 className={dancingScript.className}>Home page</h1>
      <p>This paragraph uses another font</p>
    </div>
  );
}

在上面的代码中,我们Oswald从 Google 导入了一个可变字体,并将其应用于包装元素,使其可用于子元素。包装内的段落将继承字体使用 F.lux 按一天中的时间调整显示器颜色和亮度同时,标题元素上的字体将覆盖包装字体。

请参阅下面的输出:

使用style道具

我们还可以使用style从字体加载器返回的选项通过属性应用字体style。使用 Windows Backup & Restore Center 备份数据指南以下代码使用该style选项将字体应用于包装器元素:

export default function Home() {
  return (
    <div style={oswald.style}>
      <h1 className={dancingScript.className}>Home page</h1>
      <p>This paragraph uses another font</p>
    </div>
  );
}

上面的代码会给我们和以前一样的结果。

固定字体

与可变字体不同,非可变字体需要一个weight选项。如何将 Windows 时钟与 Internet 时间服务器同步可以weight是字符串或值数组。

Merriweather 是不变字体的一个示例,它也可以通过 Google Fonts 获得。让我们从导入它开始:

import {
  // ...
  Merriweather,
} from '@next/font/google';

然后,weight向字体实例添加一个必需的选项,并将生成的类应用于文档元素:

const merriweather = Merriweather({
  weight: ['300', '400', '700'],
  style: ['normal', 'italic'],
  subsets: ['latin'],
});

export default function Home() {
  return (
    // ...
    <p className={merriweather.className}>
      This text uses a non variable font
    </p>
    // ...
  );
}

我们还在style字体实例中添加了一些可选值。保存文件,字体应适用。

添加全局字体样式

要在整个 Web 文档中应用一种字体,如何在 Windows 中使用 NSLookup 命令查找域的 IP 地址我们将在文件中导入字体并将生成的类传递给包装器元素,如下所示:pages/_app.jsComponent

import { Raleway } from '@next/font/google';
const raleway = Raleway({ subsets: ['latin'] });

function MyApp({ Component, pageProps }) {
  return (
    <div className={raleway.className}>
      <Component {...pageProps} />
    </div>
  );
}

export default MyApp;

在上面的代码中,我们导入了一种Raleway字体,如何创建 Windows 密码重设盘也是一种可变字体。因此,在配置中添加权重选项是可选的。

在注入字体<head>

另一种在文档中应用字体的方法是将字体注入到<head>. 在文件中,延长笔记本电脑电池寿命的 17 个有用技巧我们可以使用之前的标签来应用全局字体:pages/_app.js<style>Component

function MyApp({ Component, pageProps }) {
  return (
    <>
      <style jsx global>{`
        html {
          font-family: ${raleway.style.fontFamily};
        }
      `}</style>
      <Component {...pageProps} />
    </>
  );
}

export default MyApp;

请记住,我们可以从对象访问字体系列style。

使用 CSS 变量语法声明全局字体

CSS 变量的语法提供了在样式表中声明多种字体的灵活性。如何在 PHOTOSHOP 中反转选择下面的代码在文件中导入两种不同的字体,然后我们用它们来声明全局 CSS 变量:pages/_app.js

import { Raleway, IBM_Plex_Sans } from '@next/font/google';

const raleway = Raleway({ subsets: ['latin'] });
const ibmSans = IBM_Plex_Sans({
  weight: '700',
  subsets: ['latin'],
});

function MyApp({ Component, pageProps }) {
  return (
    <>
      <style jsx global>{`
        :root {
          --raleway-font: ${raleway.style.fontFamily};
          --ibmSans-font: ${ibmSans.style.fontFamily};
        }
      `}</style>
      <Component {...pageProps} />
    </>
  );
}

export default MyApp;

代码中的伪类将选择根元素——即.:root<html>

现在,我们可以在 CSS 文件中应用 CSS 变量。如何在 Photoshop 中反转选区以下代码应用文件中的变量:styles/globals.css

body {
  font-family: var(--raleway-font);
}

h1, h2, h3 {
  font-family: var(--ibmSans-font);
}

variable关键选项

在创建字体实例时,我们还可以添加一个variable键,Photoshop 中反转选择的快捷方式是什么?让我们声明一个 CSS 变量。这个选项让我们可以轻松地将字体与 Tailwind CSS 和 CSS 模块一起使用,而无需使用全局<style>语法。

以下代码声明了一个通过key 选项调用的 CSS 变量:--antonio-fontvariable

const antonio = Antonio({
  subsets: ['latin'],
  variable: '--antonio-font',
});

如果我们记录结果,NVIDIA 控制面板无法打开:打开它的快速步骤我们应该看到返回的对象包含一个variable允许我们访问字体的属性:

className我们现在可以通过容器元素上的属性应用变量名。如何修复 NVIDIA 控制面板在 Windows 上无法打开如果我们在文件中声明一个全局字体,包装器应该如下所示:pages/_app.jsComponent

<div className={antonio.variable}>
  <Component {...pageProps} />
</div>

从这里开始,我们可以将字体与 Tailwind 一起使用——正如您将在本课后面看到的那样——或与 CSS 模块一起使用。对于 CSS 模块如何修复 Nvidia 控制面板在 2023 年无法打开假设我们有一个About使用该模块的页面组件,如下所示

import styles from './About.module.css';

const About = () => {
  return (
    <div>
      <h1>About page</h1>
      <p className={styles.text}>This is about page content</p>
    </div>
  );
};

export default About;

我们可以使用之前声明的 CSS 变量来访问文件中的字体,如下所示:About.module.css

.text {
  font-family: var(--antonio-font);
  font-style: italic;
}

在 Next.js 中添加自定义字体

在某些场景下,我们要在 Next.js 中使用的字体可能不是来自 Google Fonts。相反,它可能是我们创建的自定义字体、Nvidia 控制面板未打开:如何手动强制打开它购买的字体或从其他字体站点下载的字体。

我们可以通过使用. 在本节中,我们将通过从 Font Squirrel 下载名为Cooper Hewitt 的字体来演示如何执行此操作。@next/font/local

Cooper Hewitt 字体没有采用更现代且压缩得更好的格式。全面修复 NVIDIA 控制面板无法在 Windows 10/8/7 中打开因此,我们的第一步是使用Font S quirrel W ebfont G生成器对其进行转换。之后,我们将在项目文件夹中添加字体的粗细变化:.woff2boldnormalpublic/fonts

使用本地配置的字体

就像在 Next.js 中使用 Google Fonts 一样,NVIDIA 控制面板无法打开(已解决)我们可以在整个文档或特定页面上加载本地字体。要在站点范围内加载本地字体,我们将从文件中导入字体加载器:@next/font/localpages/_app.js

import localFont from '@next/font/local';

之后,我们将定义一个新实例,我们将src本地字体文件的 指定为对象数组:

const cooper = localFont({
  src: [
    {
      path: '../public/fonts/cooperhewitt-book-webfont.woff2',
      weight: '400',
    },
    {
      path: '../public/fonts/cooperhewitt-bold-webfont.woff2',
      weight: '700',
    },
  ],
});

每个对象代表特定粗细的字体。如何修复 NVIDIA 控制面板崩溃/无法打开如果我们使用可变字体,我们可以改为将 the 指定src为字符串,如下所示:

const variableFont = localFont({ src: '../public/fonts/my-variable-font.woff2' });

从这一点来看,我们如何应用字体样式与前面讨论的用于 Google Fonts 的方法相同已解决:NVIDIA 控制面板在 Windows 10 更新 2023 后无法打开我们可以使用语法className、style或 CSS 变量。

让我们使用以下语法为全局本地字体声明一个 CSS 变量<style>:

function MyApp({ Component, pageProps }) {
  return (
    <>
      <style jsx global>{`
        :root {
          /* ... */
          --cooper-font: ${cooper.style.fontFamily};
        }
      `}</style>
      <Component {...pageProps} />
    </>
  );
}

我们现在可以在组件样式表中使用CSS 变量。如何修复 NVIDIA 控制面板无法在 Windows 11/10 上打开假设我们有一个页面组件,如下所示:--cooper-fontContact

import styles from './Contact.module.css';

const contact = () => {
  return (
    <div className={styles.contact}>
      <h1>Contact page</h1>
      <p>This is contact content uses a local font</p>
    </div>
  );
};

export default contact;

我们可以使用 CSS 变量来访问文件中的字体修复:Nvidia 控制面板未在 Windows 中打开,如下所示:Contact.module.css

.contact > *{
  font-family: var(--cooper-font);
}

使用 Tailwind CSS 将字体添加到 Next.js

要将包与 Tailwind CSS 一起使用NVIDIA 控制面板无法打开(快速修复方法)我们将使用 CSS 变量语法。幸运的是,我们已经在文件中声明了几个 CSS 变量。@next/fontpages/_app.js

回想一下之前,我们在 中注入了以下内容<head>:

<style jsx global>{`
  :root {
    --raleway-font: ${raleway.style.fontFamily};
    --ibmSans-font: ${ibmSans.style.fontFamily};
    --cooper-font: ${cooper.style.fontFamily};
  }
`}</style>

我们还使用variable如下选项定义了一个 CSS 变量名称:

const antonio = Antonio({
  subsets: ['latin'],
  variable: '--antonio-font',
});

我们可以使用这些 CSS 变量声明中的任何一个来通过 Tailwind CSS 添加 Next.js 字体修复:NVIDIA 控制面板无法在 Windows 10 上打开让我们在下一节中看看如何操作。

配置文件tailwind.config.js

我们将在 Tailwind CSS 配置文件中将 CSS 变量作为字体系列添加:

const { fontFamily } = require('tailwindcss/defaultTheme');

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    './pages/**/*.{js,ts,jsx,tsx}',
    './components/**/*.{js,ts,jsx,tsx}',
  ],
  theme: {
    extend: {
      fontFamily: {
        antonio: ['var(--antonio-font)', ...fontFamily.sans],
        ibm: ['var(--ibmSans-font)', ...fontFamily.sans],
        cooper: ['var(--cooper-font)', 'ui-serif', 'Georgia'],
      },
    },
  },
  plugins: [],
};

我们现在可以使用、和实用程序类名称来应用字体Nvidia 控制面板不断关闭:如何修复实现这些实用程序的组件将如下所示:font-antoniofont-ibmfont-cooper

const Tailwind = () => {
  return (
    <div>
      <h1 className="font-ibm">With Tailwind CSS</h1>
      <p className="font-antonio">This is a first paragraph</p>
      <p className="font-cooper">This is a second paragraph</p>
    </div>
  );
};

export default Tailwind;

Chrome 浏览器中的一个问题display:optional

在单个页面中使用默认值时,您可能会遇到 Chrome 问题修复:Nvidia 控制面板无法打开此问题会导致元素在离开以重新加载其他页面后恢复为后备字体。请参阅下面的演示:display: optional

如上面的 GIF 所示,在手动刷新其他页面后修复:NVIDIA 控制面板未打开应用于主页元素的字体恢复为后备字体。我们不得不再次刷新主页以重新应用正确的网络字体。

解决此问题的一种方法是在字体实例中使用而不是默认值。然而,正如我们所知,交换字体可能会导致明显的布局偏移。display: 'swap'

相反,我建议将字体实例移动到文件中,并使用属性、对象或 CSS 变量在任何页面上应用字体。pages/_app.jsclassNamestyle

对于我们的项目,我们会将字体声明从文件移到文件中NVIDIA 控制面板无法打开错误 | 3 种修复方法并为字体系列声明 CSS 变量,如下所示:pages/index.jspages/_app.js

<style jsx global>{`
  :root {
    /* ... */
    --oswald-font: ${oswald.style.fontFamily};
    --merriweather-font: ${merriweather.style.fontFamily};
    --dancingScript-font: ${dancingScript.style.fontFamily};
  }
`}</style>

我们现在可以重构文件以使用 CSS 模块,如下所示:pages/index.js

import styles from './Home.module.css';

export default function Home() {
  return (
    <>
      <div className={styles.oswald}>
        <h1 className={styles.dancingScript}>Home page</h1>
        <p className={styles.merriweather}>
          This text uses a non variable font
        </p>
        <p>This paragraph uses another font</p>
      </div>
      <p>This text should take global styles</p>
    </>
  );
}

然后,使用我们声明的 CSS 变量来访问文件中的字体NVIDIA 控制面板无法在 Windows 11 修复中打开/工作问题如下所示:Home.module.css

.oswald {
  font-family: var(--oswald-font);
}
.dancingScript {
  font-family: var(--dancingScript-font);
}
.merriweather {
  font-family: var(--merriweather-font);
}

如果我们保存所有文件,字体现在应该像在其他浏览器中一样在 Chrome 上按预期应用。

结论

正如我们在本课中所见,Next.js v13 中引入的系统通过抽象其复杂性简化了字体优化。我们已经使用该系统在 Next.js 应用程序中添加了自定义字体系列和 Google Fonts 字体系列。@next/font

在我们的演示项目中修复 NVIDIA 控制面板无法打开我们添加了多种字体来帮助演示在 Next.js 中使用字体的各种方法。但是,在生产站点中,我们应该考虑尽量减少预加载的字体数量。

猜你喜欢

转载自blog.csdn.net/weixin_47967031/article/details/129971344