如何在Rails 4中使用字体

Sna*_*ops 63 fonts asset-pipeline ruby-on-rails-4

我有一个Rails 4应用程序,我正在尝试使用自定义字体.

我已经关注了很多关于这方面的教程,不知何故它只是不适用于我的应用程序.

我正在使用application.css.less并有以下声明:

@font-face {
    font-family: 'HDVPeace';
    src: font-url('HDV_Peace.eot');
    src: font-url('HDV_Peace.eot?iefix') format('eot'),
        font-url('HDV_Peace.woff') format('woff'),
        font-url('HDV_Peace.ttf') format('truetype'),
        font-url('HDV_Peace.svg#webfont') format('svg');
}
Run Code Online (Sandbox Code Playgroud)

注意:我尝试过使用 url() 而不是 font-url() .前者在控制台上生成404错误,后者似乎根本不做任何事情.在资源下的chrome dev工具中,字体文件不会出现在 文件夹assets 或任何位置

在我的config/application.rb身上:

config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
Run Code Online (Sandbox Code Playgroud)

在我config/environments/development.rbconfig/environments/production.rb我都有:

config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.precompile += %w( .svg .eot .woff .ttf)
Run Code Online (Sandbox Code Playgroud)

我的字体文件位于app/assets/fonts以下文件夹中,并且不包含在...

我错过了什么?

更新:

文件夹结构

app
 |----assets
        |----fonts
               |----HDV_Peace.eot
               |----HDV_Peace.svg
               |----HDV_Peace.ttf
               |----HDV_Peace.woff
Run Code Online (Sandbox Code Playgroud)

Par*_*ert 60

您的@font-face声明非常接近,您只是错过/assets了网址声明中的前缀.

@font-face {
    font-family: 'HDVPeace';
    src: url('/assets/HDV_Peace.eot');
    src: url('/assets/HDV_Peace.eot?iefix') format('eot'),
         url('/assets/HDV_Peace.woff') format('woff'),
         url('/assets/HDV_Peace.ttf') format('truetype'),
         url('/assets/HDV_Peace.svg#webfont') format('svg');
}
Run Code Online (Sandbox Code Playgroud)

添加的任何内容assets.paths都可直接在/assets开发和生产的路径下使用.您只需要内部的资产路径修改行application.rb,再次执行它development.rb并且production.rb只是冗余.

此外,所有字体格式基本上都是二进制的.无需预编译它们,因此您可以安全地删除assets.precompile添加内容.

这是一个新的Rails 4应用程序,提供自定义字体.除了css中的font-face import语句和添加一个页面以显示没有其他内容已经完成:

https://github.com/sorentwo/font-example

  • 我刚刚回顾了我在Rails 4上使用自定义字体设置的应用程序之一.看起来甚至不需要在路径中添加`fonts`.删除`paths`添加,重新启动,它应该工作正常. (9认同)
  • `font-url`应该自己添加`/ assets`前缀,所以不需要指定它. (8认同)
  • 我发现需要一个新的Rails 4应用程序:`font-url('fontfile.eot?');`在scss文件中.在app/assets下创建字体方向后,需要重新启动服务器才能工作. (6认同)
  • 我认为问题在于Rails4不再在资产管道中放置一个版本的字体 - 没有摘要.因此,你不能相信/assets/HDV_Peace.eot存在(它存在于Rails3中,现在只存在/assets/HDV_Peace-yourdigesthere.eot.)请参阅http://stackoverflow.com/questions/17536023/rake-assetsprecompilenodigest-in-rails-4了解更多详情 (5认同)
  • 尝试并重新启动服务器。没变。在 Chrome 中 Sources 下的 Dev Tools(它显示服务器推送到客户端的所有资产)中,我没有看到字体文件或字体文件夹。此外,控制台仍然返回“未找到 404 资源”错误......资产管道不知何故没有拾取文件...... (2认同)
  • 如果我使用`asset-url`一切正常.`font-url`不适合我. (2认同)

小智 51

在Rails 4中,有一个帮助器来设置字体的路径.

如果你有/ assets/fonts或vendor/assets/fonts中的字体,Rails 4会找到它们!要利用这一点,在Bootstrap CSS文件中将@font_face调用更改为

@font-face {
  font-family: 'Glyphicons Halflings';
  src: font-url('glyphicons-halflings-regular.eot');
  src: font-url('glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), 
       font-url('glyphicons-halflings-regular.woff') format('woff'), 
       font-url('glyphicons-halflings-regular.ttf') format('truetype'), 
       font-url('glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
Run Code Online (Sandbox Code Playgroud)

请注意,字体文件前面没有文件夹规范.这是由铁轨助手完成的.

  • 这就像一个魅力.谢谢!! (4认同)

Mik*_*any 20

请勿您的字体目录进行硬编码,因为该位置是动态的.

就像有图像的内置助手一样,还有内置的字体助手:http: //api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html#method-i-font_url

例:

@font-face {
    font-family: 'QuicksandOTF';
    src: font_url('Quicksand-Regular.otf') format('opentype');
    font-weight: normal;
    font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)


reb*_*tte 11

这对我来说适用于Rails 4.1应用程序.

  1. 在`app/assets/fonts`下添加字体
  2. 从`.css.scss`文件中调用它们,如下所示:
@font-face {
  font-family: 'icomoon';
  src: url(font-path('icomoon.eot') + "?#iefix") format('embedded-opentype'),
    url(font-path('icomoon.woff')) format('woff'),
    url(font-path('icomoon.ttf'))  format('truetype'),
    url(font-path('icomoon.svg') + "#icomoon") format('svg');
}
[class^="icon-"], [class*=" icon-"] {
  font-family: 'icomoon';
  speak: none;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
Run Code Online (Sandbox Code Playgroud)


小智 9

创建app/assets/fonts目录后重新启动'rails server'