【问题标题】:How do you use custom fonts with TailwindCSS and NuxtJS?如何在 TailwindCSS 和 NuxtJS 中使用自定义字体?
【发布时间】:2020-09-10 13:53:31
【问题描述】:

所以我正在使用 NuxtJS 构建一个网站,并使用 Tailwind CSS 作为我的样式。我正在使用@nuxtjs/tailwindcss 模块。

问题是我的字体似乎没有加载到浏览器上。正如您在 devtools 屏幕截图中看到的那样,正确的 font-family 仍然由 CSS 应用,但浏览器仍然使用 Times New Roman 呈现我的文本。

--Devtools Screenshot

我的字体文件是 .ttf 文件,存储在我项目根目录的 /assets/fonts/ 文件夹中。

我的tailwind.css 文件看起来像这样

@import 'tailwindcss/components';
@import 'tailwindcss/utilities';

@font-face {
  font-family: 'Montserrat';
  font-weight: 400;
  src: url('../fonts/Montserrat-Regular.ttf') format('ttf');
}

@font-face {
  font-family: 'Montserrat';
  font-weight: 700;
  src: url('../fonts/Montserrat-Bold.ttf') format('ttf');
}

@font-face {
  font-family: 'Montserrat';
  font-weight: 900;
  src: url('../fonts/Montserrat-Black.ttf') format('ttf');
}

而我的tailwind.config.js 看起来像这样

module.exports = {
  theme: {
    fontFamily: {
      sans: ['Montserrat'],
      serif: ['Montserrat'],
      mono: ['Montserrat'],
      display: ['Montserrat'],
      body: ['Montserrat']
    },
    // Some more irrelevant theme customization
 },
  variants: {},
  plugins: []
}

我想完全覆盖 Tailwind 的基本字体,所以我没有使用 extend,我计划在弄清楚如何正确执行此操作后清理它并为某些文本使用其他字体。

我的直觉告诉我 Tailwind 不是问题所在,因为 Devtools 实际上将 Montserrat 显示为计算字体,并且 webpack 构建不会引发任何错误。

我已经尝试了this related question 中的两个答案,接受的一个实际上是我的实现,但到目前为止没有好的结果。

如果有人可以帮助我,我将非常感激!

编辑:我创建了一个 Github 存储库来重现该问题,它可以在 here 找到,并且所有重现步骤都在 README.MD 中

【问题讨论】:

  • 生产目录中有字体吗?是浏览器加载的吗?
  • 正如我在帖子中解释的那样(也许不够清楚,我的错),我的字体文件位于我的项目目录根目录下的/assets/fonts。我不知道如何检查浏览器是否实际加载了字体,我只知道我的屏幕截图显示正确的字体显示在“计算”面板中,但浏览器仍然使用 Times New Roman 呈现,这将导致我相信字体实际上没有加载。
  • 1.我相信您在谈论源根目录,但我在询问构建后的文件(dist 目录)以检查 webpack 是否出于某种原因忽略了它们。 2.您可以在devtools的网络选项卡中检查文件是否加载到浏览器中。 3. 构建应用程序并检查 css 源是否仍然存在带有您的字体的 @font-face。 4. 最好能在任何沙箱中提供一些演示。
  • 哦,我的错,我虽然你在谈论字体来源。不过,我的构建输出中没有 CSS,只有两个文件夹(客户端和服务器,使用 Nuxt 似乎很正常),客户端一个包含一个包含我构建的字体的字体文件夹。我对服务器端渲染的东西有点陌生,尤其是在开发模式下,但我有点惊讶地看到我的网络选项卡显示没有下载 CSS 样式表或字体文件。我会尝试做一些演示,但我不知道有任何沙箱可以重新创建 SSR 环境。我很快就会提供一个 github 链接。感谢您的帮助!
  • codesandbox.io 我认为最快的方法是找到任何现有的 nuxt 演示,然后像你一样更改字体。但是 git source 也可以。

标签: css vue.js fonts tailwind-css nuxtjs


【解决方案1】:

这不是 Tailwind、Vue 或 Nuxt 的问题 - 只是在 CSS 中。

@font-facesrc 中的格式值有误。 “ttf”是扩展名,而不是格式名称。它应该是“truetype”。实际上,对于 woff 或 svg,扩展名与格式名称相同,因此可能会与“ttf”和“truetype”混淆。

所以只需替换:

src: url('../fonts/Montserrat-Regular.ttf') format('ttf');

与:

src: url('../fonts/Montserrat-Regular.ttf') format('truetype');

或者删除格式,因为没有它也可以工作。

src: url('../fonts/Montserrat-Regular.ttf');

WOFF

此外,最好使用更新和更小的格式:woff 和 woff2。

src:
  url('../fonts/Montserrat-Regular.ttf') format('truetype'),
  url('../fonts/Montserrat-Regular.woff2') format('woff2'),
  url('../fonts/Montserrat-Regular.woff') format('woff')

我个人只使用 woff 和 woff2,因为所有主流浏览器都支持它。 Based on caniuse coverage, for now is > 98%,所以在我看来,没有理由再使用TTF了。

src:
  url('../fonts/Montserrat-Regular.woff2') format('woff2'),
  url('../fonts/Montserrat-Regular.woff') format('woff')

【讨论】:

  • 我实际上并不惊讶这如此简单......我很困惑,因为我基本上在我的一个角度项目中使用了相同的“ttf”格式,它工作得非常好。也感谢woff的建议,我去看看!无论如何,这行得通。非常感谢您的帮助!
  • 如果“ttf”在其他项目中工作,那么可能项目中使用的字体实际上是在系统本地安装的,所以没有使用font-face,你可能会错过它。它也可以在不使用“format('xxx')”的情况下工作。
  • PS 如果你打算使用这个 repo,你在 package.json 中缺少 @nuxtjs/apollo 依赖
  • 我不打算使用 repo,它只是主要的一个副本。我试图删除尽可能多的依赖项,以使您更轻松。猜猜这个溜了。再次感谢。
猜你喜欢
  • 2022-01-19
  • 2021-09-08
  • 2020-08-28
  • 2021-01-10
  • 1970-01-01
  • 2022-01-06
  • 2021-06-09
  • 2019-02-21
  • 1970-01-01
相关资源
最近更新 更多