【问题标题】:How to use custom fonts in Rails 6 with Webpack如何通过 Webpack 在 Rails 6 中使用自定义字体
【发布时间】:2019-12-26 18:26:06
【问题描述】:

对于我新启动的 Rails 6 应用程序,我想要一组自定义字体。我的设置如下所示:

# app/assets/stylesheets/my-font.sass

@font-face
  font-family: 'my-font'
  src: url('fonts/my-font.eot') format('embedded-opentype'), url('fonts/my-font.woff') format('woff'), url('fonts/my-font.ttf') format('truetype'), url('fonts/my-font.svg#my-font') format('svg')
  font-weight: 400
  font-style: normal

然后在app/assets/stylesheets/fonts 下,我在 sass 文件中引用了所有 4 个文件。

我的application.sass 具有以下导入:@import 'my-font'

当我运行rails assets:precompile 时,它还会将所有4 个带有后缀版本的文件(例如my-font-7384658374658237465837246587263458.eot)放在public 目录中。

但是,当我运行应用程序时,浏览器正在根目录中寻找一个名为my-font.eot 的文件,该文件当然不存在,而且是 404s。这对我来说绝对是一个配置问题,但我不知道在哪里。任何帮助将不胜感激。

【问题讨论】:

  • 明确地说,这不是使用 webpacker 而是使用 Sprockets。

标签: ruby-on-rails ruby-on-rails-6 rails-sprockets


【解决方案1】:

如果/assets/ 中有字体,请使用asset-url 帮助器。

src: asset-url('fonts/my-font.eot') format('embedded-opentype'),
     asset-url('fonts/my-font.woff') format('woff'),
     asset-url('fonts/my-font.ttf') format('truetype'),
     asset-url('fonts/my-font.svg#my-font') format('svg')

这样 Sprockets 会将“fonts/my-font.xxx”更改为带有摘要的文件名。

我个人不喜欢将字体放在资产管道上,因为它们可能不会改变并且只会减慢您的预编译时间,所以我将它们公开:

/public/fonts/my-font.eot
/public/fonts/my-font.woff
...ect...

只需使用您的原始 css 代码。

(这与webpack或webpacker无关)

【讨论】:

  • 非常感谢。这解决了问题!
  • 确实,预编译几乎不会更改的字体文件可能是过度设计的事情,但是 Sprockets 还创建每个资产的 gzip 版本,如果浏览器支持,它允许提供压缩文件。您可以通过将文件放在public 中而不是依赖资产预编译来降低速度提升。 WOFF 文件是按设计压缩的,但 TTF、OTF 和 EOT 可能会比较大。
  • 什么是 webpacker 解决方案?
  • 嘿@LuisFlores,我上个月写了一篇关于这个的文章,它包括使用字体的webpacker解决方案ombulabs.com/blog/learning/webpacker/…
【解决方案2】:
  1. 将您的字体添加到app/assets/fonts 文件夹中。

  2. 现在您首先需要告诉 Sprockets 加载字体。为此,只需添加

    //= link_tree ../fontsapp/assets/config/manifest.js

旁注:您可能会遇到更新 initializers/assets.rb 的建议,但那已经过时了,Sprockets 4 希望您添加指令以将字体加载到 manifest.js

  1. 您需要定义font-face 以在您的应用程序中使用,并且您的意图是正确的,但您需要使用font-url 而不是url 才能使其工作,所以

src: font-url('my-font.eot') format('embedded-opentype') ...

请注意,您不需要指定fonts 目录,因为font-url 已经暗示了它。

奖励:您可以使用this sass mixin 简化为您的字体指定替代格式的过程。

【讨论】:

  • 天哪,谢谢。一个更正,将字体移到样式表文件夹之外
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2011-08-24
  • 1970-01-01
相关资源
最近更新 更多